<?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>97288</bug_id>
          
          <creation_ts>2012-09-20 20:47:27 -0700</creation_ts>
          <short_desc>JSC should infer when indexed storage is contiguous, and optimize for it</short_desc>
          <delta_ts>2012-10-09 22:37:07 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>97535</dependson>
    
    <dependson>97537</dependson>
    
    <dependson>98236</dependson>
    
    <dependson>98857</dependson>
    
    <dependson>98859</dependson>
          <blocked>98605</blocked>
    
    <blocked>98606</blocked>
    
    <blocked>98608</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>725115</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-20 20:47:27 -0700</bug_when>
    <thetext>Monster work in progress patch coming soon to an attachment near you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725116</commentid>
    <comment_count>1</comment_count>
      <attachid>165040</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-20 20:51:45 -0700</bug_when>
    <thetext>Created attachment 165040
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726315</commentid>
    <comment_count>2</comment_count>
      <attachid>165296</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-23 16:41:55 -0700</bug_when>
    <thetext>Created attachment 165296
it has more things

Patchable get_by_val&apos;s in the baseline JIT.  They&apos;re no fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726351</commentid>
    <comment_count>3</comment_count>
      <attachid>165304</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-23 20:15:35 -0700</bug_when>
    <thetext>Created attachment 165304
patching is done

get_by_val/put_by_val patching is done.  still need to pull this through the DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727362</commentid>
    <comment_count>4</comment_count>
      <attachid>165542</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-25 00:37:37 -0700</bug_when>
    <thetext>Created attachment 165542
dfg stuff has begun</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728304</commentid>
    <comment_count>5</comment_count>
      <attachid>165747</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-26 01:20:27 -0700</bug_when>
    <thetext>Created attachment 165747
more

Wrote a bunch of the DFG code.  Not done yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728796</commentid>
    <comment_count>6</comment_count>
      <attachid>165838</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-26 11:32:34 -0700</bug_when>
    <thetext>Created attachment 165838
almost there!

Code is written but it hasn&apos;t been compiled or tested.

Oh, and I haven&apos;t done anything about 32-bit yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728917</commentid>
    <comment_count>7</comment_count>
      <attachid>165861</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-26 13:25:27 -0700</bug_when>
    <thetext>Created attachment 165861
fixing things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729275</commentid>
    <comment_count>8</comment_count>
      <attachid>165945</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-27 00:17:50 -0700</bug_when>
    <thetext>Created attachment 165945
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731262</commentid>
    <comment_count>9</comment_count>
      <attachid>166374</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-29 17:56:29 -0700</bug_when>
    <thetext>Created attachment 166374
sunspider runs

I don&apos;t know how fast it runs, but at least it runs.  Still lots more work to do before this patch is complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731280</commentid>
    <comment_count>10</comment_count>
      <attachid>166379</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-29 23:14:27 -0700</bug_when>
    <thetext>Created attachment 166379
it sort of works

I&apos;m sort of reconsidering whether my idea of ridding the world of holes was the right approach.  Although this patch is already a speed-up, it&apos;s looking like it would be an even clearer win if I did have some support for holes in contiguous arrays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731351</commentid>
    <comment_count>11</comment_count>
      <attachid>166395</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-30 18:07:53 -0700</bug_when>
    <thetext>Created attachment 166395
new approach: holy contiguous

Note yet done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731358</commentid>
    <comment_count>12</comment_count>
      <attachid>166397</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-30 18:34:55 -0700</bug_when>
    <thetext>Created attachment 166397
I think it&apos;s done (holy contiguous)

Still haven&apos;t compiled it yet.  What could go wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731370</commentid>
    <comment_count>13</comment_count>
      <attachid>166401</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-30 20:24:06 -0700</bug_when>
    <thetext>Created attachment 166401
it compiles (holy contiguous)

Don&apos;t know if it does things yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735261</commentid>
    <comment_count>14</comment_count>
      <attachid>167234</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-04 19:46:40 -0700</bug_when>
    <thetext>Created attachment 167234
it works on 64-bit, starting to make it work on 32-bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735323</commentid>
    <comment_count>15</comment_count>
      <attachid>167244</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-04 21:56:07 -0700</bug_when>
    <thetext>Created attachment 167244
the patch, possibly

I wrote the 32-bit code but I&apos;m not sure if it works, yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736294</commentid>
    <comment_count>16</comment_count>
      <attachid>167462</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-06 15:32:23 -0700</bug_when>
    <thetext>Created attachment 167462
the patch

It&apos;s ready!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736295</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-06 15:35:49 -0700</bug_when>
    <thetext>Attachment 167462 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSObject.h:695:  The parameter name &quot;butterfly&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:764:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:609:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:1118:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1465:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.h:151:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:152:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:152:  The parameter name &quot;storage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:156:  The parameter name &quot;callType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:156:  The parameter name &quot;callData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:202:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 12 in 52 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736297</commentid>
    <comment_count>18</comment_count>
      <attachid>167462</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-06 15:49:16 -0700</bug_when>
    <thetext>Comment on attachment 167462
the patch

Attachment 167462 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14207063</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736298</commentid>
    <comment_count>19</comment_count>
      <attachid>167462</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-06 15:51:49 -0700</bug_when>
    <thetext>Comment on attachment 167462
the patch

Attachment 167462 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14181802</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736301</commentid>
    <comment_count>20</comment_count>
      <attachid>167462</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-06 15:55:39 -0700</bug_when>
    <thetext>Comment on attachment 167462
the patch

Attachment 167462 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14181806</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736305</commentid>
    <comment_count>21</comment_count>
      <attachid>167462</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-06 16:07:54 -0700</bug_when>
    <thetext>Comment on attachment 167462
the patch

Attachment 167462 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14183812</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736317</commentid>
    <comment_count>22</comment_count>
      <attachid>167462</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-06 19:01:37 -0700</bug_when>
    <thetext>Comment on attachment 167462
the patch

Attachment 167462 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14181834

New failing tests:
fast/js/array-bad-time.html
fast/js/cross-frame-really-bad-time-with-__proto__.html
fast/js/mozilla/strict/15.4.4.12.html
fast/js/array-slow-put.html
fast/js/dfg-array-push-bad-time.html
fast/js/cross-frame-really-bad-time.html
fast/js/array-defineOwnProperty.html
sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.6_Array_prototype_pop/S15.4.4.6_A4_T1.html
fast/js/Object-defineProperty.html
fast/dom/message-port-deleted-by-accessor.html
fast/canvas/webgl/shader-deleted-by-accessor.html
fast/js/dfg-holy-put-by-val-interferes-with-get-array-length.html
fast/js/dfg-array-push-slow-put.html
fast/js/object-bad-time.html
fast/js/dfg-array-pop-side-effects.html
fast/js/mozilla/strict/15.4.4.6.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736445</commentid>
    <comment_count>23</comment_count>
      <attachid>167462</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-07 16:42:17 -0700</bug_when>
    <thetext>Comment on attachment 167462
the patch

Seems to be failing all the things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736500</commentid>
    <comment_count>24</comment_count>
      <attachid>167502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-07 22:03:22 -0700</bug_when>
    <thetext>Created attachment 167502
the patch

Still need to make the various build systems work but this one should be fine other than that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736502</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-07 22:06:46 -0700</bug_when>
    <thetext>Attachment 167502 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSObject.h:695:  The parameter name &quot;butterfly&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:764:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:609:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:1120:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1465:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.h:151:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:152:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:152:  The parameter name &quot;storage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:156:  The parameter name &quot;callType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:156:  The parameter name &quot;callData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:202:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 12 in 52 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736507</commentid>
    <comment_count>26</comment_count>
      <attachid>167502</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-07 22:20:26 -0700</bug_when>
    <thetext>Comment on attachment 167502
the patch

Attachment 167502 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14221169</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736509</commentid>
    <comment_count>27</comment_count>
      <attachid>167502</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-07 22:23:40 -0700</bug_when>
    <thetext>Comment on attachment 167502
the patch

Attachment 167502 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14223141</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736512</commentid>
    <comment_count>28</comment_count>
      <attachid>167502</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-07 22:29:38 -0700</bug_when>
    <thetext>Comment on attachment 167502
the patch

Attachment 167502 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14228125</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736513</commentid>
    <comment_count>29</comment_count>
      <attachid>167502</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-07 22:30:13 -0700</bug_when>
    <thetext>Comment on attachment 167502
the patch

Attachment 167502 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14218180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736536</commentid>
    <comment_count>30</comment_count>
      <attachid>167513</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-08 00:10:43 -0700</bug_when>
    <thetext>Created attachment 167513
the patch

It should now pass all of the things, at least on Mac.  We&apos;ll see how things go on other build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736537</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 00:13:41 -0700</bug_when>
    <thetext>Attachment 167513 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSObject.h:696:  The parameter name &quot;butterfly&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:765:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:609:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:1120:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1465:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.h:157:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;storage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:208:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 12 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736542</commentid>
    <comment_count>32</comment_count>
      <attachid>167513</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-08 00:21:24 -0700</bug_when>
    <thetext>Comment on attachment 167513
the patch

Attachment 167513 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14199008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736543</commentid>
    <comment_count>33</comment_count>
      <attachid>167513</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 00:26:27 -0700</bug_when>
    <thetext>Comment on attachment 167513
the patch

Attachment 167513 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14204564</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736544</commentid>
    <comment_count>34</comment_count>
      <attachid>167513</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-10-08 00:26:31 -0700</bug_when>
    <thetext>Comment on attachment 167513
the patch

Attachment 167513 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14105048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736547</commentid>
    <comment_count>35</comment_count>
      <attachid>167513</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 00:29:53 -0700</bug_when>
    <thetext>Comment on attachment 167513
the patch

Attachment 167513 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14205572</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736557</commentid>
    <comment_count>36</comment_count>
      <attachid>167517</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-08 01:03:49 -0700</bug_when>
    <thetext>Created attachment 167517
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736562</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 01:07:26 -0700</bug_when>
    <thetext>Attachment 167517 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSObject.h:696:  The parameter name &quot;butterfly&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:765:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:609:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:1120:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1465:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.h:157:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;storage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:208:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 12 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736563</commentid>
    <comment_count>38</comment_count>
      <attachid>167517</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 01:19:13 -0700</bug_when>
    <thetext>Comment on attachment 167517
the patch

Attachment 167517 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14196815</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736564</commentid>
    <comment_count>39</comment_count>
      <attachid>167517</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-08 01:24:17 -0700</bug_when>
    <thetext>Comment on attachment 167517
the patch

Attachment 167517 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14221201</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736567</commentid>
    <comment_count>40</comment_count>
      <attachid>167517</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-08 01:35:19 -0700</bug_when>
    <thetext>Comment on attachment 167517
the patch

Attachment 167517 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14209382</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736990</commentid>
    <comment_count>41</comment_count>
      <attachid>167599</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-08 13:45:20 -0700</bug_when>
    <thetext>Created attachment 167599
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736993</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 13:48:14 -0700</bug_when>
    <thetext>Attachment 167599 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSObject.h:696:  The parameter name &quot;butterfly&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:765:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:609:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:1120:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1465:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.h:157:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;storage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:208:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 12 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737050</commentid>
    <comment_count>43</comment_count>
      <attachid>167599</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-08 14:29:34 -0700</bug_when>
    <thetext>Comment on attachment 167599
the patch

Attachment 167599 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14207627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737225</commentid>
    <comment_count>44</comment_count>
      <attachid>167647</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-08 16:51:28 -0700</bug_when>
    <thetext>Created attachment 167647
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737232</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 16:58:27 -0700</bug_when>
    <thetext>Attachment 167647 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSObject.h:696:  The parameter name &quot;butterfly&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:765:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOperations.cpp:609:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:1120:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1430:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1465:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSArray.h:157:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:158:  The parameter name &quot;storage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:162:  The parameter name &quot;callData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.h:208:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 12 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737357</commentid>
    <comment_count>46</comment_count>
      <attachid>167647</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-08 19:28:50 -0700</bug_when>
    <thetext>Comment on attachment 167647
the patch

Attachment 167647 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14211595</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738150</commentid>
    <comment_count>47</comment_count>
      <attachid>167647</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-09 13:43:52 -0700</bug_when>
    <thetext>Comment on attachment 167647
the patch

r=me with style and build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738171</commentid>
    <comment_count>48</comment_count>
      <attachid>167844</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-09 14:08:28 -0700</bug_when>
    <thetext>Created attachment 167844
patch for landing

Fixing things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738174</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 14:11:29 -0700</bug_when>
    <thetext>Attachment 167844 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGOperations.cpp:609:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 58 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738321</commentid>
    <comment_count>50</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-09 16:41:08 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/130826</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738554</commentid>
    <comment_count>51</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-09 22:16:49 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Landed in http://trac.webkit.org/changeset/130826
... and buildfix landed in http://trac.webkit.org/changeset/130826
... and it caused a serious regression on Qt-ARM: https://bugs.webkit.org/show_bug.cgi?id=98857</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738571</commentid>
    <comment_count>52</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-09 22:37:07 -0700</bug_when>
    <thetext>One more regression on Qt-WK2 64 bit: https://bugs.webkit.org/show_bug.cgi?id=98859</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165040</attachid>
            <date>2012-09-20 20:51:45 -0700</date>
            <delta_ts>2012-09-23 16:41:55 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>contiguous_patch_1.diff</filename>
            <type>text/plain</type>
            <size>60323</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5MTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBpbmZlciB3aGVuIGluZGV4ZWQgc3RvcmFnZSBpcyBjb250aWd1b3VzLCBhbmQg
b3B0aW1pemUgZm9yIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5o
OgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tUG9p
bnRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cG9pbnRlcik6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6cHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpjb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aGFzQ29udGlndW91cyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNob3J0Q29tcGFj
dGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29u
dmVydFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252
ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0
dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVl
ZHNTbG93UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorCiAyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgaXNuJ3QgYmVpbmcgdXNlZCBvciB0ZXN0ZWQsIHNv
IHdlIHNob3VsZCByZW1vdmUgaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseS5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFj
aXR5ICsgMSk7CiAgICAgfQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1
c3QgYmVjYXVzZSBpdCdzIGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhl
IHdob2xlIHBvaW50IG9mIGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1l
dGljLgorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAg
fQorICAgIAorICAgIGNoYXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPih0aGlzKTsgfQorICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVy
KCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1
cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCk7IH0KQEAgLTcwLDkgKzc5LDE2IEBAIHB1YmxpYzoKICAgICBj
b25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0
b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQog
ICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJu
IGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMy
X3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3Ro
KCk7IH0KKyAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRl
cigpLT52ZWN0b3JMZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90
IHZhbHVlKSB7IGluZGV4aW5nSGVhZGVyLT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9CisgICAg
dm9pZCBzZXRWZWN0b3JMZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXItPnNl
dFZlY3Rvckxlbmd0aCh2YWx1ZSk7IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRo
aXMpOyB9CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGlu
Z1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
b250aWd1b3VzKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmllcjxVbmtub3du
PiA+KCk7IH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9y
YWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSk7IH0KICAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyAr
MTQ0LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheQogCiBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNp
emVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CiAgICAgdW5zaWduZWQgcHJv
cGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBG
SVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29w
IHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCkBAIC0xNjMsNyArMTYzLDcgQEAgaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykK
IHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJv
dmUuCiAgICAgbWVtbW92ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAx
MjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDE3IEBAIGlubGluZSBz
aXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXQKIAogaW5saW5lIHNpemVfdCBJbmRleGlu
Z0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7Ci0gICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKSkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdmVjdG9y
TGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1
cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAvLyBGbGFn
cyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBIYXNDb250aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIApAQCAtNDIsOSAr
NDMsMTEgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZAogCiAvLyBM
aXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBOb25BcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgID0gSGFzQ29udGlndW91czsK
IHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgICAg
ICA9IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSA9IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiBzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEFycmF5Q2xhc3MgICAgICAgICAgICAgICAgICAgICAgPSBJc0Fy
cmF5OyAvLyBJJ2Qgd2FudCB0byBjYWxsIHRoaXMgIkFycmF5IiBidXQgdGhpcyB3b3VsZCBsZWFk
IHRvIGRpc2FzdHJvdXMgbmFtZXNwYWNlIHBvbGx1dGlvbi4KK3N0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgQXJyYXlXaXRoQ29udGlndW91cyAgICAgICAgICAgICA9IElzQXJyYXkgfCBIYXNDb250
aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhBcnJheVN0b3JhZ2Ug
ICAgICAgICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkgfCBIYXNT
bG93UHV0QXJyYXlTdG9yYWdlOwogCkBAIC01Miw2ICs1NSwxMCBAQCBzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQCiAgICAgTm9uQXJyYXk6ICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheUNsYXNzCiAKKyNkZWZpbmUgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVMgXAorICAgIE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICBcCisgICAg
Y2FzdCBBcnJheVdpdGhDb250aWd1b3VzCisKICNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTIFwKICAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKQEAg
LTc2LDYgKzgzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihJbmQK
ICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXModHlwZSk7CiB9CiAKK3N0YXRpYyBpbmxp
bmUgYm9vbCBoYXNDb250aWd1b3VzKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAg
cmV0dXJuICEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9CisKIHN0YXRpYyBpbmxp
bmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKIHsKICAg
ICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRB
cnJheVN0b3JhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk1LDYgKzM5NSwxNiBAQCBKU1ZhbHVl
IEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhD
b250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAKQEAgLTQ1MSw2
ICs0NjEsMjUgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91
czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAg
ICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFs
dWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhv
dXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewogICAg
ICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgaWYgKGF0dGVtcHRU
b0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1ZSkp
IHsKQEAgLTU3OCw2ICs2MDcsMTkgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3Rh
dGUqIGV4ZQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKCFtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsK
KyAgICAgICAgICAgIGlmICghbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5pc051bWJlcigp
KQorICAgICAgICAgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcXNvcnQobV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNv
bXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTYwNyw2ICs2NDks
NyBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIC8v
IHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2
YWx1ZXMuCiAgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CiAgICAgICAgIAor
ICAgICAgICBhdHRlbXB0VG9Db252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91
cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAg
CkBAIC02MTUsODYgKzY1OCwxMTEgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3Rh
dGUqIGV4ZQogICAgIH0KIH0KIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykK
K3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNob3J0
Q29tcGFjdGVkVmVjdG9yKFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJl
bGV2YW50TGVuZ3RoKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7Ci0g
ICAgCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNl
IEFycmF5Q2xhc3M6CisgICAgaWYgKCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4g
YmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9u
IHRoYXQuCisgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRv
aW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0
ZW1wb3JhcnkKKyAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBj
cmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0
IHJldHVybgorICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZm
ZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgogICAgICAgICAK
LSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxE
YXRhKCkpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewot
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIENv
bnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBz
byB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgICAg
IC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2lj
ZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0g
ICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5n
IGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJu
Ci0gICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0
aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAgICAgICAKLSAg
ICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCk7Ci0gICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQorICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpOworICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAg
ICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAg
IEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKICAgICAgICAg
Ci0gICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykg
ewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OwotICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAg
IHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7
Ci0gICAgICAgIH0KKyAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKSB7CisgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBiZWdpbltpXS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5p
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAg
IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2
YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBU
aGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVu
dCB2YWx1ZXMgZXZlbiBhZnRlcgotICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFu
IGV4Y2VwdGlvbi4KKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0
byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAvLyBh
IHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgCi0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0g
ICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5n
SW5saW5lKGV4ZWMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0u
Zmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CiAgICAgICAgIAotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRl
bXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEhlYXA6OmhlYXAodGhpcykt
PnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAg
ICAgICAKLSAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBh
IGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQg
YmUgTyhOKSByYXRoZXIKLSAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgIC8vIEZJWE1F
OiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBi
ZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAgLy8g
dGhhbiBPKE4gbG9nIE4pLgogICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICAgICAg
aWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgICAgIHFzb3J0KHZhbHVlcy5i
ZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVyZ2Vzb3J0
KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSNlbHNlCi0gICAgICAgIC8vIEZJWE1FOiBU
aGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNv
cnQuCi0gICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUg
c29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCisg
ICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKICAgICAgICAgcXNvcnQodmFsdWVzLmJl
Z2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlT
dHJpbmdQYWlyRm9yUVNvcnQpOworICAgIGVsc2UKKyAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5i
ZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbHNlCisgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJy
YXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KKyAgICAvLyBF
Q01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFj
dGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIHFzb3J0KHZhbHVlcy5i
ZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgorICAgIAorICAgIC8vIElmIHRoZSB0b1N0cmlu
ZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9y
YWdlLAorICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51
bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAg
Y2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3Ro
KHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICAvLyBJ
ZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBv
ciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5k
bGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCi0gICAgICAgIGlmIChzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkgewotICAg
ICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkgewor
ICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxl
dmFudExlbmd0aCk7CiAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3Ro
KCkgPCByZWxldmFudExlbmd0aCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChyZWxl
dmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5m
aXJzdCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKQorICAgICAgICBiZWdpbltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICAKKyAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKK30KKwordm9pZCBKU0FycmF5Ojpz
b3J0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2Rl
KCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBI
ZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBjYXNlIEFy
cmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdp
dGhDb250aWd1b3VzPigKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgp
KSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0
b3I8QXJyYXlXaXRoQ29udGlndW91cz4oCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvciwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKworICAgICAgICBhdHRlbXB0VG9Db252ZXJ0
Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8
ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0Q29t
cGFjdGVkVmVjdG9yKFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2
YW50TGVuZ3RoLCAKIAogICAgICAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSos
IGJvb2wgd3JpdGFibGUpOwogCkBAIC0xMDYsNiArMTA5LDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKICAgICB9
OwogCisgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOworICAgICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3Ro
KHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOR1RIKSk7CisgICAgICAgIGhlYWRlci5z
ZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRl
KAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgaGVhZGVyLCBoZWFkZXIudmVj
dG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisKICAgICBpbmxp
bmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewogICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKApAQCAtMTIxLDcgKzEzMywxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlC
dXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoQ29udGlndW91cykpCisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVD
b250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgICAgICBidXR0ZXJmbHkg
PSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAg
ICAgfQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMTUxLDI2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCogdGVtcDsK
LSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5n
dGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAgICAgKmJ1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlh
bExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMg
PSAwOwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAgICAgICAg
ICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAs
IDApOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0
ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAg
ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGlu
aXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+
bV9pbmRleEJpYXMgPSAwOworICAgICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVu
Z3RoOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMSw3ICsyMzEsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHBy
b3RvCiAgICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwog
CiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpT
QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQ
cm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1fYXJyYXlTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJy
YXlXaXRoQ29udGlndW91cykpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMjQgKzEzMiwzOSBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUu
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVu
dFRhcmdldDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJj
ZTsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgY3VycmVudFRh
cmdldCA9IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGN1cnJl
bnRTb3VyY2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgICAgICBjb3Vu
dCA9IG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
dXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KTsgY291bnQtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJy
ZW50U291cmNlKyspLT5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3Vy
cmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOyAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0LiBXaHkg
aXNuJ3QgdGhpcyBwdWJsaWNMZW5ndGgoKT8KICAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCiAgICAgICAgICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkg
eworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0
KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3Vy
cmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVy
Zmx5OwpAQCAtMTU5LDYgKzE3NCw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlz
aXRCdXR0ZXIKICAgICAgICAgCiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJp
YXRlLgogICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+Y29udGlndW91cygpLCBidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMo
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKQEAgLTIzNSw2ICsyNTMsMTMgQEAgYm9vbCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzogeworICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKQEAgLTM1Miw2ICsz
NzcsMjEgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBBU1NFUlQo
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIDwgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtw
cm9wZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKHByb3BlcnR5TmFtZSArIDEp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHVibGlj
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVy
dHlOYW1lXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC0zNjIsMTUgKzQwMiwxOCBAQCB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgICAgIAorICAg
ICAgICBKU1ZhbHVlIG9sZCA9IHZhbHVlU2xvdC5nZXQoKTsKKyAgICAgICAgdmFsdWVTbG90LnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgCiAgICAg
ICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4K
ICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgIGxlbmd0
aCA9IHByb3BlcnR5TmFtZSArIDE7CiAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVu
Z3RoKTsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAg
ICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQorICAgICAgICB9IGVsc2UgaWYgKCFvbGQpIHsKICAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgCi0gICAg
ICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7
CisgICAgICAgICAgICBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGV4
ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFnZSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCkBAIC00NDQsNiArNDg3LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmVudGVyRGljdGlvbmFyeUkKIHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50LCBh
cyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNvbnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQorICAg
ICAgICAvLyB0aGlzIGNhc2UgaWYgd2UgZXZlciBjYXJlZC4KKyAgICAgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFr
OwpAQCAtNDkxLDkgKzUzOSwxMDQgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEFycgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFT
RV9WRUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCit7CisgICAgQVNT
RVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisg
ICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwor
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9m
TGluZVNpemUoKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlD
YXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOworICAg
IAorICAgIG1lbWNweSgKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlTaXplLAorICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKTsKKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JM
ZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPnNldExlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5l
d1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgbmV3U3RvcmFnZS0+bV9pbmRleEJp
YXMgPSAwOworICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBwdWJsaWNMZW5n
dGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICBuZXdTdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXggPSAwOworICAgIG5ld1N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb24gPSAwOworI2VuZGlmCisgICAgbWVtY3B5KAorICAgICAgICBuZXdTdG9yYWdlLT5tX3Zl
Y3RvciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgcHVibGljTGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgdHJh
bnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3
U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3U3RvcmFnZTsKK30KKworQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHJldHVy
biBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5zaXRpb24s
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSk7Cit9CisK
K3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3Vz
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAg
IEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7Cisg
ICAgQVNTRVJUKCFzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkp
OworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0KKyAgICAgICAgQnV0dGVyZmx5
OmZyb21Qb2ludGVyKG1fYnV0dGVyZmx5LT5wb2ludGVyKCkgKyBBcnJheVN0b3JhZ2U6OnNpemVG
b3IoMCkpOworICAgIAorICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAKKyAgICBuZXdC
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5ld0J1dHRlcmZs
eS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgIAorICAgIC8vIFNoaWZ0
IHRoZSBuYW1lZCBwcm9wZXJ0aWVzIG92ZXIsIGlmIHRoZXJlIGFyZSBzb21lLgorICAgIHNpemVf
dCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOworICAgIGlmIChw
cm9wZXJ0eVNpemUpIHsKKyAgICAgICAgbWVtbW92ZSgKKyAgICAgICAgICAgIG5ld0J1dHRlcmZs
eS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgICAgICBtX2J1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgICAgICBwcm9w
ZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9Db250aWd1b3VzKTsKKyAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworfQorCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgorICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRh
KTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgd2F5IG1vcmUgZWZmaWNpZW50LCBp
ZiB3ZSBjYXJlZC4KKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgCkBAIC01MTMsNiArNjU2LDExIEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKIHZvaWQgSlNPYmplY3Q6
OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7
CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwpA
QCAtNTU2LDggKzcwNCw3IEBAIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2JhbERh
dGEKICAgICBpZiAoc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlLCBTd2l0Y2hUb1Ns
b3dQdXRBcnJheVN0b3JhZ2UpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1
Y3R1cmUpOworICAgIHN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKIH0K
IAogYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTY5MSw2ICs4MzgsMTIgQEAgYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgLy8gVGhlcmUgaXMgYW4g
ZXh0cmVtZWx5IG9idmlvdXMgY2FzZSB0aGF0IHdlIGNvdWxkIGhhbmRsZSBoZXJlIChkZWxldGlu
ZyB0aGUgbGFzdCBlbGVtZW50KQorICAgICAgICAvLyBidXQgSSBkb24ndCBmZWVsIGxpa2Ugd3Jp
dGluZyB0ZXN0cyBmb3IgaXQsIHNvIEknbGwgcHVudCBpdC4KKyAgICAgICAgY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAvLyBGYWxs
IHRocm91Z2guCisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTg1Myw2ICsxMDA2LDEyIEBA
IHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC0xMzI4LDYgKzE0ODcsNTcgQEAg
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIHZhbHVlU2xvdC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoaGFzQ29u
dGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoIWluZGV4
aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgCisgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0
aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3Jl
YXRlciB0aGFuCisgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCisgICAgQVNT
RVJUKGkgPiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgfHwgaSA+PSBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgIGlmIChpID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSAmJiBpIDwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICBBU1NFUlQoaSA+
PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAvLyBUaGlzIGlzIHRoZSBv
bmUgY2FzZSB3ZSBjYW4gaGFuZGxlLiBBbmQgd2UgaGFuZGxlIGl0IGJ5IGdyb3dpbmcgdGhlIGNv
bnRpZ3VvdXMKKyAgICAgICAgLy8gc3RvcmFnZS4KKyAgICAgICAgdW5zaWduZWQgbmV3VmVjdG9y
TGVuZ3RoID0gc3RkOjptaW4oCisgICAgICAgICAgICB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRC
eVR3byhtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpLAorICAgICAgICAgICAgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCk7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdy
b3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICAgICAgbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgICAg
IG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICBtX2J1
dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIG1fYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICBBU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHB1dEJ5SW5kZXhXaXRob3V0QXR0cmlidXRlc1doaWxlQ29udmVydGluZ0NvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXhXaXRob3V0QXR0cmlidXRlc1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgQVNT
RVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgaWYgKGlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IoaSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSAmJiBpIDwgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkgeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgQWxsb2NhdGVB
cnJheVN0b3JhZ2UsCisgICAgICAgICAgICBnZXROZXdWZWN0b3JMZW5ndGgobV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpLCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCksIGkgKyAxKSk7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cisrOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2Nh
dGVBcnJheVN0b3JhZ2UpOworICAgIFNwYXJzZUFyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVT
cGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBmYWxzZSk7Cit9CisKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKQEAgLTEzNDEsNiArMTU1MSwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3Vy
ZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxE
YXRhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBpZiAoIWkgJiYg
IXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAgICAgICAgICBjcmVh
dGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAxKVswXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICgh
aXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpIHsKICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIDAsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM1Miw2ICsxNTY2
LDExIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOiB7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMRW5ndGhDb250aWd1b3Vz
V2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAg
ICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIGlmIChhdHRlbXB0
VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdykp
CkBAIC0xMzcxLDggKzE1OTAsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZl
Y3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGlu
ZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhh
c0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQo
YXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKIApAQCAtMTQ1Niw2ICsxNjc3LDEwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG8KICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAg
ICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCiAgICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAg
ICBpZiAoIWkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERh
dGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
aSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEsIDAsIDApKTsKICAgICAgICAgCkBAIC0xNDY0LDYgKzE2ODksMTUgQEAgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAg
ICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGks
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmli
dXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMTQ4NiwxMiArMTcyMCw3IEBAIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICghY3VycmVu
dFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJl
ZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0
aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5l
d0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3Jl
YXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAv
LyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBp
bmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAo
ZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVl
UGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQo
aW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUxMSw5ICsxNzQwLDEwIEBA
IEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9y
TGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
Q1JBU0goKTsKQEAgLTE1NjEsNiArMTc5MSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVu
c3VyZUNvbnRpZ3VvdXNMZW5ndGgodW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChoYXND
b250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIGlmICht
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpIHsKKyAgICAgICAgbV9idXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpLAorICAgICAgICAgICAgbGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Cisg
ICAgICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisgICAg
CisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKKyAgICAgICAg
bV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworfQorCiBCdXR0ZXJmbHkqIEpT
T2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9s
ZFNpemUpOwpAQCAtMTU4OSw2ICsxODM1LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCksIDApOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAg
ICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgo
KTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEsNiArMTYyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xOTgsNiArMjAwLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjA5LDYgKzIxMyw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjIyLDYgKzIyOCw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAg
ICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKTsKQEAgLTIzOCwxNSArMjQ2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIHNldEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgICAgIGlmICgh
eCkgewotICAgICAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgeCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsKKyAgICAgICAgICAgICAgICB4LnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZCkgewogICAgICAgICAgICAg
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFRvQ29udmVydEFycmF5U3RvcmFnZVRvQ29udGln
dW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjU3LDYgKzI3MiwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwpAQCAtMjczLDYgKzI5Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CkBAIC00ODEsMTYgKzUwMSwz
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYWxyZWFkeS4KICAgICAgICAgQXJyYXlT
dG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgICAgIGlmIChMSUtFTFkoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBBdHRlbXB0IHRvIGNvbnZlcnQgdG8gY29udGlndW91cyBpbmRleGluZyBz
dG9yYWdlLiBSZXR1cm5zIHRydWUgaWYgaXQgd2FzIGRvbmUsCisgICAgICAgIC8vIG9yIGZhbHNl
IGlmIGl0IGJhaWxlZCBvdXQgZm9yIGFueSByZWFzb24uIEFsc28gcmV0dXJucyB0cnVlIGlmIHRo
ZSBhcnJheSB3YXMgYWxyZWFkeQorICAgICAgICAvLyBjb250aWd1b3VzLgorICAgICAgICBib29s
IGF0dGVtcHRUb0NvbnZlcnRUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7Cisg
ICAgICAgICAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvQ29udmVydEFycmF5U3RvcmFnZVRvQ29u
dGlndW91cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAtNTU2LDExICs1OTYsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAg
ICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRh
Jik7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3JlYXRlSW5pdGlhbENvbnRpZ3Vv
dXMoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbik7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5
U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBkZWZpbmVPd25O
b25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZvaWQgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKIAog
ICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVk
IG5ld0xlbmd0aCk7CkBAIC01NzEsNyArNjE2LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYpOwog
ICAgICAgICAKICAgICAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xl
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
KyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNr
bHkgdG8gc3VjY2VlZCBhbmQgeW91J3JlIHN1cmUgdGhhdAorICAgICAgICAvLyB0aGUgYXJyYXkg
aXMgY29udGlndW91cy4KKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKHVuc2ln
bmVkIGxlbmd0aCk7CiAKKyAgICAgICAgYm9vbCBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdl
VG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgQVNTRVJUKCFzaG91bGRVc2VT
bG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgaWYgKHN0
b3JhZ2UtPmxlbmd0aCgpICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBh
dHRlbXB0VG9Db252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxE
YXRhLCBzdG9yYWdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBhdHRlbXB0
VG9Db252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSgpICYgSGFkQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250
aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCkBAIC01OTYsNiArNjY2LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4
ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIG9sZCk7CiAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGRvdWJsZXMgYXMg
cHV0RGlyZWN0KCkgYmVjYXVzZSAoYSkgY29udGlndW91cyBpbXBsaWVzIHRoYXQgdGhlcmUgYXJl
IG5vdCBpbmRleGVkIHNldHRlcnMgb3IgaW5kZXhlZCByZWFkb25saWVzLCBhbmQgKGIpIHRoaXMg
aXMgb25seSBmb3IgY2FzZXMgd2hlcmUgd2UgZG9uJ3Qgd2FudCB0aGUgcHJvcGVydHkgdG8gaGF2
ZSBhbnkgYXR0cmlidXRlcy4KKyAgICAgICAgdm9pZCBwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0
ZXNXaGlsZUNvbnZlcnRpbmdDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKyAgICAgICAgCiAgICAgICAgIHZvaWQgcHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAgICBib29sIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdElu
ZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1v
ZGUpOwpAQCAtNjA1LDYgKzY3OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFn
ZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgY29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9i
YWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1dHRl
cmZseSogbV9idXR0ZXJmbHk7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDEx
ICszMjMsMTcgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAg
IH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhp
bmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRl
eGVkQWNjZXNzZXMoKQorICAgICAgICB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGlt
ZSgpOworfQorCitOb25Qcm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRBcnJh
eVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgCi0gICAgaWYgKGFueU9iamVjdEluQ2hhaW5N
YXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdB
QmFkVGltZSgpKQorICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZygpKQogICAgICAgICByZXR1
cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIAogICAgIHJldHVybiBBbGxvY2F0
ZUFycmF5U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJj
ZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAg
IGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlU
cmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAg
ICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsg
bV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJp
CiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMg
bm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwg
dGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVDb250aWd1b3VzLAorICAgIFN3aXRjaFRvQ29u
dGlndW91cywKICAgICBBbGxvY2F0ZUFycmF5U3RvcmFnZSwKICAgICBBbGxvY2F0ZVNsb3dQdXRB
cnJheVN0b3JhZ2UsCiAgICAgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlLApAQCAtNTcsMTIg
KzU5LDE5IEBAIGlubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHkKIGlubGlu
ZSBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Q
cm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKICAgICBzd2l0Y2ggKHRyYW5zaXRpb24p
IHsKKyAgICBjYXNlIEFsbG9jYXRlQ29udGlndW91czoKKyAgICAgICAgQVNTRVJUKCEob2xkVHlw
ZSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkpOworICAgICAg
ICByZXR1cm4gb2xkVHlwZSB8IEhhc0NvbnRpZ3VvdXM7CisgICAgY2FzZSBTd2l0Y2hUb0NvbnRp
Z3VvdXM6CisgICAgICAgIEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAg
ICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCAoSGFzQ29udGlndW91cyB8
IEhhZEFycmF5U3RvcmFnZSk7CiAgICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKLSAgICAg
ICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xk
VHlwZSAmIH5IYXNDb250aWd1b3VzKSB8IEhhc0FycmF5U3RvcmFnZTsKICAgICBjYXNlIEFsbG9j
YXRlU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNTbG93
UHV0QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91
cykgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgU3dpdGNoVG9TbG93UHV0QXJy
YXlTdG9yYWdlOgogICAgICAgICBBU1NFUlQob2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7Cisg
ICAgICAgIEFTU0VSVCghKG9sZFR5cGUgJiBIYXNDb250aWd1b3VzKSk7CiAgICAgICAgIHJldHVy
biAob2xkVHlwZSAmIH5IYXNBcnJheVN0b3JhZ2UpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsK
ICAgICBjYXNlIEFkZEluZGV4ZWRBY2Nlc3NvcnM6CiAgICAgICAgIHJldHVybiBvbGRUeXBlIHwg
TWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAx
MjkxNzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwNCw2ICszMDQsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaGFzVHdv
TwogICAgIHJldHVybiAhaGFzWmVyb09yT25lQml0c1NldCh2YWx1ZSk7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBUIHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKFQgdmFs
dWUpCit7CisgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKKyAgICAvLyAgICh2
YWx1ZSAqIDMgKyAxKSAvIDI7CisgICAgLy8gb3I6CisgICAgLy8gICAodW5zaWduZWQpY2VpbCh2
YWx1ZSAqIDEuNSkpOworICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwg
b3ZlcmZsb3cuCisgICAgcmV0dXJuIHZhbHVlICsgKHZhbHVlID4+IDEpICsgKHZhbHVlICYgMSk7
Cit9CisKICNpZiAhQ09NUElMRVIoTVNWQykgJiYgIUNPTVBJTEVSKFJWQ1QpICYmICFPUyhTT0xB
UklTKQogdXNpbmcgc3RkOjppc2Zpbml0ZTsKICNpZiAhQ09NUElMRVJfUVVJUksoR0NDMTFfR0xP
QkFMX0lTSU5GX0lTTkFOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165296</attachid>
            <date>2012-09-23 16:41:55 -0700</date>
            <delta_ts>2012-09-23 20:15:35 -0700</delta_ts>
            <desc>it has more things</desc>
            <filename>contiguous_patch_3.diff</filename>
            <type>text/plain</type>
            <size>91698</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5MTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBpbmZlciB3aGVuIGluZGV4ZWQgc3RvcmFnZSBpcyBjb250aWd1b3VzLCBhbmQg
b3B0aW1pemUgZm9yIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5o
OgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tUG9p
bnRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cG9pbnRlcik6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6cHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpjb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aGFzQ29udGlndW91cyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNob3J0Q29tcGFj
dGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29u
dmVydFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252
ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0
dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVl
ZHNTbG93UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorCiAyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgaXNuJ3QgYmVpbmcgdXNlZCBvciB0ZXN0ZWQsIHNv
IHdlIHNob3VsZCByZW1vdmUgaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeVZhbEluZm9f
aAorI2RlZmluZSBCeVZhbEluZm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSW5k
ZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gSklUQXJyYXlNb2RlIHsgSklUQ29udGlndW91cywgSklUQXJyYXlTdG9yYWdl
IH07CisKK3N0YXRpYyBib29sIGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUp
Cit7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQ29udGlndW91czsKKyAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJu
IEpJVEFycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAg
ICByZXR1cm4gSklUQ29udGlndW91czsKKyAgICB9Cit9CisKK3N0cnVjdCBCeVZhbEluZm8gewor
ICAgIEJ5VmFsSW5mbygpIHsgfQorICAgIAorICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQorICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBi
YWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKKyAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICBDb2Rl
TG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wOworICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7IC8v
IFRoZSBhcnJheSBtb2RlIHRoYXQgd2FzIGJha2VkIGludG8gdGhlIGlubGluZSBKSVQgY29kZS4K
KyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworc3RhdGljIGlu
bGluZSB1bnNpZ25lZCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykK
K3sKKyAgICByZXR1cm4gaW5mby0+Ynl0ZWNvZGVJbmRleDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gQnlWYWxJbmZvX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5m
byYpOworICAgICAgICAKKyAgICAgICAgQnlWYWxJbmZvJiBnZXRCeVZhbEluZm8odW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2Vh
cmNoPEJ5VmFsSW5mbywgdW5zaWduZWQsIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXg+KG1fYnlW
YWxJbmZvcy5iZWdpbigpLCBtX2J5VmFsSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7Cisg
ICAgICAgIH0KIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAgLTU5Nyw2ICs2MDIsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5m
b3Moc2l6ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQogICAg
ICAgICBzaXplX3QgbnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCk7IH0KICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0cnVjdHVyZVN0dWJJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5m
b3NbaW5kZXhdOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldE51bWJlck9mQnlWYWxJbmZv
cyhzaXplX3Qgc2l6ZSkgeyBtX2J5VmFsSW5mb3MuZ3JvdyhzaXplKTsgfQorICAgICAgICBzaXpl
X3QgbnVtYmVyT2ZCeVZhbEluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9ieVZhbEluZm9zLnNpemUo
KTsgfQorICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyhzaXplX3QgaW5kZXgpIHsgcmV0dXJu
IG1fYnlWYWxJbmZvc1tpbmRleF07IH0KIAogICAgICAgICB2b2lkIGFkZEdsb2JhbFJlc29sdmVJ
bmZvKHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbikKICAgICAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzgsNiArNzM4LDEz
IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICBtX2NvZGVC
bG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vzc0NvbXBp
bGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3Bl
cnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29kZUJsb2NrLT5zdHJ1
Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJsb2NrLT5zZXROdW1i
ZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7
CisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisgICAgICAg
ICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAg
ICBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0
aW9uSW5mb1tpXS5iYWRUeXBlSnVtcCkpLAorICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1tpXS5hcnJheU1vZGUpOworICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZD
YWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExp
bmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjY0LDYgKzI2NCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBj
b3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1ZmZlciAmcGF0Y2hC
dWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxhdGlvbkluZm8geworICAg
ICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAKKyAgICAgICAgQnlWYWxD
b21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVt
cCkKKyAgICAgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgICAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOworICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
OworICAgIH07CisKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7CkBAIC0zNDgsNiArMzYzLDEzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVk
T2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4Owor
ICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKICAgICAgICAg
ewpAQCAtMzk3LDYgKzQxOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyosIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCosIGludCwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBz
aXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9w
ZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3Ry
dWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIs
IENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRp
b24oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciwgYm9v
bCBkaXJlY3QpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFs
KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMo
SlNHbG9iYWxEYXRhKiwgVHJhbXBvbGluZVN0cnVjdHVyZSopOwogICAgICAgICBMYWJlbCBwcml2
YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9
IGZhbHNlKTsKQEAgLTQ1Miw2ICs0NzYsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChSZWdpc3RlcklEIHN0cnVjdHVy
ZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2Fz
ZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VB
cnJheU1vZGUoQXJyYXlQcm9maWxlKik7CisgICAgICAgIAorICAgICAgICAvLyBQcm9wZXJ0eSBp
cyBpbiByZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZXhpbmcgdHlw
ZS4KKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5kZWQu
IEJhc2UgaXMgY2VsbCBjaGVja2VkLgorICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBw
cm9maWxlZC4gUmV0dXJucyB0aGUgc2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCisgICAgICAgIC8v
IGNhc2UgY29udGFpbnMgcmVzdWx0IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxl
ZC4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9y
YWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAg
ICAgCisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9u
Kik7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5v
dEZpbmFsIH07CiAKQEAgLTg3MCw2ICs5MDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
VmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAgIFZlY3RvcjxMYWJlbD4gbV9sYWJl
bHM7CiAgICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8+IG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3RvcjxCeVZhbENvbXBpbGF0aW9u
SW5mbz4gbV9ieVZhbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm8+IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm87CiAg
ICAgICAgIFZlY3RvcjxNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvPiBtX21ldGhvZENhbGxDb21w
aWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2NCw2ICs1NjQsMjIgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0QXJyYXlQcm9maWxlU3RvcmVUbwogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5
UHJvZmlsZS0+YWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBhcnJheVByb2ZpbGVTYXcoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUg
Y2FwYWJpbGl0eSkKK3sKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEh
KHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8
IGNhcGFiaWxpdHkpIHwgYXNBcnJheU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9k
ZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYg
KGFycmF5UHJvZmlsZVNhdyhwcm9maWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1
cm4gSklUQXJyYXlTdG9yYWdlOworICAgIHJldHVybiBKSVRDb250aWd1b3VzOworfQorCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgdGFnKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw2ICs5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAg
ICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVu
c2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2ln
bmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsK
QEAgLTExMSwxNyArMTEyLDU1IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1
Y3Rpb24KIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVn
VDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CiAKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKLSAgICBsb2FkUHRyKEJhc2VJ
bmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMCkpOworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHBy
b2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdl
OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRT
bG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9u
SW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlKSk7Cit9CisKK0pJVDo6SnVtcExp
c3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyKSwgcmVn
VDApOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2Up
KSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7CisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAg
cmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTE0Myw4ICsxODIsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoSW5zdHJ1YwogICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOwogICAgIG5vbkNl
bGwubGluayh0aGlzKTsKICAgICAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBs
ZW5ndGggY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCisgICAg
c3dpdGNoIChjaG9vc2VBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkp
IHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gdmVjdG9yIGxlbmd0aCBjaGVjaworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNo
ZWNrCisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI5MTc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0MDcsNiArMjQwNywyOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCitzdGF0aWMgSlNWYWx1ZSBn
ZXRCeVZhbChKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwo
KSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHkoY2FsbEZyYW1lLCBhc1N0
cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7CisgICAgICAg
IHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGlzSlNTdHJp
bmcoYmFzZVZhbHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewor
ICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCksIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX3N0cmlu
ZykpOworICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNh
bGxGcmFtZSwgaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2Fs
bEZyYW1lLCBpKTsKKyAgICB9CisKKyAgICBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpCisgICAgICAg
IHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1
YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCkpOworCisgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxs
RnJhbWUpKTsKKyAgICByZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTt9
Cit9CisKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFs
KQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTI0MTYsMzUg
KzI0MzksMzcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgCi0g
ICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkp
KSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFz
dEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2Fs
bEZyYW1lKSkpIHsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBpID0gc3Vi
c2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYg
YXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAgICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVS
Tl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKLSAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoY2Fs
bEZyYW1lLCBpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlz
T2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRv
IG9wdGltaXplLgorICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+
Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9m
ZnNldCk7CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+YnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlW
YWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5ndHlwZShpbmRleGluZ1R5cGUpOworICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbElmby5hcnJheU1vZGUpCisgICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJh
eU1vZGUpOwogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdl
dChjYWxsRnJhbWUsIGkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CisgICAgCisgICAgSlNWYWx1
ZSByZXN1bHQgPSBnZXRCeVZhbChiYXNlVmFsdWUsIHN1YnNjcmlwdCwgU1RVQl9SRVRSVU5fQURE
UkVTUyk7CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKyAgICAKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF9nZXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwogCi0gICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKSB7Ci0gICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFu
Y2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAgICAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Ci0gICAgfQorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5n
KGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFz
ZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1Zh
bHVlKCk7CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgU1RVQl9SRVRSVU5fQUREUkVTUyk7CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAyNSw3ICsxMDI1
LDcgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAgbG9hZHAgSlNDZWxsOjptX3N0
cnVjdHVyZVt0M10sIHQyCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MSwgdDApCiAgICAgYnRpeiB0
MiwgSXNBcnJheSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93Ci0gICAgYnRpeiB0MiwgSGFzQXJyYXlT
dG9yYWdlLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKKyAgICBidGl6IHQyLCAoSXNDb250aWd1b3Vz
IHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5vcEdldEFycmF5
TGVuZ3RoU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZHAgNjRbUEIs
IFBDLCA4XSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAt
MTE1NCwxNCArMTE1NCwyNCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCAzMltQ
QiwgUEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQxKQogICAgIGxvYWRpcyAy
NFtQQiwgUEMsIDhdLCB0MwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlW
YWxTbG93CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9wR2V0QnlW
YWxTbG93KQogICAgIHN4aTJwIHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVt0MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250
aWd1b3VzCisKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpcyA4
W1BCLCBQQywgOF0sIHQwCisgICAgbG9hZHAgW3QzLCB0MSwgOF0sIHQyCisgICAgam1wIC5vcEdl
dEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFz
QXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAg
ICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92
ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhd
LCB0MAogICAgIGxvYWRwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAg
ICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKworLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3Jl
cCB0MiwgW2NmciwgdDAsIDhdCiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4XSwgdDAKICAgICB2YWx1
ZVByb2ZpbGUodDIsIHQwKQpAQCAtMTIzMywyNyArMTI0Myw0OCBAQCBfbGxpbnRfb3BfcHV0X2J5
X3ZhbDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAgICBsb2FkcCAz
MltQQiwgUEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQwKQotICAgIGJ0aXog
dDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9hZGlzIDE2W1BCLCBQ
QywgOF0sIHQwCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MiwgLm9wUHV0
QnlWYWxTbG93KQotICAgIHN4aTJwIHQyLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJ
bnQzMih0MCwgdDMsIC5vcFB1dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0MywgdDMKICAgICBsb2Fk
cCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQyLCAtc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0
QnlWYWxTbG93Ci0gICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0sIC5v
cFB1dEJ5VmFsRW1wdHkKLS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9hZGlzIDI0W1BC
LCBQQywgOF0sIHQzCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MywgdDEpCisgICAgYnRp
eiB0MiwgSGFzQ29udGlndW91cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisgICAgCisgICAg
YmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJs
aWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kcworLm9wUHV0QnlW
YWxDb250aWd1b3VzU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCisgICAgd3JpdGVCYXJyaWVyKHQxKQor
ICAgIHN0b3JlcCB0MSwgW3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQorCisub3BQdXRCeVZh
bENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBiaWEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cK
KyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjpt
X3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGFkZGkgMSwgdDMsIHQyCisg
ICAgc3RvcmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
cHVibGljTGVuZ3RoW3QwXQorICAgIGptcCAub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3Vs
dAorCisub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9y
YWdlLCAub3BQdXRCeVZhbFNsb3cKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwor
ICAgIGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdLCAub3BQdXRCeVZhbEFy
cmF5U3RvcmFnZUVtcHR5Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0OgorICAg
IGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIs
IHQxKQogICAgIHdyaXRlQmFycmllcih0MSkKLSAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6
bV92ZWN0b3JbdDAsIHQyLCA4XQorICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rv
clt0MCwgdDMsIDhdCiAgICAgZGlzcGF0Y2goNSkKIAotLm9wUHV0QnlWYWxFbXB0eToKKy5vcFB1
dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHk6CiAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0M10KLSAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJ
blZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAg
bG9hZGkgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXSwgdDEKKyAgICBhZGRp
IDEsIHQxCisgICAgYmllcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIHN0b3JlaSB0MSwg
QXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQorICAgIGJpYiB0MiwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5v
cFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQogICAg
IHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1
YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGptcCAu
b3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw5IEBAIGVuZAogCiAj
IENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCiBjb25zdCBJc0FycmF5
ID0gMQorY29uc3QgSGFzQ29udGlndW91cyA9IDIKIGNvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgK
LWNvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorY29uc3QgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSA9
IDE2CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDEyOTE3OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBw
cmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKICAgICB9CiAgICAgCisgICAgLy8g
VGhpcyBtZXRob2QgaXMgaGVyZSBub3QganVzdCBiZWNhdXNlIGl0J3MgaGFuZHksIGJ1dCB0byBy
ZW1pbmQgeW91IHRoYXQKKyAgICAvLyB0aGUgd2hvbGUgcG9pbnQgb2YgYnV0dGVyZmxpZXMgaXMg
dG8gZG8gZXZpbCBwb2ludGVyIGFyaXRobWV0aWMuCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJv
bVBvaW50ZXIoY2hhciogcHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QnV0dGVyZmx5Kj4ocHRyKTsKKyAgICB9CisgICAgCisgICAgY2hhciogcG9pbnRlcigpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyB9CisgICAgCiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFk
ZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVh
ZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQpAQCAtNzAs
OSArNzksMTYgQEAgcHVibGljOgogICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAg
UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVy
dHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9y
YWdlKCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiBpbmRl
eGluZ0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKTsgfQorICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0
aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9CisgICAgdm9p
ZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXItPnNldFB1
YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1aW50MzJfdCB2
YWx1ZSkgeyBpbmRleGluZ0hlYWRlci0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVlKTsgfQorICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0b3JhZ2UqIGFycmF5
U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVybiBpbmRleGluZ1Bh
eWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+ID4oKTsgfQogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhP
ZlByb3BlcnR5U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjkxNzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnJlc2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBB
U1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNl
IHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAg
LTE2Myw3ICsxNjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3Ry
CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFn
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBh
Y2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2Vl
IGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwxMCArNDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNp
dAogCiBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0
b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJ
KHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIHR5cGVkZWYgdWludDhf
dCBJbmRleGluZ1R5cGU7CiAKIC8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBj
YXBhYmlsaXRpZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAg
ICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAg
ICAgICAgICA9IDI7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAg
ICAgICAgICA9IDg7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0
b3JhZ2UgICA9IDE2OwogCkBAIC00Miw5ICs0MywxMSBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIE1heUhhdmVJbmRleGVkCiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4K
IHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAg
ICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMg
ICAgICAgICAgPSBIYXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAgID0gSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xv
d1B1dEFycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAg
ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAi
QXJyYXkiIGJ1dCB0aGlzIHdvdWxkIGxlYWQgdG8gZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0
aW9uLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAg
ICAgICAgID0gSXNBcnJheSB8IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlT
dG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlICAgID0gSXNBcnJheSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYg
KzU1LDEwIEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBO
b25BcnJheTogICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2Rl
ZmluZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29u
dGlndW91czogICAgICAgICAgIFwKKyAgICBjYXN0IEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2Rl
ZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5
V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZQpAQCAtNzYsNiArODMsMTEgQEAgc3RhdGljIGlubGluZSBi
b29sIGhhc0luZGV4aW5nSGVhZGVyKEluZAogICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGll
cyh0eXBlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gIShpbmRleGluZ1R5cGUgJiBIYXNDb250
aWd1b3VzKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3RvcmFnZShJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogewogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiAoSGFz
QXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTUsNiArMzk1LDE2IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFsZW5ndGgtLSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAg
ICAKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOworICAgIH0K
KyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgIApAQCAtNDUxLDYgKzQ2MSwyNSBAQCB2b2lkIEpTQXJyYXk6OnB1c2go
RXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGgg
PiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5k
ZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgbGVuZ3RoLCB2YWx1
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0
aCgpOwogICAgICAgICBpZiAoYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShleGVj
LCBvbGRMZW5ndGgsIHZhbHVlLCB0cnVlKSkgewpAQCAtNTc4LDYgKzYwNywxOSBAQCB2b2lkIEpT
QXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgY2FzZSBBcnJheUNsYXNzOgog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czog
eworICAgICAgICBpZiAoIW1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFtX2J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNvcnQo
ZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBxc29ydChtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCksIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21w
YXJlTnVtYmVyc0ZvclFTb3J0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwpAQCAtNjA3LDYgKzY0OSw3IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMo
RXhlY1N0YXRlKiBleGUKICAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUg
b3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KICAgICAgICAgcXNvcnQoc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVt
YmVyc0ZvclFTb3J0KTsKICAgICAgICAgCisgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1
b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTYxNSw4NiArNjU4LDExMSBAQCB2b2lkIEpT
QXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogfQogCi12b2lkIEpTQXJy
YXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZT4KK3ZvaWQgSlNBcnJheTo6c2hvcnRDb21wYWN0ZWRWZWN0b3IoV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFp
blNwYXJzZUluZGV4aW5nTW9kZSgpKTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICBpZiAoIXJlbGV2YW50
TGVuZ3RoKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29udmVydGluZyBKYXZhU2Ny
aXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2Ug
dXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KKyAgICAvLyBUaGlzIGlzIGEgY29uc2lk
ZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRo
b3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAgIC8vIGJ1ZmZlci4gQmVzaWRl
cywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1
c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgLy8gcmFuZG9tIG9yIG90aGVy
d2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlv
biBpbmNvbnNpc3RlbnQuCiAgICAgICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBh
Y3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgaWYgKHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBz
dHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNv
cnQgYmFzZWQgb24gdGhhdC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXBy
b3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVx
dWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlz
IHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRv
U3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lz
ZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBp
bmNvbnNpc3RlbnQuCi0gICAgICAgIAotICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2
YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgaWYgKCF2YWx1ZXMu
YmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4g
dmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgaWYgKCF2YWx1ZXMuYmVn
aW4oKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVt
cFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRp
dmVWYWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlz
VW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAg
ICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1
ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICAgICAgfQorICAgIGJvb2wgaXNTb3J0aW5n
UHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2
YW50TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgp
OworICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNb
aV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgfQogICAg
ICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8g
Y2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAgICAgIC8v
IGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgIC8vIEZJWE1FOiBUaGUg
Zm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2
YWx1ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0
aW9uLgogICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2
YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgdmFs
dWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAg
ICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogU2luY2Ug
d2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNl
IGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgICAgICAvLyB0aGFu
IE8oTiBsb2cgTikuCisgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVl
LCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291
bGQgYmUgTyhOKSByYXRoZXIKKyAgICAvLyB0aGFuIE8oTiBsb2cgTikuCiAgICAgICAgIAogI2lm
IEhBVkUoTUVSR0VTT1JUKQotICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQot
ICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihW
YWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwot
I2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxp
a2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KLSAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIg
ZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJz
IHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
KQogICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZh
bHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgZWxzZQor
ICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihW
YWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworI2Vsc2UKKyAg
ICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBi
ZSBhIHN0YWJsZSBzb3J0LgorICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkg
YSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxl
IHNvcnQuCisgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihW
YWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCisg
ICAgCisgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBv
ZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCisgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0
aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAg
ICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgocmVsZXZhbnRMZW5ndGgpOworICAgICAgICBicmVh
azsKICAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2Vk
IHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgICAgICAvLyBp
bmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFs
IHZhbHVlcy4KLSAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChl
eGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSA8IHJlbGV2YW50TGVuZ3RoKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0
aChleGVjLT5nbG9iYWxEYXRhKCksIHJlbGV2YW50TGVuZ3RoKTsKICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KHN0b3JhZ2UtPmxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Cisg
ICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKQorICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBp
KyspCisgICAgICAgIGJlZ2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmly
c3QpOworICAgIAorICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFT
U0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVj
dG9yKCZ2YWx1ZXMpOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICBz
b3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0g
Y29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAo
c3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwor
CisgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1
b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAg
ICAKQEAgLTc4OCw2ICs4NTYsNzggQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMg
aWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0
b051bWJlci4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMg
Y29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAg
ICAgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgorICAgICAgICBBU1NFUlQobV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAo
IW1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0
PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9j
YWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rp
b24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhl
IGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAg
Ly8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUg
aGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAg
ICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0
ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVm
aW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisg
ICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyAr
K251bURlZmluZWQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICB0cmVlLmluc2Vy
dChudW1EZWZpbmVkKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1E
ZWZpbmVkOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsrbnVtVW5kZWZp
bmVkOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgdHJlZS5p
bnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZCA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID09IG51bURl
ZmluZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBt
X3N0b3JhZ2UuCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRy
ZWUpOworICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkICYmIGkgPCBt
X2J1dHRlcmxmeS0+cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAg
ICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAg
LTkwNyw2ICsxMDQ3LDEyIEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBl
eGUKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgYXJncy5hcHBlbmQobV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwpAQCAtOTM4LDYgKzEwODQsMTIgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMo
RXhlY1N0YXRlKgogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAg
ICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICB1bnNp
Z25lZCBpID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
LmdldCgpOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25s
eSgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoV3JpdGVCYXJy
aWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgsIAogCiAgICAgICAg
IHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7CiAKQEAg
LTEwNiw2ICsxMDksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGNvbXBh
Y3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwogICAgIH07CiAKKyAgICBpbmxpbmUgQnV0dGVy
Zmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBJbmRleGluZ0hlYWRlciBoZWFk
ZXI7CisgICAgICAgIGhlYWRlci5zZXRWZWN0b3JMZW5ndGgoc3RkOjptYXgobGVuZ3RoLCBCQVNF
X1ZFQ1RPUl9MRU5HVEgpKTsKKyAgICAgICAgaGVhZGVyLnNldFB1YmxpY0xlbmd0aChsZW5ndGgp
OworICAgICAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxE
YXRhLCAwLCAwLCB0cnVlLCBoZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFy
cmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGUoCkBAIC0xMjEsNyArMTMzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5l
IEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBp
bml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlm
IChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3Vz
KSkgeworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKCFpbml0
aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKKyAgICAg
ICAgICAgICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0ZXJmbHkg
PSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAg
ICAgfQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMTUzLDI2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCogdGVtcDsK
LSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5n
dGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAgICAgKmJ1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlh
bExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMg
PSAwOwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAgICAgICAg
ICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAs
IDApOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0
ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAg
ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGlu
aXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+
bV9pbmRleEJpYXMgPSAwOworICAgICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVu
Z3RoOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMSw3ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHBy
b3RvCiAgICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwog
CiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpT
QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQ
cm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1fYXJyYXlTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJy
YXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0
aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKIApA
QCAtNDA3LDYgKzQwOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZShKU0ds
b2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxvY2F0aW9ucyB0aGF0IGxv
YWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8gdGhpcyBvYmplY3Qgbm93
IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAgbV9hcnJheVN0cnVjdHVy
ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkp
OworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CiAgICAgCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQgc3RvcmFnZSBzd2l0Y2gg
dG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFnZS4KQEAgLTQ4Miw2ICs0
ODQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVNjb3BlU3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1bWVudHNTdHJ1Y3R1cmUpOwogICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCk7
CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYm9vbGVhbk9iamVjdFN0cnVjdHVy
ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGJhY2tDb25zdHJ1Y3Rv
clN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9u
YW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJn
dW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5
U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0
IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KKyAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IC8vIFRo
aXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBk
ZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CkBAIC0yNjIsNyArMjYzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogbmFtZVNjb3BlU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAg
U3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJy
YXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdldCgpOyB9CiAgICAgICAgIHZvaWQqIGFkZHJl
c3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmU7IH0KKyAgICAg
ICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgeyByZXR1
cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyB9CiAgICAgICAgIFN0cnVjdHVy
ZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9vbGVhbk9iamVj
dFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrQ29uc3RydWN0
b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMiwyNCArMTMyLDM5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFy
Z2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOwor
ICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0
ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgY3VycmVudFNv
dXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGNvdW50ID0g
bmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJl
bnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBj
b3VudC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRT
b3VyY2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAg
ICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCk7IC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuIFdoeSBpc24n
dCB0aGlzIHB1YmxpY0xlbmd0aCgpPwogICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsK
KyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50
VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7
CkBAIC0xNTksNiArMTc0LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcgogICAgICAgICAKICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUu
CiAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwKQpAQCAtMjM1LDYgKzI1MywxMyBAQCBib29sIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpAQCAtMzUyLDYgKzM3Nywy
MSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgY2FzZSBB
TExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEFTU0VSVChtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW3Byb3Bl
cnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgocHJvcGVydHlOYW1lICsgMSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHByb3BlcnR5TmFtZSA8IG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wdWJsaWNMZW5n
dGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5h
bWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTM2MiwxNSArNDAyLDE4IEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltwcm9wZXJ0eU5hbWVdOwogICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAgICAgCisgICAgICAg
IEpTVmFsdWUgb2xkID0gdmFsdWVTbG90LmdldCgpOworICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICAKICAgICAgICAg
Ly8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgogICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgewogICAgICAgICAgICAgbGVuZ3RoID0g
cHJvcGVydHlOYW1lICsgMTsKICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgp
OwogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9
IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgIH0gZWxzZSBpZiAoIW9sZCkgewogICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAKLSAgICAgICAg
dmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAg
ICAgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzdG9yYWdlKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKQEAgLTQ0NCw2ICs0ODcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
ZW50ZXJEaWN0aW9uYXJ5SQogdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQsIGFzIGl0
IHdpbGwgcGVyZm9ybSB0d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCisgICAgICAg
IC8vIHRoaXMgY2FzZSBpZiB3ZSBldmVyIGNhcmVkLgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xv
YmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7CkBA
IC00OTEsOSArNTM5LDEwNCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFs
QXJyCiAgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZF
Q1RPUl9MRU4pOwogfQogCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQo
aGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
U2l6ZSgpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFj
aXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgCisg
ICAgbWVtY3B5KAorICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eVNpemUsCisgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgIAorICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0
aCk7CisgICAgbmV3U3RvcmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3U3Rv
cmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9
IDA7CisgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IHB1YmxpY0xlbmd0aDsK
KyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIG5ld1N0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCA9IDA7CisgICAgbmV3U3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlv
biA9IDA7CisjZW5kaWYKKyAgICBtZW1jcHkoCisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9y
LCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBwdWJsaWNMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0
aW9uKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1
Y3R1cmUpOworICAgIHJldHVybiBuZXdTdG9yYWdlOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpKTsKK30KKwordm9p
ZCBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgQVNT
RVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoIXNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7Cisg
ICAgCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPQorICAgICAgICBCdXR0ZXJmbHk6ZnJv
bVBvaW50ZXIobV9idXR0ZXJmbHktPnBvaW50ZXIoKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgIAorICAgIG5ld0J1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5z
ZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgCisgICAgLy8gU2hpZnQgdGhl
IG5hbWVkIHByb3BlcnRpZXMgb3ZlciwgaWYgdGhlcmUgYXJlIHNvbWUuCisgICAgc2l6ZV90IHBy
b3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CisgICAgaWYgKHByb3Bl
cnR5U2l6ZSkgeworICAgICAgICBtZW1tb3ZlKAorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgICAgIHByb3BlcnR5
U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hUb0NvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZs
eShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZpY2llbnQsIGlmIHdl
IGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKQEAgLTUxMyw2ICs2NTYsMTEgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBKU09iamVjdDo6c3dp
dGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7CkBAIC01
NTYsOCArNzA0LDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YQog
ICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3aXRjaFRvU2xvd1B1
dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVjdHVy
ZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogfQogCiBi
b29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjkxLDYgKzgzOCwxMiBAQCBib29sIEpT
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2FzZSBBTExfQkxBTktfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBUaGVyZSBpcyBhbiBleHRy
ZW1lbHkgb2J2aW91cyBjYXNlIHRoYXQgd2UgY291bGQgaGFuZGxlIGhlcmUgKGRlbGV0aW5nIHRo
ZSBsYXN0IGVsZW1lbnQpCisgICAgICAgIC8vIGJ1dCBJIGRvbid0IGZlZWwgbGlrZSB3cml0aW5n
IHRlc3RzIGZvciBpdCwgc28gSSdsbCBwdW50IGl0LgorICAgICAgICBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIC8vIEZhbGwgdGhy
b3VnaC4KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtODUzLDYgKzEwMDYsMTIgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTEzMjgsNiArMTQ4Nyw1NyBAQCB2b2lk
IEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgdmFsdWVTbG90LnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVChoYXNDb250aWd1
b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVCghaW5kZXhpbmdT
aG91bGRCZVNwYXJzZSgpKTsKKyAgICAKKyAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUsIHRoZSBp
bmRleCBpcyBlaXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBncmVhdGVy
IHRoYW4KKyAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KKyAgICBBU1NFUlQo
aSA+IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSB8fCBpID49IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgaWYgKGkgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpICYm
IGkgPCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFTU0VSVChpID49IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9uZSBj
YXNlIHdlIGNhbiBoYW5kbGUuIEFuZCB3ZSBoYW5kbGUgaXQgYnkgZ3Jvd2luZyB0aGUgY29udGln
dW91cworICAgICAgICAvLyBzdG9yYWdlLgorICAgICAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5n
dGggPSBzdGQ6Om1pbigKKyAgICAgICAgICAgIHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdv
KG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSksCisgICAgICAgICAgICBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0Fy
cmF5UmlnaHQoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbmV3
VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVy
Zmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgbV9idXR0ZXJm
bHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1Rv
QXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJ
bmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJyYXlTdG9y
YWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBBU1NFUlQo
aXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICBpZiAoaXNEZW5zZUVub3VnaEZvclZlY3Rvcihp
LCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpICYmIGkgPCBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKSB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBBbGxvY2F0ZUFycmF5
U3RvcmFnZSwKKyAgICAgICAgICAgIGdldE5ld1ZlY3Rvckxlbmd0aChtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSwgaSArIDEpKTsKKyAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgoaSArIDEpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZUFy
cmF5U3RvcmFnZSk7CisgICAgU3BhcnNlQXJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwg
dmFsdWUsIGZhbHNlKTsKK30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwpAQCAtMTM0MSw2ICsxNTUxLDEwIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJy
YXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmICghaSAmJiAhc3Ry
dWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKCFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkgewogICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgMCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzUyLDYgKzE1NjYsMTEg
QEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3RvckxFbmd0aENvbnRpZ3VvdXNXaXRo
b3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgIGNh
c2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgaWYgKGF0dGVtcHRUb0lu
dGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KSkKQEAg
LTEzNzEsOCArMTU5MCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuCiBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlKQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLQorICAgIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaGFzQXJy
YXlTdG9yYWdlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChhcnJh
eVN0b3JhZ2UoKSA9PSBzdG9yYWdlKTsKICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSB8fCBhdHRyaWJ1dGVzKTsKICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
OwogCkBAIC0xNDU2LDYgKzE2NzcsMTAgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0bwogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAg
IGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRlcykKICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGlm
ICghaSkgeworICAgICAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwg
MSlbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAw
KSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
MCwgMCkpOwogICAgICAgICAKQEAgLTE0NjQsNiArMTY4OSwxNSBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAxOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgICAgIAorICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAg
ICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICB9CisgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFs
dWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlLCBhcnJheVN0b3JhZ2UoKSk7CkBAIC0xNDg2LDEyICsxNzIwLDcgQEAgQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIGVsc2UgaWYgKCFjdXJyZW50VmVj
dG9yTGVuZ3RoKQogICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVu
Z3RoLCBsYXN0QXJyYXlTaXplKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2Fs
bHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVu
Z3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2Vk
TGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRo
aXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3Jl
YXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNp
cmVkTGVuZ3RoICYgMSk7CisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHRpbWVzVGhyZWVQbHVz
T25lRGl2aWRlZEJ5VHdvKGRlc2lyZWRMZW5ndGgpOwogICAgIH0KIAogICAgIEFTU0VSVChpbmNy
ZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CkBAIC0xNTExLDkgKzE3NDAsMTAgQEAgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgICAgICB2ZWN0b3JMZW5n
dGggPSAwOwogICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFT
SCgpOwpAQCAtMTU2MSw2ICsxNzkxLDIyIEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKEpTR2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBKU09iamVjdDo6ZW5zdXJl
Q29udGlndW91c0xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGhhc0NvbnRp
Z3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisgICAgaWYgKG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkgeworICAgICAgICBtX2J1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSksCisgICAgICAgICAgICBsZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAg
ICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOworICAgIH0KKyAgICAKKyAg
ICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICBtX2J1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7Cit9CisKIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6
ZSk7CkBAIC0xNTg5LDYgKzE4MzUsMTMgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IobV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKSwgMCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVu
Z3RoKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAg
ICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOwog
ICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTE2MSw2ICsxNjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTE5OCw2ICsyMDAsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMDksNiArMjEzLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltpXS5nZXQoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMjIsNiArMjI4LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8PSBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgaSA8IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgogICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOwpAQCAtMjM4LDE1ICsyNDcsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8PSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID09IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3Vv
dXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTI1Nyw2ICsyNzcsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKQEAgLTI3Myw2ICsyOTcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOwpAQCAtNDgxLDE2ICs1MDYsMzYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGFscmVhZHkuCiAgICAgICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAg
ICAgewotICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgICAgICBpZiAoTElLRUxZKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQXR0ZW1wdCB0byBjb252ZXJ0IHRvIGNvbnRpZ3VvdXMgaW5kZXhpbmcgc3Rv
cmFnZS4gUmV0dXJucyB0cnVlIGlmIGl0IHdhcyBkb25lLAorICAgICAgICAvLyBvciBmYWxzZSBp
ZiBpdCBiYWlsZWQgb3V0IGZvciBhbnkgcmVhc29uLiBBbHNvIHJldHVybnMgdHJ1ZSBpZiB0aGUg
YXJyYXkgd2FzIGFscmVhZHkKKyAgICAgICAgLy8gY29udGlndW91cy4KKyAgICAgICAgYm9vbCBh
dHRlbXB0VG9Db252ZXJ0VG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAg
ICAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRp
Z3VvdXMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTU1NiwxMSArNjAxLDE2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYp
OworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNyZWF0ZUluaXRpYWxDb250aWd1b3Vz
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSog
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFn
ZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24pOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBBcnJheVN0
b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgZGVmaW5lT3duTm9u
SW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwogICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CiAKICAg
ICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBu
ZXdMZW5ndGgpOwpAQCAtNTcxLDcgKzYyMSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhKU0dsb2JhbERhdGEmKTsKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgc2V0SW5kZXhRdWlja2x5
IHRvIHN1Y2NlZWQgYW5kIHlvdSdyZSBzdXJlIHRoYXQKKyAgICAgICAgLy8gdGhlIGFycmF5IGlz
IGNvbnRpZ3VvdXMuCisgICAgICAgIHZvaWQgZW5zdXJlQ29udGlndW91c0xlbmd0aCh1bnNpZ25l
ZCBsZW5ndGgpOwogCisgICAgICAgIGJvb2wgYXR0ZW1wdFRvQ29udmVydEFycmF5U3RvcmFnZVRv
Q29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkVXNlU2xv
d1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgIGlmIChzdG9y
YWdlLT5sZW5ndGgoKSAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1h
cCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYXR0
ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0
YSwgc3RvcmFnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgYXR0ZW1wdFRv
Q29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIXNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgICAgICAgICAvLyBPaCwgeW91IGRpZCB0aGlzIGNvbnZlcnNpb24gYmVm
b3JlPyBXZWxsLCB5b3UgZG9uJ3QgZ2V0IHRvIGRvIGl0IGFnYWluLiBCZWNhdXNlCisgICAgICAg
ICAgICAvLyB0aHJhc2hpbmcgaXMgbmV2ZXIgZ29vZC4KKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgSGFkQXJyYXlTdG9yYWdlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIE9oLCB5b3UndmUg
dXNlZCBzaGlmdCBhbmQgdW5zaGlmdD8gQ2hhbmNlcyBhcmUgeW91J2xsIHVzZSBpdCBhZ2Fpbiwg
YW5kIHdlJ2xsIGhhdmUKKyAgICAgICAgICAgIC8vIHRvIGNvbnZlcnQgYmFjay4gTm8gY29udGln
dW91cyBhcnJheXMgZm9yIHlvdSEKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX2luZGV4Qmlh
cykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb252ZXJ0Q29u
dGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIApA
QCAtNTk2LDYgKzY3Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9p
ZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOwogICAgICAgICAKKyAg
ICAgICAgLy8gVGhpcyBkb3VibGVzIGFzIHB1dERpcmVjdCgpIGJlY2F1c2UgKGEpIGNvbnRpZ3Vv
dXMgaW1wbGllcyB0aGF0IHRoZXJlIGFyZSBub3QgaW5kZXhlZCBzZXR0ZXJzIG9yIGluZGV4ZWQg
cmVhZG9ubGllcywgYW5kIChiKSB0aGlzIGlzIG9ubHkgZm9yIGNhc2VzIHdoZXJlIHdlIGRvbid0
IHdhbnQgdGhlIHByb3BlcnR5IHRvIGhhdmUgYW55IGF0dHJpYnV0ZXMuCisgICAgICAgIHZvaWQg
cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7Cisg
ICAgICAgIAogICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3RvcmFnZSopOwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKQEAgLTYwNSw2ICs2ODksMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAg
ICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9i
YWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIGNvbnZlcnRDb250aWd1b3VzQXJyYXlT
dG9yYWdlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworCiAgICAg
cHJvdGVjdGVkOgogICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9u
IDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMywxMSArMzIzLDE3IEBAIGJvb2wgU3RydWN0dXJlOjphbnlP
YmplY3RJbkNoYWluTWF5SW50ZXIKICAgICB9CiB9CiAKLU5vblByb3BlcnR5VHJhbnNpdGlvbiBT
dHJ1Y3R1cmU6OnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpIGNvbnN0Citib29sIFN0cnVj
dHVyZTo6bmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdAoreworICAgIHJldHVybiBhbnlPYmpl
Y3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKKyAgICAgICAgfHwgZ2xvYmFs
T2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKTsKK30KKworTm9uUHJvcGVydHlUcmFuc2l0aW9u
IFN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwogICAgIAot
ICAgIGlmIChhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwg
Z2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKSkKKyAgICBpZiAobmVlZHNTbG93UHV0
SW5kZXhpbmcoKSkKICAgICAgICAgcmV0dXJuIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZTsK
ICAgICAKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI5MTc5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1Miw3ICsxNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wg
YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0OwogICAg
ICAgICAKLSAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEluZGV4aW5nVHJh
bnNpdGlvbigpIGNvbnN0OworICAgICAgICBib29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKCkgY29u
c3Q7CisgICAgICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3JhZ2VU
cmFuc2l0aW9uKCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAg
ICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0
aGlzLCBnbG9iYWxPYmplY3QpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTI5
MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaQogLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2Vk
IHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCiAvLyBJ
ZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNo
b3VsZCBiZSAwLgogZW51bSBOb25Qcm9wZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRlQ29u
dGlndW91cywKKyAgICBTd2l0Y2hUb0NvbnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0b3Jh
Z2UsCiAgICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xvd1B1
dEFycmF5U3RvcmFnZSwKQEAgLTU3LDEyICs1OSwxOSBAQCBpbmxpbmUgdW5zaWduZWQgdG9BdHRy
aWJ1dGVzKE5vblByb3BlcnR5CiBpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJ
bmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3VvdXM6
CisgICAgICAgIEFTU0VSVCghKG9sZFR5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1b3Vz
OworICAgIGNhc2UgU3dpdGNoVG9Db250aWd1b3VzOgorICAgICAgICBBU1NFUlQob2xkVHlwZSAm
IEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNBcnJheVN0
b3JhZ2UpIHwgKEhhc0NvbnRpZ3VvdXMgfCBIYWRBcnJheVN0b3JhZ2UpOwogICAgIGNhc2UgQWxs
b2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQXJyYXlTdG9y
YWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNBcnJh
eVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
IHJldHVybiBvbGRUeXBlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJu
IChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAg
ICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgQVNTRVJUKG9sZFR5
cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgSGFzQ29u
dGlndW91cykpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQXJyYXlTdG9yYWdlKSB8
IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBZGRJbmRleGVkQWNjZXNzb3JzOgog
ICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwpJbmRleDog
U291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4
dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIGhhc1R3b08KICAgICByZXR1cm4gIWhhc1plcm9Pck9uZUJpdHNT
ZXQodmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCB0aW1lc1RocmVl
UGx1c09uZURpdmlkZWRCeVR3byhUIHZhbHVlKQoreworICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVx
dWl2YWxlbnQgdG86CisgICAgLy8gICAodmFsdWUgKiAzICsgMSkgLyAyOworICAgIC8vIG9yOgor
ICAgIC8vICAgKHVuc2lnbmVkKWNlaWwodmFsdWUgKiAxLjUpKTsKKyAgICAvLyBUaGlzIGZvcm0g
aXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgIHJldHVybiB2YWx1ZSArICh2
YWx1ZSA+PiAxKSArICh2YWx1ZSAmIDEpOworfQorCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFD
T01QSUxFUihSVkNUKSAmJiAhT1MoU09MQVJJUykKIHVzaW5nIHN0ZDo6aXNmaW5pdGU7CiAjaWYg
IUNPTVBJTEVSX1FVSVJLKEdDQzExX0dMT0JBTF9JU0lORl9JU05BTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165304</attachid>
            <date>2012-09-23 20:15:35 -0700</date>
            <delta_ts>2012-09-25 00:37:37 -0700</delta_ts>
            <desc>patching is done</desc>
            <filename>contiguous_patch_4.diff</filename>
            <type>text/plain</type>
            <size>107809</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5MTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBpbmZlciB3aGVuIGluZGV4ZWQgc3RvcmFnZSBpcyBjb250aWd1b3VzLCBhbmQg
b3B0aW1pemUgZm9yIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5o
OgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tUG9p
bnRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cG9pbnRlcik6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6cHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpjb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aGFzQ29udGlndW91cyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNob3J0Q29tcGFj
dGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29u
dmVydFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252
ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0
dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVl
ZHNTbG93UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorCiAyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgaXNuJ3QgYmVpbmcgdXNlZCBvciB0ZXN0ZWQsIHNv
IHdlIHNob3VsZCByZW1vdmUgaXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM5LDYgKzIzOSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gUGF0Y2hh
YmxlSnVtcChqdW1wKCkpOwogICAgIH0KKworICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJh
bmNoVGVzdDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZElt
bTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBhdGNo
YWJsZUp1bXAoYnJhbmNoVGVzdDMyKGNvbmQsIHJlZywgbWFzaykpOworICAgIH0KICNlbmRpZgog
CiAgICAgdm9pZCBqdW1wKExhYmVsIHRhcmdldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
eVZhbEluZm9faAorI2RlZmluZSBCeVZhbEluZm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2VudW0gSklUQXJyYXlNb2RlIHsgSklUQ29udGlndW91cywgSklUQXJy
YXlTdG9yYWdlIH07CisKK3N0YXRpYyBib29sIGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQ29udGlndW91czsK
KyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgp
OworICAgICAgICByZXR1cm4gSklUQ29udGlndW91czsKKyAgICB9Cit9CisKK3N0cnVjdCBCeVZh
bEluZm8geworICAgIEJ5VmFsSW5mbygpIHsgfQorICAgIAorICAgIEJ5VmFsSW5mbyh1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlLCBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lLCBpbnQxNl90IHJldHVybkFk
ZHJlc3NUb1Nsb3dQYXRoKQorICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkK
KyAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKKyAgICAgICAgLCBhcnJheU1vZGUo
YXJyYXlNb2RlKQorICAgICAgICAsIGJhZFR5cGVKdW1wVG9Eb25lKGJhZFR5cGVKdW1wVG9Eb25l
KQorICAgICAgICAsIHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKHJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAg
ICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wOworICAgIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGU7IC8vIFRoZSBhcnJheSBtb2RlIHRoYXQgd2FzIGJha2VkIGludG8gdGhlIGlubGluZSBKSVQg
Y29kZS4KKyAgICBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lOworICAgIGludDE2X3QgcmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGg7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRl
eChCeVZhbEluZm8qIGluZm8pCit7CisgICAgcmV0dXJuIGluZm8tPmJ5dGVjb2RlSW5kZXg7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlm
IC8vIEJ5VmFsSW5mb19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldFN0
dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFsSW5mbyYgZ2V0
QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRCeVZhbEluZm9C
eXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNpemUoKSwg
Ynl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJbmZvJiBnZXRD
YWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBA
IC01OTcsNiArNjAyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldE51bWJl
ck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1YkluZm9z
Lmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1YkluZm9z
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CiAgICAgICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBz
ZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9zLmdyb3coc2l6
ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0IHsgcmV0dXJu
IG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8oc2l6
ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAgICAgICAgdm9p
ZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24p
CiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEy
OTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAwLDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRl
eCA9IDA7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVz
b2x2ZUluZm9JbmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBA
IC03MzgsNiArNzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBm
dW4KICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAg
ICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1f
Y29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29k
ZUJsb2NrLT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LnNpemUoKTsgKytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBD
b2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9u
SW5mb1tpXS5iYWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFy
Z2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRv
bmVUYXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRh
cmdldCk7CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsK
KyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8o
CisgICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisg
ICAgICAgICAgICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm9baV0uYXJyYXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJh
ZFR5cGVKdW1wLCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihyZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVC
bG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxv
Y2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywg
TGlua0J1ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21w
aWxhdGlvbkluZm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAg
ICAKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCisg
ICAgICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgICAgICAsIGRvbmVUYXJn
ZXQoZG9uZVRhcmdldCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1w
OworICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgZG9uZVRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQ
YXRoVGFyZ2V0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXR1cm5BZGRyZXNzOwor
ICAgIH07CisKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7CkBAIC0zNDgsNiArMzY3LDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zm
c2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAg
ICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRy
ZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGls
ZVB1dEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xv
YmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29t
cGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1w
b2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogICAgICAgICB7CkBAIC0zOTcsNiArNDMwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiwgaW50LCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9m
ZnNldCwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW4oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVf
dCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FsbEZyYW1lKik7CiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5m
byosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwg
U3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5BZGRyZXNzUHRyLCBib29sIGRpcmVjdCk7CisgICAgICAg
IAorICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKICAg
ICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNU
SU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7
CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEq
LCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwpAQCAtNDUyLDYgKzQ4OCwyMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQg
c3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmls
ZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4
KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVT
dG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAg
SklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBj
b250YWlucyBpbmRleGluZyB0eXBlLgorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tl
ZCBhbmQgemVybyBleHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuCisgICAgICAgIC8vIFN0
cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxs
LXRocm91Z2gKKyAgICAgICAgLy8gY2FzZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBp
dCBpcyBub3QgeWV0IHByb2ZpbGVkLgorICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dl
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1
bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAs
IGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAg
IC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50
LWNoZWNrZWQgYW5kCisgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVj
a2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KKyAgICAgICAgLy8gcmV0dXJucyB0
aGUgc2xvdyBjYXNlcy4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKTsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3du
Tm90RmluYWwgfTsKIApAQCAtODcwLDYgKzkyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xh
YmVsczsKICAgICAgICAgVmVjdG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbzsKKyAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRp
b25JbmZvPiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsK
ICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8+IG1fbWV0aG9kQ2FsbENv
bXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKQEAg
LTg3OSw2ICs5MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJl
Y29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25JbmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7
CiAgICAgICAgIHVuc2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleDsKICAgICAgICAgdW5z
aWduZWQgbV9jYWxsTGlua0luZm9JbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NTgsMTAgKzU1OCwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVG
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENh
c2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXpl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAg
ICAKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1h
eVN0b3JlVG9Ib2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVBy
b2ZpbGVTYXcoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkK
K3sKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9i
c2VydmVkQXJyYXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkp
IHwgYXNBcnJheU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29z
ZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmls
ZVNhdyhwcm9maWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlT
dG9yYWdlOworICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC0xMTEsMTcgKzEx
Miw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUu
YXJyYXlQcm9maWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIs
IFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZShyZWdUMiwgcmVnVDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Cisg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsK
KyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlw
ZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwg
ZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQor
eworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7Cisg
ICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwg
cmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0MywxNyArMTg0LDEwMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgbm90U3RyaW5nLmxp
bmsodGhpcyk7CiAgICAgbm9uQ2VsbC5saW5rKHRoaXMpOwogICAgIAotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gZW1wdHkgdmFsdWUKKyAgICBzd2l0Y2ggKGNob29zZUFycmF5TW9kZShjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBl
bXB0eSB2YWx1ZQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwogICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7CiAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5j
YWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJn
ZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQogCit2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+YmVnaW4oKSArIGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Cisg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91
c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlT
dG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRk
cmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFi
ZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5
VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1w
VG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGdl
dF9ieV92YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAg
ICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSwgYnlWYWxJbmZvLT5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsocmV0dXJuQWRkcmVz
cywgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJ
VENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBK
SVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9T
bG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsK
KyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RV
QigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X3ZhbCBz
dHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVC
bG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZh
bEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lLCBieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhyZXR1cm5BZGRyZXNzLCBjdGlfb3Bf
cHV0X2J5X3ZhbF9nZW5lcmljKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBvZmZzZXQs
IFJlZ2lzdGVySUQgc2NyYXRjaCwgRmluYWxPYmplY3RNb2RlIGZpbmFsT2JqZWN0TW9kZSkKIHsK
ICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwpAQCAtMjI2LDcgKzM1MCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMjM0LDEw
ICszNTgsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAg
IHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFz
QXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1Qz
LCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlN
b2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91
czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3Rv
cmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAg
ICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAg
IAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5
cGUsIG1vZGUsIGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCBy
ZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIAogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgSnVtcCBvdXRPZkJv
dW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgTGFiZWwgc3RvcmVSZXN1bHQg
PSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAg
ICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAg
ICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
KyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZSwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgo
KSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShw
cm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7
CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Cisg
ICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9
CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1
bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAg
ICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKIAogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKIApAQCAtMjQ3LDggKzQzNCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKEluc3RydWN0aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1wdHku
bGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpLCByZWdUMyk7CisgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gz
MihFcXVhbCwgcmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBzdG9y
ZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3Vs
dCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKQEAgLTI1Nyw4
ICs0NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAg
anVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBlbmQubGluayh0aGlzKTsK
LQotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAgICAK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjcwLDEzICs0NjAsMjEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJv
cGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNl
KTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIG5v
dCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW4gdmVjdG9yIGNoZWNr
CisgICAgLy8gVGhlc2UgbmV4dCB0d28gY2hlY2tzIGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzIGFj
Y29yZGluZyB0byBhcnJheSBtb2RlLgorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAg
ICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlzLCBjdGlfb3BfcHV0X2J5X3ZhbCk7
CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAgc3R1YlB1dEJ5
VmFsQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIpOwogICAgIHN0dWJQdXRCeVZhbENh
bGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1QyKTsKLSAgICBzdHViUHV0QnlWYWxDYWxsLmNhbGwo
KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKworICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0
ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXgrKzsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2luZGV4KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDcsNiArMjQwNywzMCBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
fQogCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vi
c2NyaXB0LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vi
c2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJf
dCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VW
YWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAgICAgICAg
ICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJhbWUs
IGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwg
aSk7CisgICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAgICAgICByZXR1cm4g
YmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQu
YXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2Fs
bEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7
CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7fQorfQorCiBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yNDE2LDM1ICsyNDQwLDM3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwogICAgIAotICAgIGlmIChM
SUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAg
ICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Q
cm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkp
KSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
c3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5h
c1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5n
KGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVT
UywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwg
aSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgp
ICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6
ZS4KKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2Rl
T2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOwor
ICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJ5
VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOworICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby5z
dHViUm91dGluZSk7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdU
eXBlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUg
PSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ3R5cGUoaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgICAg
IGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7
CiAgICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxG
cmFtZSwgaSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUUlVO
X0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewotICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUlu
c3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwotICAgIH0KKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0
cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOworICAgIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIFNUVUJfUkVUUlVOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJ
T04oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0y
NDk1LDE3ICsyNTIxLDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwot
Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0KLSAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNW
YWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOwotCiAgICAgaWYgKExJS0VM
WShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlw
dC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTI1
MjYsNiArMjU0Myw1MSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFs
CiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBz
bG90KTsKICAgICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfcHV0X2J5X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKKworICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7CisKKyAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBB
dHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNh
bGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChi
eXRlY29kZU9mZnNldCk7CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+YnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFT
U0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0
aW1pemFibGVJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5
cGUpOworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQor
ICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQURE
UkVTUywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdXRCeVZhbChj
YWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CisKKyAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOworfQorCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9w
dXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
KyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7CisK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOworICAgIAorICAg
IHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKIAogICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksNyBAQCBleHRl
cm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Nl
bGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVk
SlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0
aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAg
IEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pbihTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBj
dGlfb3BfaW5zdGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKQEAg
LTQ0Niw2ICs0NDcsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
dXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4KFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92
YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAgdm9pZCBKSVRfU1RV
QiBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0ZXJfc2V0dGVyKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9nbG9iYWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI5
MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMjUsNyArMTAyNSw3IEBAIF9sbGludF9vcF9nZXRf
YXJyYXlfbGVuZ3RoOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAg
IGFycmF5UHJvZmlsZSh0MiwgdDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFy
cmF5TGVuZ3RoU2xvdwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlM
ZW5ndGhTbG93CisgICAgYnRpeiB0MiwgKElzQ29udGlndW91cyB8IEhhc0FycmF5U3RvcmFnZSB8
IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2Fk
aXMgOFtQQiwgUEMsIDhdLCB0MQogICAgIGxvYWRwIDY0W1BCLCBQQywgOF0sIHQyCiAgICAgbG9h
ZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKQEAgLTExNTQsMTQgKzExNTQsMjQgQEAg
X2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDMKICAgICBh
cnJheVByb2ZpbGUodDIsIHQzLCB0MSkKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKLSAg
ICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBzeGkycCB0
MSwgdDEKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MworICAgIGJ0aXog
dDIsIEhhc0NvbnRpZ3VvdXMsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cworCisgICAgYmlhZXEg
dDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5n
dGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAorICAg
IGxvYWRwIFt0MywgdDEsIDhdLCB0MgorICAgIGptcCAub3BHZXRCeVZhbERvbmUKKworLm9wR2V0
QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSB8IEhhc1Ns
b3dQdXRBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGJpYWVxIHQxLCAtc2l6ZW9m
IEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QzXSwgLm9w
R2V0QnlWYWxTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkcCBBcnJh
eVN0b3JhZ2U6Om1fdmVjdG9yW3QzLCB0MSwgOF0sIHQyCiAgICAgYnRweiB0MiwgLm9wR2V0QnlW
YWxTbG93CisKKy5vcEdldEJ5VmFsRG9uZToKICAgICBzdG9yZXAgdDIsIFtjZnIsIHQwLCA4XQog
ICAgIGxvYWRwIDQwW1BCLCBQQywgOF0sIHQwCiAgICAgdmFsdWVQcm9maWxlKHQyLCB0MCkKQEAg
LTEyMzMsMjcgKzEyNDMsNDggQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgSlND
ZWxsOjptX3N0cnVjdHVyZVt0MV0sIHQyCiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDMKICAg
ICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2Us
IC5vcFB1dEJ5VmFsU2xvdwogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MAotICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDIsIC5vcFB1dEJ5VmFsU2xvdykKLSAgICBzeGky
cCB0MiwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQzLCAub3BQdXRC
eVZhbFNsb3cpCisgICAgc3hpMnAgdDMsIHQzCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJ0cHog
QXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQ
dXRCeVZhbFN0b3JlUmVzdWx0OgotICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwotICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUodDMsIHQxKQorICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMs
IC5vcFB1dEJ5VmFsTm90Q29udGlndW91cworICAgIAorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0
QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVz
dWx0OgorICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUodDIsIHQxKQorICAgIHdyaXRlQmFycmllcih0MSkKKyAgICBzdG9yZXAgdDEsIFt0MCwg
dDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CisgICAgYmlhIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAu
b3BQdXRCeVZhbFNsb3cKKyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAg
ICBqbXAgLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RD
b250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93
CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6
bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9w
UHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4
XSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJp
ZXIodDEpCi0gICAgc3RvcmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0K
KyAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRp
c3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVt
cHR5OgogICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCi0g
ICAgYWRkaSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmli
IHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVu
Z3RoW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6
bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0sIHQxCisgICAgYWRkaSAxLCB0MQorICAgIGJpZXEgdDEs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV9udW1W
YWx1ZXNJblZlY3Rvclt0MF0KKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJ
bmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFn
ZVN0b3JlUmVzdWx0CiAgICAgYWRkaSAxLCB0MiwgdDEKICAgICBzdG9yZWkgdDEsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCi0gICAg
am1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBqbXAgLm9wUHV0QnlWYWxBcnJheVN0b3Jh
Z2VTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfcHV0X2J5X3ZhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyOTE3OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29y
a2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOSBAQCBlbmQKIAogIyBDb25zdGFudCBmb3IgcmVhc29u
aW5nIGFib3V0IGJ1dHRlcmZsaWVzLgogY29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0NvbnRp
Z3VvdXMgPSAyCiBjb25zdCBIYXNBcnJheVN0b3JhZ2UgPSA4Ci1jb25zdCBBbGxBcnJheVR5cGVz
ID0gMTUKK2NvbnN0IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgPSAxNgogCiAjIFR5cGUgY29uc3Rh
bnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0
eUNhcGFjaXR5ICsgMSk7CiAgICAgfQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUg
bm90IGp1c3QgYmVjYXVzZSBpdCdzIGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAg
Ly8gdGhlIHdob2xlIHBvaW50IG9mIGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBh
cml0aG1ldGljLgorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikK
KyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7
CisgICAgfQorICAgIAorICAgIGNoYXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKTsgfQorICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJ
bmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5n
SGVhZGVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkg
eyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFk
ZXI6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCk7IH0KQEAgLTcwLDkgKzc5LDE2IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVy
biBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9w
ZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2Uo
KTsgfQogICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsg
cmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAg
dWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGlj
TGVuZ3RoKCk7IH0KKyAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGlu
Z0hlYWRlcigpLT52ZWN0b3JMZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVp
bnQzMl90IHZhbHVlKSB7IGluZGV4aW5nSGVhZGVyLT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9
CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFk
ZXItPnNldFZlY3Rvckxlbmd0aCh2YWx1ZSk7IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KHRoaXMpOyB9CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBp
bmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjb250aWd1b3VzKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmllcjxV
bmtub3duPiA+KCk7IH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVy
dHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSk7IH0KICAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDQsNyArMTQ0LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheQog
CiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFn
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKG51bWJlck9mU2xvdHMg
PD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CiAgICAgdW5zaWdu
ZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAg
ICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMg
YSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCkBAIC0xNjMsNyArMTYzLDcgQEAgaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZT
bG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQo
KSwgYWJvdmUuCiAgICAgbWVtbW92ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZp
c2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDE3IEBAIGlu
bGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXQKIAogaW5saW5lIHNpemVfdCBJ
bmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7Ci0gICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpKSkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4g
dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAKKyAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gQXJy
YXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAg
ICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAxMjkxNzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAv
LyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBIYXNDb250aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIApAQCAt
NDIsOSArNDMsMTEgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZAog
CiAvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgID0gSGFzQ29udGln
dW91czsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
ICAgICAgICA9IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9u
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSA9IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5Q2xhc3MgICAgICAgICAgICAgICAgICAgICAg
PSBJc0FycmF5OyAvLyBJJ2Qgd2FudCB0byBjYWxsIHRoaXMgIkFycmF5IiBidXQgdGhpcyB3b3Vs
ZCBsZWFkIHRvIGRpc2FzdHJvdXMgbmFtZXNwYWNlIHBvbGx1dGlvbi4KK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgQXJyYXlXaXRoQ29udGlndW91cyAgICAgICAgICAgICA9IElzQXJyYXkgfCBI
YXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2UgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkg
fCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogCkBAIC01Miw2ICs1NSwxMCBAQCBzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQCiAgICAgTm9uQXJyYXk6ICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgY2FzZSBBcnJheUNsYXNzCiAKKyNkZWZpbmUgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVMgXAorICAgIE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICBc
CisgICAgY2FzdCBBcnJheVdpdGhDb250aWd1b3VzCisKICNkZWZpbmUgQVJSQVlfV0lUSF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTIFwKICAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2UKQEAgLTc2LDYgKzgzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNJbmRleGluZ0hlYWRl
cihJbmQKICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXModHlwZSk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgYm9vbCBoYXNDb250aWd1b3VzKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7
CisgICAgcmV0dXJuICEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9CisKIHN0YXRp
YyBpbmxpbmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkK
IHsKICAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Ns
b3dQdXRBcnJheVN0b3JhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk1LDYgKzM5NSwxNiBAQCBK
U1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgY2FzZSBBcnJheUNsYXNz
OgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAgY2FzZSBBcnJh
eVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVy
Zmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
QVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAKQEAg
LTQ1MSw2ICs0NjEsMjUgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29u
dGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtX2J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7
CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0
aCwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91
c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTog
ewogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgaWYgKGF0
dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSkpIHsKQEAgLTU3OCw2ICs2MDcsMTkgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhF
eGVjU3RhdGUqIGV4ZQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKCFtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIGlmICghbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5pc051
bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcXNv
cnQobV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTYwNyw2
ICs2NDksNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAg
ICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1p
dGl2ZSB2YWx1ZXMuCiAgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CiAgICAg
ICAgIAorICAgICAgICBhdHRlbXB0VG9Db252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29u
dGlndW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAgICAgCkBAIC02MTUsODYgKzY1OCwxMTEgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhF
eGVjU3RhdGUqIGV4ZQogICAgIH0KIH0KIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSog
ZXhlYykKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6
OnNob3J0Q29tcGFjdGVkVmVjdG9yKFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2ln
bmVkIHJlbGV2YW50TGVuZ3RoKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUo
KSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAg
ICBjYXNlIEFycmF5Q2xhc3M6CisgICAgaWYgKCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0
dXJuOworICAgIAorICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5n
cyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJh
c2VkIG9uIHRoYXQuCisgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBv
dmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBs
YXJnZSB0ZW1wb3JhcnkKKyAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMg
ZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9k
cyB0aGF0IHJldHVybgorICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0
cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgogICAg
ICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25l
ZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5n
bG9iYWxEYXRhKCkpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQo
KSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5z
aXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0g
ICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBp
dCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9y
YXJ5Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNy
YXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQg
cmV0dXJuCi0gICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywg
ZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAgICAg
ICAKLSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpOworICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAg
ICAKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMp
OworICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKICAg
ICAgICAgCi0gICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7
IGkrKykgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICAgICAgaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0
aXZlKCk7Ci0gICAgICAgIH0KKyAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRy
dWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBiZWdpbltpXS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCF2
YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Cisg
ICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVl
cyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJ
WE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vi
c2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFp
c2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRp
bnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAg
ICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgCi0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCi0gICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RG
U3RyaW5nSW5saW5lKGV4ZWMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1
ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CiAgICAgICAgIAotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcykt
PnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEhlYXA6OmhlYXAo
dGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZh
bHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQg
d291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgIC8v
IEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBt
aWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisg
ICAgLy8gdGhhbiBPKE4gbG9nIE4pLgogICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAg
ICAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgICAgIHFzb3J0KHZh
bHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29t
cGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVy
Z2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQ
YWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSNlbHNlCi0gICAgICAgIC8vIEZJ
WE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3Rh
YmxlIHNvcnQuCi0gICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBz
dGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNv
cnQuCisgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKICAgICAgICAgcXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgIGVsc2UKKyAgICAgICAgbWVyZ2Vzb3J0KHZh
bHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29t
cGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbHNlCisgICAgLy8gRklYTUU6IFRoZSBxc29y
dCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KKyAg
ICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBp
biBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIHFzb3J0KHZh
bHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29t
cGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgorICAgIAorICAgIC8vIElmIHRoZSB0
b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3Rv
ciBzdG9yYWdlLAorICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmln
bmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7
CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBlbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAg
ICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBh
cnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0
byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCi0gICAgICAgIGlm
IChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkg
ewotICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPCByZWxldmFudExlbmd0
aCkgeworICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgp
LCByZWxldmFudExlbmd0aCk7CiAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICBpZiAoc3RvcmFnZS0+
bGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChyZWxldmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
c1tpXS5maXJzdCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKQorICAgICAgICBiZWdpbltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICAKKyAgICBIZWFw
OjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKK30KKwordm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhp
bmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBj
YXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxB
cnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFw
LmdldCgpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHNvcnRDb21wYWN0
ZWRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oCisgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvciwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKworICAgICAgICBhdHRlbXB0VG9D
b252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBzdG9y
YWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC03ODgsNiArODU2LDc4
IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBjYXNlIEFy
cmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhD
b250aWd1b3VzOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyBy
YWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCisgICAgICAgIAor
ICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRo
ZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgICAgIC8vIGlmIGEgbGFyZ2Vy
IGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpOworICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpID4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBVkxUcmVl
PEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQg
aXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhl
YyA9IGV4ZWM7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0g
Y29tcGFyZUZ1bmN0aW9uOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxs
VHlwZSA9IGNhbGxUeXBlOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxs
RGF0YSA9ICZjYWxsRGF0YTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93
KG5vZGVDb3VudCk7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVK
UykKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRy
KG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9u
KSwgMikpOworICAgICAgICAKKyAgICAgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
LmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rvciwg
bWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCisgICAgICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVu
ZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZp
bmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGln
bm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2Vy
dGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgorICAgICAgICBmb3IgKDsgbnVtRGVm
aW5lZCA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytudW1EZWZpbmVkKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW251bURlZmluZWRd
LmdldCgpOworICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5l
ZF0udmFsdWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYuaXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5l
ZF0udmFsdWUgPSB2OworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwor
ICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKG51bURlZmluZWQgKyBudW1VbmRlZmluZWQgPT0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCh0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA9PSBudW1EZWZpbmVkKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgICAgICBB
VkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0
ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZCAmJiBpIDwgbV9idXR0ZXJsZnktPnB1YmxpY0xl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZh
bHVlKTsKKyAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRGVmaW5lZDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRVbmRlZmluZWQoKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC05MDcsNiArMTA0NywxMiBAQCB2
b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTkzOCw2ICsxMDg0
LDEyIEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoKICAgICBjYXNl
IEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJn
dW1lbnQoaSwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgdW5zaWduZWQgaSA9IDA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjkxNzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTk4LDYgKzk4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAg
IHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAg
ICAgdm9pZCBzb3J0Q29tcGFjdGVkVmVjdG9yKFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4s
IHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoLCAKIAogICAgICAgICB2b2lkIHNldExlbmd0aFdyaXRh
YmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUpOwogCkBAIC0xMDYsNiArMTA5LDE1IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2Jh
bERhdGEmKTsKICAgICB9OwogCisgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91
c0FycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOworICAgICAgICBoZWFkZXIu
c2V0VmVjdG9yTGVuZ3RoKHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOR1RIKSk7Cisg
ICAgICAgIGhlYWRlci5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEJ1
dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgaGVh
ZGVyLCBoZWFkZXIudmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAg
ICB9CisKICAgICBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewogICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKApAQCAtMTIxLDcgKzEz
MywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojpj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIGJ1
dHRlcmZseSA9IGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0
aWFsTGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVCghaW5pdGlhbExlbmd0aCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9
PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCisgICAgICAgICAgICAgICAgICAgfHwgKGlu
aXRpYWxMZW5ndGggJiYgc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFy
cmF5U3RvcmFnZSkpOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRh
LmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAg
ICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJy
YXk7CkBAIC0xMzMsMTUgKzE1MywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHZl
Y3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7Ci0gICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0
aCk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKLSAgICAgICAgc3RvcmFn
ZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OworICAg
ICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29u
dGlndW91cykpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAg
ICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgJnRlbXApKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnV0
dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgIGJ1
dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBidXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JM
ZW5ndGgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDggQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fY2FsbGJhY2tP
YmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09i
amVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fYXJyYXlQcm90b3R5
cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Ci0gICAgbV9hcnJheVN0cnVj
dHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aENvbnRpZ3VvdXMpKTsK
KyAgICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKICAg
ICBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Fy
cmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSk7CiAgICAg
bV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAKQEAgLTQwNyw2ICs0MDgsNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoSlNHbG9iCiAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgYWxsIEpTQXJyYXkgYWxsb2NhdGlvbnMgdGhhdCBsb2FkIHRoZSBhcHByb3ByaWF0ZSBz
dHJ1Y3R1cmUgZnJvbQogICAgIC8vIHRoaXMgb2JqZWN0IG5vdyBsb2FkIGEgc3RydWN0dXJlIHRo
YXQgdXNlcyBTbG93UHV0LgogICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIHRo
aXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsKKyAgICBtX2FycmF5U3RydWN0
dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVy
ZUZvclNsb3dQdXQuZ2V0KCkpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBvYmpl
Y3RzIHRoYXQgaGF2ZSBpbmRleGVkIHN0b3JhZ2Ugc3dpdGNoIHRvIHRoZSBzbG93IGtpbmQgb2YK
ICAgICAvLyBpbmRleGVkIHN0b3JhZ2UuCkBAIC00ODIsNiArNDg0LDcgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX25hbWVTY29wZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fYXJndW1lbnRzU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9hcnJheVN0cnVjdHVyZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAxMjkxNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmFtZVNjb3BlU3RydWN0dXJlOwog
ICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FyZ3VtZW50c1N0cnVjdHVyZTsKICAg
ICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZTsgLy8gVGhpcyBn
ZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRlY2lk
ZSB0byBoYXZlIGEgYmFkIHRpbWUuCisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJy
YXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQg
dGltZS4KICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZUZv
clNsb3dQdXQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYm9vbGVhbk9iamVj
dFN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWxsYmFja0Nv
bnN0cnVjdG9yU3RydWN0dXJlOwpAQCAtMjYyLDcgKzI2Myw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBTdHJ1Y3R1cmUqIG5hbWVTY29wZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZVNjb3BlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYXJndW1lbnRz
U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJy
YXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZVdp
dGhBcnJheVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5
U3RvcmFnZS5nZXQoKTsgfQogICAgICAgICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgp
IHsgcmV0dXJuICZtX2FycmF5U3RydWN0dXJlOyB9CisgICAgICAgIHZvaWQqIGFkZHJlc3NPZkFy
cmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIHsgcmV0dXJuICZtX2FycmF5U3RydWN0dXJl
V2l0aEFycmF5U3RvcmFnZTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGJvb2xlYW5PYmplY3RTdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAg
IFN0cnVjdHVyZSogY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTI5MTc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIsMjQgKzEzMiwzOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVy
CiAgICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZs
eS0+aW5kZXhpbmdIZWFkZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTWFyayBh
bmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldDsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsKKyAgICAgICAgICAgIHNpemVfdCBj
b3VudDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7CisgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+Y29u
dGlndW91cygpOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKTsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29w
eUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3Vy
Y2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAg
ICBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyAv
LyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0LiBXaHkgaXNuJ3QgdGhpcyBwdWJsaWNMZW5ndGgo
KT8KICAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXApCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFs
dWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91
dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwpAQCAtMTU5LDYgKzE3NCw5IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgCiAgICAg
ICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZs
eS0+Y29udGlndW91cygpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsK
ICAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkK
QEAgLTIzNSw2ICsyNTMsMTMgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsK
ICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAg
ICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+
PSBzdG9yYWdlLT5sZW5ndGgoKSkKQEAgLTM1Miw2ICszNzcsMjEgQEAgdm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogeworICAgICAgICBBU1NFUlQobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAgICBpZiAo
cHJvcGVydHlOYW1lIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPCBtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVydHlOYW1lXS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CkBAIC0zNjIsMTUgKzQwMiwxOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgICAgIAorICAgICAgICBKU1ZhbHVlIG9sZCA9IHZhbHVl
U2xvdC5nZXQoKTsKKyAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBt
X251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKHByb3BlcnR5TmFt
ZSA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnR5TmFtZSArIDE7CiAg
ICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgICAgICAgICsrc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90
KQorICAgICAgICB9IGVsc2UgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgICAgICBhdHRlbXB0VG9D
b252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFn
ZSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC00NDQs
NiArNDg3LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKIHZv
aWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBOT1RF
OiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50LCBhcyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNv
bnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQorICAgICAgICAvLyB0aGlzIGNhc2UgaWYgd2Ug
ZXZlciBjYXJlZC4KKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDkxLDkgKzUzOSwxMDQgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogICAgIHJldHVybiBjcmVh
dGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKIH0KIAorQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1
bnNpZ25lZCBuZWVkZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3Ro
ID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNh
cGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQg
cHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAKKyAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAgICAgICAg
bmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAg
bV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBw
cm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBBcnJheVN0
b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5l
d1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIG5ld1N0b3JhZ2Ut
PnNldExlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNs
ZWFyKCk7CisgICAgbmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld1N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBwdWJsaWNMZW5ndGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kKKyAgICBuZXdTdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAg
IG5ld1N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAg
bWVtY3B5KAorICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvciwgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKSwgcHVibGljTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgCisg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4g
bmV3U3RvcmFnZTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRD
b250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKCFzaG91bGRVc2VTbG93
UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0KKyAgICAgICAgQnV0dGVyZmx5OmZyb21Qb2ludGVyKG1fYnV0dGVyZmx5
LT5wb2ludGVyKCkgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIAorICAgIHVuc2ln
bmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChwdWJsaWNMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rv
ckxlbmd0aCk7CisgICAgICAgIAorICAgIC8vIFNoaWZ0IHRoZSBuYW1lZCBwcm9wZXJ0aWVzIG92
ZXIsIGlmIHRoZXJlIGFyZSBzb21lLgorICAgIHNpemVfdCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOworICAgIGlmIChwcm9wZXJ0eVNpemUpIHsKKyAgICAgICAg
bWVtbW92ZSgKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBw
cm9wZXJ0eVNpemUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBwcm9wZXJ0eVNpemUsCisgICAgICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwg
U3dpdGNoVG9Db250aWd1b3VzKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0
dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1
cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gY3Jl
YXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
IHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIGJlIG1hZGUgd2F5IG1vcmUgZWZmaWNpZW50LCBpZiB3ZSBjYXJlZC4KKyAgICAgICAgcmV0
dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhp
c3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSkpOworICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
KTsKICAgICAgICAgCkBAIC01MTMsNiArNjU2LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmVuc3VyZUFycmF5U3RvcmEKIHZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
LCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwpAQCAtNTU2LDggKzcwNCw3IEBAIHZvaWQg
SlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2JhbERhdGEKICAgICBpZiAoc2hvdWxkVXNlU2xv
d1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgbmV3U3RydWN0dXJlLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAg
IHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgIHN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKIH0KIAogYm9vbCBKU09iamVjdDo6c2V0UHJv
dG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKQEAgLTY5MSw2ICs4MzgsMTIgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEpTQwogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgLy8gVGhlcmUgaXMgYW4gZXh0cmVtZWx5IG9idmlvdXMgY2FzZSB0
aGF0IHdlIGNvdWxkIGhhbmRsZSBoZXJlIChkZWxldGluZyB0aGUgbGFzdCBlbGVtZW50KQorICAg
ICAgICAvLyBidXQgSSBkb24ndCBmZWVsIGxpa2Ugd3JpdGluZyB0ZXN0cyBmb3IgaXQsIHNvIEkn
bGwgcHVudCBpdC4KKyAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAgICAgIAogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgICAgICAKQEAgLTg1Myw2ICsxMDA2LDEyIEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmoKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAgICAgCkBAIC0xMzI4LDYgKzE0ODcsNTcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3RvckxlbgogICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29u
dGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7Cisg
ICAgCisgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0
ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gb3IgZXF1
YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCisgICAgQVNTRVJUKGkgPiBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkgfHwgaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIGlm
IChpID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSAmJiBpIDwgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkgeworICAgICAgICBBU1NFUlQoaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmUgY2FzZSB3ZSBjYW4gaGFuZGxlLiBB
bmQgd2UgaGFuZGxlIGl0IGJ5IGdyb3dpbmcgdGhlIGNvbnRpZ3VvdXMKKyAgICAgICAgLy8gc3Rv
cmFnZS4KKyAgICAgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oCisgICAg
ICAgICAgICB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpLAorICAgICAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisgICAg
ICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICAg
ICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCB0cnVlLAorICAgICAgICAgICAgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3Ro
KG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
aSArIDEpOworICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHB1dEJ5SW5kZXhXaXRob3V0
QXR0cmlidXRlc1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhXaXRob3V0QXR0cmlidXRl
c1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+
bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAg
ICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgCisgICAgaWYgKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpKSAmJiBpIDwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKAor
ICAgICAgICAgICAgZ2xvYmFsRGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UsCisgICAgICAgICAg
ICBnZXROZXdWZWN0b3JMZW5ndGgobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpLCBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCksIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChpID49IHN0
b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAg
ICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgIFNw
YXJzZUFyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRh
KTsKKyAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7Cit9CisK
IHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzNDEs
NiArMTU1MSwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAg
ICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBpZiAoIWkgJiYgIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQ
dXRJbmRleGluZygpKSB7CisgICAgICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9i
YWxEYXRhLCAxKVswXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3Rvcihp
LCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKICAgICAgICAgICAgIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVl
LCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTM1Miw2ICsxNTY2LDExIEBAIHZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIHB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMRW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywg
aSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9u
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25I
b2xlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdykpCkBAIC0xMzcxLDggKzE1OTAsMTAgQEAg
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywg
UHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KKyAgICAKICAg
ICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0
aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoYXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFn
ZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRl
cyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKIApAQCAtMTQ1Niw2ICsxNjc3
LDEwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRy
aWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAoIWkpIHsKKyAgICAgICAgICAg
IGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAg
ICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKQogICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywg
bW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKICAgICAgICAgCkBA
IC0xNDY0LDYgKzE2ODksMTUgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0bwogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNj
ZXNzb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBh
dHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpKTsKKyAgICAgICAgfQorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29u
dGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdl
KCkpOwpAQCAtMTQ4NiwxMiArMTcyMCw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmpl
Y3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKICAgICAgICAg
aW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0g
ICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0g
ICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZClj
ZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25l
IHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVk
TGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAg
ICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhkZXNp
cmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2ly
ZWRMZW5ndGgpOwpAQCAtMTUxMSw5ICsxNzQwLDEwIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQg
SlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVu
Z3RoID0gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxl
bmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1NjEsNiArMTc5
MSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgodW5z
aWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkgPCBsZW5ndGgpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0Fy
cmF5UmlnaHQoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRW
ZWN0b3JMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChsZW5ndGgpOworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3
U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTU4OSw2ICsxODM1
LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlm
IChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCksIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjkxNzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDgsNiArMTQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC0xNjEsNiArMTYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0xOTgsNiArMjAwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMjA5LDYgKzIxMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMjIyLDYgKzIyOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpCisg
ICAgICAgICAgICAgICAgICAgICYmIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTIzOCwxNSArMjQ3
LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldEluZGV4UXVpY2tseShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICAgICAgewog
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSAr
IDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBvbGQgPSB4Lmdl
dCgpOworICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAg
ICAgICAgICAgIGlmICghb2xkKSB7CiAgICAgICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSAr
IDEpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3Jh
Z2UpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB4LnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0yNTcsNiArMjc3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5sZW5ndGgoKSk7CkBAIC0yNzMsNiArMjk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5pblNwYXJzZU1vZGUoKTsKQEAgLTQ4MSwxNiArNTA2LDM2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBhbHJlYWR5LgogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgaWYgKExJS0VMWSho
YXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZVNs
b3coZ2xvYmFsRGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0dGVtcHQg
dG8gY29udmVydCB0byBjb250aWd1b3VzIGluZGV4aW5nIHN0b3JhZ2UuIFJldHVybnMgdHJ1ZSBp
ZiBpdCB3YXMgZG9uZSwKKyAgICAgICAgLy8gb3IgZmFsc2UgaWYgaXQgYmFpbGVkIG91dCBmb3Ig
YW55IHJlYXNvbi4gQWxzbyByZXR1cm5zIHRydWUgaWYgdGhlIGFycmF5IHdhcyBhbHJlYWR5Cisg
ICAgICAgIC8vIGNvbnRpZ3VvdXMuCisgICAgICAgIGJvb2wgYXR0ZW1wdFRvQ29udmVydFRvQ29u
dGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
SW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVJ
bml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVy
biBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEsIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC01NTYsMTEgKzYwMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBB
cnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogY3Jl
YXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25l
ZCBuZWVkZWRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7
CiAgICAgICAgIAogICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0
aW9uKTsKIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1
b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKTsKICAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOwogCiAgICAgICAgIGJvb2wgaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKQEAgLTU3MSw3
ICs2MjEsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbm90aWZ5UHJlc2VuY2VP
ZkluZGV4ZWRBY2Nlc3NvcnMoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBib29s
IGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoRXhlY1N0YXRlKiwgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgLy8g
Q2FsbCB0aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2tseSB0byBzdWNjZWVkIGFuZCB5b3Un
cmUgc3VyZSB0aGF0CisgICAgICAgIC8vIHRoZSBhcnJheSBpcyBjb250aWd1b3VzLgorICAgICAg
ICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgodW5zaWduZWQgbGVuZ3RoKTsKIAorICAgICAg
ICBib29sIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgICAgICAgICBBU1NFUlQoIXNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgIT0gc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1
b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaGFzQXJyYXlTdG9y
YWdlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgQVNTRVJUKCFz
aG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAg
ICAgLy8gT2gsIHlvdSBkaWQgdGhpcyBjb252ZXJzaW9uIGJlZm9yZT8gV2VsbCwgeW91IGRvbid0
IGdldCB0byBkbyBpdCBhZ2Fpbi4gQmVjYXVzZQorICAgICAgICAgICAgLy8gdGhyYXNoaW5nIGlz
IG5ldmVyIGdvb2QuCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkoKSAmIEhhZEFycmF5U3RvcmFnZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBPaCwgeW91J3ZlIHVzZWQgc2hpZnQgYW5kIHVuc2hp
ZnQ/IENoYW5jZXMgYXJlIHlvdSdsbCB1c2UgaXQgYWdhaW4sIGFuZCB3ZSdsbCBoYXZlCisgICAg
ICAgICAgICAvLyB0byBjb252ZXJ0IGJhY2suIE5vIGNvbnRpZ3VvdXMgYXJyYXlzIGZvciB5b3Uh
CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VU
b0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKQEAgLTU5Niw2ICs2NzcsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFBy
b3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZG91Ymxl
cyBhcyBwdXREaXJlY3QoKSBiZWNhdXNlIChhKSBjb250aWd1b3VzIGltcGxpZXMgdGhhdCB0aGVy
ZSBhcmUgbm90IGluZGV4ZWQgc2V0dGVycyBvciBpbmRleGVkIHJlYWRvbmxpZXMsIGFuZCAoYikg
dGhpcyBpcyBvbmx5IGZvciBjYXNlcyB3aGVyZSB3ZSBkb24ndCB3YW50IHRoZSBwcm9wZXJ0eSB0
byBoYXZlIGFueSBhdHRyaWJ1dGVzLgorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhXaXRob3V0QXR0
cmlidXRlc1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOworICAgICAgICAKICAgICAgICAgdm9p
ZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIGJvb2wgcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGly
ZWN0SW5kZXhNb2RlLCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdElu
ZGV4TW9kZSk7CkBAIC02MDUsNiArNjg5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOworICAgICAgICAK
KyAgICAgICAgdm9pZCBjb252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhK
U0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAg
QnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxMjkxNzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjMsMTEgKzMyMywxNyBAQCBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVy
CiAgICAgfQogfQogCi1Ob25Qcm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRJ
bmRleGluZ1RyYW5zaXRpb24oKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dElu
ZGV4aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2Vw
dEluZGV4ZWRBY2Nlc3NlcygpCisgICAgICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FC
YWRUaW1lKCk7Cit9CisKK05vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVCghaGFzSW5kZXhl
ZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKTsKICAgICAKLSAgICBpZiAoYW55T2JqZWN0SW5D
aGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hh
dmluZ0FCYWRUaW1lKCkpCisgICAgaWYgKG5lZWRzU2xvd1B1dEluZGV4aW5nKCkpCiAgICAgICAg
IHJldHVybiBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgCiAgICAgcmV0dXJuIEFs
bG9jYXRlQXJyYXlTdG9yYWdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJ
bnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0OworICAgICAgICBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0Owog
ICAgICAgICAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2Jq
ZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkgeyBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEyOTE3OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBGaXJzdEludGVybmFs
QXR0cmkKIC8vIFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0
aW9ucyBub3QgcmVsYXRlZCB0byBwcm9wZXJ0aWVzLgogLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1
c2VkLCB0aGUgc3RyaW5nIHBvcnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KIGVudW0gTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHsKKyAgICBBbGxvY2F0ZUNvbnRpZ3VvdXMsCisgICAgU3dpdGNo
VG9Db250aWd1b3VzLAogICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlLAogICAgIEFsbG9jYXRlU2xv
d1B1dEFycmF5U3RvcmFnZSwKICAgICBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC01
NywxMiArNTksMTkgQEAgaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eQog
aW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUs
IE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewogICAgIHN3aXRjaCAodHJhbnNp
dGlvbikgeworICAgIGNhc2UgQWxsb2NhdGVDb250aWd1b3VzOgorICAgICAgICBBU1NFUlQoIShv
bGRUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKSk7Cisg
ICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQ29udGlndW91czsKKyAgICBjYXNlIFN3aXRjaFRv
Q29udGlndW91czoKKyAgICAgICAgQVNTRVJUKG9sZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOwor
ICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQXJyYXlTdG9yYWdlKSB8IChIYXNDb250aWd1
b3VzIHwgSGFkQXJyYXlTdG9yYWdlKTsKICAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgot
ICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJu
IChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzQXJyYXlTdG9yYWdlOwogICAgIGNhc2Ug
QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250
aWd1b3VzKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBTd2l0Y2hUb1Nsb3dQ
dXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9yYWdl
KTsKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIEhhc0NvbnRpZ3VvdXMpKTsKICAgICAgICAg
cmV0dXJuIChvbGRUeXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlOwogICAgIGNhc2UgQWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIG9sZFR5
cGUgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhF
eHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlz
aW9uIDEyOTE3OSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA0LDYgKzMwNCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBo
YXNUd29PCiAgICAgcmV0dXJuICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28o
VCB2YWx1ZSkKK3sKKyAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgIC8v
ICAgKHZhbHVlICogMyArIDEpIC8gMjsKKyAgICAvLyBvcjoKKyAgICAvLyAgICh1bnNpZ25lZClj
ZWlsKHZhbHVlICogMS41KSk7CisgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRl
cm5hbCBvdmVyZmxvdy4KKyAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAodmFsdWUg
JiAxKTsKK30KKwogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIU9T
KFNPTEFSSVMpCiB1c2luZyBzdGQ6OmlzZmluaXRlOwogI2lmICFDT01QSUxFUl9RVUlSSyhHQ0Mx
MV9HTE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165542</attachid>
            <date>2012-09-25 00:37:37 -0700</date>
            <delta_ts>2012-09-26 01:20:27 -0700</delta_ts>
            <desc>dfg stuff has begun</desc>
            <filename>contiguous_patch_5.diff</filename>
            <type>text/plain</type>
            <size>129693</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NDU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBpbmZlciB3aGVuIGluZGV4ZWQgc3RvcmFnZSBpcyBjb250aWd1b3VzLCBhbmQg
b3B0aW1pemUgZm9yIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5o
OgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tUG9p
bnRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cG9pbnRlcik6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6cHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpjb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aGFzQ29udGlndW91cyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNob3J0Q29tcGFj
dGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29u
dmVydFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252
ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0
dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVl
ZHNTbG93UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorCiAyMDEyLTA5LTI0ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBCdWcgaW4gbnVtZXJpYyBhY2Nlc3NvcnMgb24gZ2xvYmFsIGVudmlyb25t
ZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksMTEg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAoanVtcCgpKTsK
ICAgICB9CisKKyAgICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaFRlc3QzMihSZXN1bHRD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3Rl
ZEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGJyYW5jaFRl
c3QzMihjb25kLCByZWcsIG1hc2spKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQganVtcChM
YWJlbCB0YXJnZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
VmFsSW5mby5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnlWYWxJbmZvX2gKKyNkZWZp
bmUgQnlWYWxJbmZvX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KEpJVCkKKworI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlw
ZS5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitl
bnVtIEpJVEFycmF5TW9kZSB7IEpJVENvbnRpZ3VvdXMsIEpJVEFycmF5U3RvcmFnZSB9OworCitz
dGF0aWMgYm9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUpCit7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgSklUQXJyYXlNb2RlIGppdEFy
cmF5TW9kZUZvckluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CisgICAgY2FzZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRBcnJh
eVN0b3JhZ2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJu
IEpJVENvbnRpZ3VvdXM7CisgICAgfQorfQorCitzdHJ1Y3QgQnlWYWxJbmZvIHsKKyAgICBCeVZh
bEluZm8oKSB7IH0KKyAgICAKKyAgICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
Q29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgaW50
MTZfdCBiYWRUeXBlSnVtcFRvRG9uZSwgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkK
KyAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgYmFkVHlw
ZUp1bXAoYmFkVHlwZUp1bXApCisgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAg
ICAgLCBiYWRUeXBlSnVtcFRvRG9uZShiYWRUeXBlSnVtcFRvRG9uZSkKKyAgICAgICAgLCByZXR1
cm5BZGRyZXNzVG9TbG93UGF0aChyZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgQ29kZUxvY2F0aW9uSnVt
cCBiYWRUeXBlSnVtcDsKKyAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOyAvLyBUaGUgYXJyYXkg
bW9kZSB0aGF0IHdhcyBiYWtlZCBpbnRvIHRoZSBpbmxpbmUgSklUIGNvZGUuCisgICAgaW50MTZf
dCBiYWRUeXBlSnVtcFRvRG9uZTsKKyAgICBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRo
OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Cit9OworCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZv
KQoreworICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisgICAgICAgIAorICAgICAgICBCeVZhbEluZm8mIGdldEJ5VmFsSW5mbyh1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKihiaW5hcnlT
ZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZCwgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleD4obV9i
eVZhbEluZm9zLmJlZ2luKCksIG1fYnlWYWxJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsK
KyAgICAgICAgfQogCiAgICAgICAgIENhbGxMaW5rSW5mbyYgZ2V0Q2FsbExpbmtJbmZvKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewpAQCAtNjEwLDYgKzYxNSwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJ
bmZvcyhzaXplX3Qgc2l6ZSkgeyBtX3N0cnVjdHVyZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CiAg
ICAgICAgIHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3RydWN0dXJlU3R1YkluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJ
bmZvc1tpbmRleF07IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZCeVZhbElu
Zm9zKHNpemVfdCBzaXplKSB7IG1fYnlWYWxJbmZvcy5ncm93KHNpemUpOyB9CisgICAgICAgIHNp
emVfdCBudW1iZXJPZkJ5VmFsSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX2J5VmFsSW5mb3Muc2l6
ZSgpOyB9CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvKHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV9ieVZhbEluZm9zW2luZGV4XTsgfQogCiAgICAgICAgIHZvaWQgYWRkR2xvYmFsUmVzb2x2
ZUluZm8odW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uKQogICAgICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDEyOTQ1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OSwxMiArODU5LDE1IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRT
X0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoK
ICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMSw5
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkyNCwx
MSArOTMwLDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdVT1VT
X1RPX1RBSUxfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9E
RVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBj
YXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMzY1LDcgKzEzNzYsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiAvLyBU
aGVzZSBvbmx5IGdldCBhIENoZWNrQXJyYXkgZm9yIEdldEFycmF5TGVuZ3RoCiAgICAgICAgICAg
ICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBX
ZSBtYXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBt
b2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTQwOCw3ICsx
NDIxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0K
ICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkg
ewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
KyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAx
Mjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDE0IEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChB
cnJheVByb2ZpbGUqIHAKICAgICAgICAgcmV0dXJuIEFycmF5OjpVbnByb2ZpbGVkOwogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQotICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9u
J3Qga25vdyB3aGV0aGVyIHRvIGdvIHRvIHNsb3cgcHV0IG1vZGUsIG9yIG5vdC4gVGhpcyBpcyBh
IGRlY2VudCBndWVzcy4KKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0
byBzbG93IHB1dCBtb2RlIG9yIG5vdC4gV2UncmUgZ3Vlc3NpbmcgdGhhdCB3ZSBkb24ndCBuZWVk
IHNsb3cgcHV0LgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VT
YWZlID8gQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRv
SG9sZSgpID8gQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6Q29udGlndW91cyk7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJv
ZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMp
OgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb0hvbGUgOiBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgogICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVN0b3Jh
Z2VUb0hvbGUgOiBBcnJheTo6QXJyYXlTdG9yYWdlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKQEAgLTU2LDYgKzYyLDIwIEBAIEFycmF5
OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHAKICAgICBjYXNlIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgICAgIHJldHVybiBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9y
YWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAg
IGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRl
eGVkQWNjZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3Vv
dXM7CisgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOworICAgIGNhc2UgYXNBcnJheU1v
ZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICBpZiAoYWN0aW9u
ID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2Vz
KCkpCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2U7CisgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOwogICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Up
OgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5r
VG9BcnJheVN0b3JhZ2U7CkBAIC0xNDQsNiArMTY0LDIyIEBAIGJvb2wgbW9kZUFscmVhZHlDaGVj
a2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJl
dHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAgIAorICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSGFzQ29udGln
dW91cyk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Cisg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IEhhc0NvbnRpZ3VvdXMpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisKICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xl
OgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgpAQCAtMTcwLDcgKzIw
Niw4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICAgICAg
ICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhp
bmdUeXBlKCkgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpCiAg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAotICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoK
KyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CkBAIC0yMjUsNiArMjYyLDI0IEBA
IGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJu
ICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuICJT
dHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQ29u
dGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0
dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZC
b3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091dE9mQm91bmRzIjsKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENv
bnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6Cisg
ICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGln
dW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
OgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7Cisg
ICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6Cisg
ICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOwog
ICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJBcnJheVN0b3Jh
Z2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKQEAgLTI0OSwxMCArMzA0
LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAg
cmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwogICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAg
IHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0Nv
bnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CiAgICAgICAg
IHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Ns
b3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6
CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkNv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAg
ICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTI5NDU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsKICAgICBTdHJpbmcsCiAgICAgCiAg
ICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQgc3RvcmFnZSB3aGVyZSB0aGUgY2hl
Y2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRpZ3VvdXMsCisgICAgQ29udGlndW91
c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQ29udGln
dW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAgIEFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMsCisgICAg
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAgIFBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3RvcmFnZSwKICAgICBBcnJheVN0b3Jh
Z2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKQEAgLTY4LDggKzc3LDE2IEBAIGVu
dW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywK
ICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdoZXJl
IHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBCbGFua1RvQ29udGlndW91cywKICAg
ICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlLAor
ICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisgICAgCisgICAgLy8gTW9kZXMg
dGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9yYWdlLiBUaGVzZSBkb24ndCBiZW5l
Zml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3RvcmFnZSBDU0UuCisgICAgQ29udGln
dW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFn
ZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKICAgICAK
ICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAtODksNiArMTA2LDMyIEBAIGVudW0g
TW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCiAKIC8vIEZp
cnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgorI2RlZmluZSBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJy
YXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOiAgICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNU
b1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGln
dW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9DT05USUdVT1VTX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RF
UzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQVJSQVlfV0lUSF9DT05U
SUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91czogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c091dE9m
Qm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKICNkZWZpbmUgTk9OX0FSUkFZ
X0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpB
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAg
LTEwNiwxNSArMTQ5LDE0IEBAIGVudW0gTW9kZSB7CiAjZGVmaW5lIEFMTF9BUlJBWV9TVE9SQUdF
X01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBOT05fQVJSQVlfQVJSQVlf
U1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCi0jZGVmaW5lIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlTdG9yYWdlVG9I
b2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKICNkZWZpbmUgSU5fQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFSUkFZX1NUT1JB
R0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFS
UkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUK
ICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgIFwKQEAgLTEyNiwxMyArMTY4LDI1IEBAIGVudW0gTW9kZSB7CiAgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwogCiAvLyBO
ZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIEVGRkVDVEZV
TF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJyYXk6OkJsYW5rVG9BcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09OVElH
VU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0NvbnRp
Z3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAg
ICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3Jh
Z2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgIFwKKyNk
ZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAg
XAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUwotI2RlZmluZSBT
TE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAorI2RlZmluZSBTTE9XX1BV
VF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICBcCiAgICAgQXJyYXk6
OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBTExfRUZGRUNURlVMX0NPTlRJ
R1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQUxMX0VGRkVD
VFVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZQorCisvLyBGaW5hbGx5OiBoZWxwZXJz
IGZvciBwb2x5bW9ycGhpYyBhcnJheSBhY2Nlc3Nlcy4KKyNkZWZpbmUgQUxMX1BPTFlNT1JQSElD
X01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIENvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJh
eVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCiAKIEFycmF5OjpNb2Rl
IGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VTYWZl
KTsKIApAQCAtMTQ1LDggKzE5OSwxMCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6
Ok1vZGUpOwogaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZGUgYXJyYXlN
b2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19NT0RFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9N
T0RFUzoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU2LDcgKzIxMiw5
IEBAIGlubGluZSBib29sIG1vZGVVc2VzQnV0dGVyZmx5KEFycmF5OjpNb2QKIGlubGluZSBib29s
IG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJy
YXlNb2RlKSB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2Niw2ICsyMjQsOSBAQCBpbmxpbmUgYm9vbCBt
b2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFyCiBpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNjZXNz
KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAg
IGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBDT05USUdVT1VTX1RP
X1RBSUxfTU9ERVM6CisgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAgICAg
Y2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgZGVmYXVsdDoKQEAgLTE4NCwxMSArMjQ1LDI2IEBAIGlubGluZSBib29sIGlzU2xvd1B1
dEFjY2VzcyhBcnJheTo6TW9kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIG1heVN0b3JlVG9U
YWlsKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgIGNhc2UgT1VUX09GX0JPVU5E
U19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgor
ICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0
b3JlVG9Ib2xlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgewogICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VU
X09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9D
b250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NU
T1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0yMDQs
NiArMjgwLDcgQEAgaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcgogICAg
IGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjQyLDYgKzMxOSwxNiBAQCBpbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhBcnJheTo6TW9k
ZSBtCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBtb2RlSXNQb2x5bW9ycGhpYyhBcnJheTo6TW9k
ZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQUxMX1BPTFlNT1JQSElD
X01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCiBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJy
YXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKQEAgLTI0OSw3ICszMzYsMTEg
QEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzoKICAgICBj
YXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI1OSw3ICszNTAsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CiAgICAg
Y2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CkBAIC0y
NzMsNyArMzY1LDcgQEAgaW5saW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQQog
aW5saW5lIGJvb2wgaXNFZmZlY3RmdWwoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2gg
KG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI5NDU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIy
LDcgKzQyMiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0
ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2Rl
UHRyLT5hcnJheU1vZGUoKSA9PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAgIHN3aXRjaCAo
bm9kZVB0ci0+YXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7
CiAgICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVP
cmlnaW4pOwogICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAgICAgTm9kZUlu
ZGV4IGZvcmNlRXhpdEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUgKzQzMSwyNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJs
b2NrLCBmb3JjZUV4aXRJbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlNb2RlKCkp
KQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAg
Y2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBz
dG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9y
aWdpbiwgYmFzZS5pbmRleCgpKTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAg
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19N
T0RFUzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBtX2dyYXBo
LmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShz
dG9yYWdlKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3Jh
Z2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2lu
LCBiYXNlLmluZGV4KCkpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5j
aGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3Rv
cmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQogICAgIH0KICAgICAKICAg
ICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyOTQ1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSwxMSBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAg
ICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBB
TExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAg
ICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCShyZXZpc2lvbiAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdp
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogCiAgICAgbV9wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4
ID0gMDsKICAgICBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJ
bmZvSW5kZXggPSAwOwogICAgIApAQCAtNzM4LDYgKzczOSwyMCBAQCBKSVRDb2RlIEpJVDo6cHJp
dmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3Ry
dWN0dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mby5zaXplKCk7ICsraSkKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
b1tpXS5jb3B5VG9TdHViSW5mbyhtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSksIHBh
dGNoQnVmZmVyKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZCeVZhbEluZm9zKG1fYnlW
YWxDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkgeworICAgICAgICBDb2RlTG9jYXRp
b25KdW1wIGJhZFR5cGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uYmFkVHlwZUp1bXApKTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZh
bENvbXBpbGF0aW9uSW5mb1tpXS5kb25lVGFyZ2V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgc2xvd1BhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxh
dGlvbkluZm9baV0uc2xvd1BhdGhUYXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsIHJl
dHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbklu
Zm9baV0ucmV0dXJuQWRkcmVzcyk7CisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9jay0+YnlW
YWxJbmZvKGkpID0gQnlWYWxJbmZvKAorICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1tpXS5ieXRlY29kZUluZGV4LAorICAgICAgICAgICAgYmFkVHlwZUp1bXAsCisgICAgICAgICAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmFycmF5TW9kZSwKKyAgICAgICAgICAgIGRpZmZl
cmVuY2VCZXR3ZWVuQ29kZVB0cihiYWRUeXBlSnVtcCwgZG9uZVRhcmdldCksCisgICAgICAgICAg
ICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIocmV0dXJuQWRkcmVzcywgc2xvd1BhdGhUYXJnZXQp
KTsKKyAgICB9CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2Nh
bGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7
CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8o
aSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDEyOTQ1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsy
NjQsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29weVRvU3R1YkluZm8oU3Ry
dWN0dXJlU3R1YkluZm8mIGluZm8sIExpbmtCdWZmZXIgJnBhdGNoQnVmZmVyKTsKICAgICB9Owog
CisgICAgc3RydWN0IEJ5VmFsQ29tcGlsYXRpb25JbmZvIHsKKyAgICAgICAgQnlWYWxDb21waWxh
dGlvbkluZm8oKSB7IH0KKyAgICAgICAgCisgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0KQorICAgICAg
ICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGJhZFR5
cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQor
ICAgICAgICAgICAgLCBkb25lVGFyZ2V0KGRvbmVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKKyAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQ7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgcmV0dXJuQWRkcmVzczsKKyAgICB9OworCiAgICAgc3RydWN0IFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhv
dFBhdGhCZWdpbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVyOwpA
QCAtMzQ4LDYgKzM2NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBu
ZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZh
bChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEs
IGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFs
KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBq
aXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
YXJyYXlNb2RlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKICAgICAg
ICAgewpAQCAtMzk3LDYgKzQzMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyosIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCosIGludCwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4q
LCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQ
cm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwg
U3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQ
dHIsIENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5z
aXRpb24oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciwg
Ym9vbCBkaXJlY3QpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5
VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRy
LCBKSVRBcnJheU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4gcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiwg
VHJhbXBvbGluZVN0cnVjdHVyZSopOwogICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5h
dGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKQEAgLTQ1
Miw2ICs0ODgsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJ
RCBzY3JhdGNoLCBBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlRm9yQnl0ZWNvZGVJbmRleChSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlw
ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUq
KTsKKyAgICAgICAgCisgICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQ
cm9maWxlKik7CisgICAgICAgIAorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFz
ZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZXhpbmcgdHlwZS4KKyAgICAgICAgLy8g
UHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBj
aGVja2VkLgorICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4gUmV0dXJu
cyB0aGUgc2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCisgICAgICAgIC8vIGNhc2UgY29udGFpbnMg
cmVzdWx0IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KKyAgICAgICAgSnVt
cExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFByb3BlcnR5IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBp
bmRlY2luZyB0eXBlLgorICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBs
b2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAorICAgICAgICAvLyB6ZXJvLWV4dGVu
ZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQu
CisgICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCisgICAgICAgIEp1bXBMaXN0IGVt
aXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1v
ZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKQEAgLTg3MCw2ICs5MjIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAg
ICAgIFZlY3RvcjxMYWJlbD4gbV9sYWJlbHM7CiAgICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJD
b21waWxhdGlvbkluZm8+IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm87CisgICAgICAg
IFZlY3RvcjxCeVZhbENvbXBpbGF0aW9uSW5mbz4gbV9ieVZhbENvbXBpbGF0aW9uSW5mbzsKICAg
ICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8+IG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsQ29tcGlsYXRp
b25JbmZvPiBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxKdW1w
VGFibGU+IG1fam1wVGFibGU7CkBAIC04NzksNiArOTMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgdW5zaWdu
ZWQgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1f
YnlWYWxJbnN0cnVjdGlvbkluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVJ
bmZvSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fY2FsbExpbmtJbmZvSW5kZXg7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDEwICs1NTksMjUgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0QXJyYXlQcm9maWxpbmdTaXRlRgogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2Zp
bGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewot
ICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAorI2lmIEVO
QUJMRShWQUxVRV9QUk9GSUxFUikgICAgCiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJy
YXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKKyNlbmRpZgorfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5UHJvZmlsZSogcHJvZmlsZSwgSW5k
ZXhpbmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAg
IHJldHVybiAhIShwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSAmIChhc0FycmF5TW9kZXMo
Tm9uQXJyYXkgfCBjYXBhYmlsaXR5KSB8IGFzQXJyYXlNb2RlcyhBcnJheUNsYXNzIHwgY2FwYWJp
bGl0eSkpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBK
SVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQor
eworICAgIGlmIChhcnJheVByb2ZpbGVTYXcocHJvZmlsZSwgSGFzQXJyYXlTdG9yYWdlKSkKKyAg
ICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAgICByZXR1cm4gSklUQ29udGlndW91czsK
IH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTI5NDU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDYgKzk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVj
dGlvbgogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9w
ZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIo
cmVnVDEpOwpAQCAtMTExLDE3ICsxMTIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjdGlvbgogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKIAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAotICAgIGxvYWRQ
dHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJh
eU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1
b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Cisg
ICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVP
ZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFNjYWxlUHRyKSwgcmVnVDApOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworCisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisgICAgbG9h
ZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC0xNDMsMTcgKzE4NCwxMDAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5z
dHJ1YwogICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOwogICAgIG5vbkNlbGwubGluayh0aGlzKTsK
ICAgICAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCisgICAgc3dpdGNoIChjaG9vc2VB
cnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpIHsKKyAgICBjYXNlIEpJ
VENvbnRpZ3VvdXM6CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0
aCBjaGVjaworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoYmFzZSwgcmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCBy
ZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIENhbGwgY2FsbCA9IHN0dWJDYWxs
LmNhbGwoZHN0KTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Cisg
ICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKIH0KIAordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2Rl
QmxvY2stPmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVM
b2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9m
ZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0
Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQo
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0
dXJuIHBvaW50ICVwIiwKKyAgICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUs
IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHJldHVybkFkZHJlc3MsIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpOworfQor
Cit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQor
eworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+YmVn
aW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJy
YXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFi
ZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29k
ZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9
IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAo
IkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQg
JXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAg
IAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSwgYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
cmV0dXJuQWRkcmVzcywgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyk7Cit9CisKIHZvaWQgSklU
Ojpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCByZXN1
bHQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklEIHNjcmF0Y2gsIEZpbmFsT2JqZWN0TW9k
ZSBmaW5hbE9iamVjdE1vZGUpCiB7CiAgICAgQVNTRVJUKHNpemVvZihKU1ZhbHVlKSA9PSA4KTsK
QEAgLTIyNiw3ICszNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0
aW9uCiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRl
Z2VyKHJlZ1QxKTsKQEAgLTIzNCwxMCArMzU4LDczIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoSW5zdHJ1Y3Rpb24KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBKSVRBcnJheU1v
ZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1
b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJh
eVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAK
KyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyht
X2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CisKKyAgICBlbWl0V3JpdGVC
YXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVz
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMp
KTsKKyAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSkpOworICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKwor
ICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMyk7CisgICAgc3RvcmVQdHIocmVnVDMsIEJhc2VJbmRleChyZWdUMiwg
cmVnVDEsIFNjYWxlUHRyKSk7CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIG91
dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6
Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAgZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIGp1bXAoKS5saW5rVG8o
c3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAor
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0
cihaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKQEAgLTI0Nyw4ICs0MzQsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIEp1bXAgZW5kID0ganVt
cCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
KTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgZW1pdEFycmF5
UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSwgcmVnVDMpOworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDMpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICBicmFuY2gz
MihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSk7CkBAIC0yNTcsOCArNDQ3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbgogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwog
CiAgICAgZW5kLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdU
MywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTI3MCwxMyArNDYw
LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIGluIHZlY3RvciBjaGVjaworICAgIC8vIFRoZXNlIG5leHQgdHdvIGNoZWNrcyBoYXZl
IGRpZmZlcmVudCBtZWFuaW5ncyBhY2NvcmRpbmcgdG8gYXJyYXkgbW9kZS4KKyAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIAorICAgIExhYmVsIHNs
b3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRCeVZhbENhbGwodGhp
cywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQo
cmVnVDApOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1Qy
KTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0gICAg
c3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5VmFsQ2Fs
bC5jYWxsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pbmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEyOTQ1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDE0LDYg
KzI0MTQsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoCisgICAg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlw
dCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChMSUtFTFkoYmFz
ZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgICAgICBpZiAo
SlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShj
YWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMy
KCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOworICAgICAg
ICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdl
dEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVl
KS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmFz
ZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0KKworICAgIGlmIChpc05hbWUoc3Vic2Ny
aXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFt
ZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7CisKKyAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFt
ZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFt
ZSwgcHJvcGVydHkpO30KK30KKwogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wX2dldF9ieV92YWwpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwpAQCAtMjQyMywzNSArMjQ0NywzNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNW
YWx1ZSgpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFs
dWUoKTsKICAgICAKLSAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3Jp
cHQuaXNTdHJpbmcoKSkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVl
LmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHkoY2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3Jp
cHQpLT52YWx1ZShjYWxsRnJhbWUpKSkgewotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
TigpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVp
bnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNTdHJpbmco
YmFzZVZhbHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewotICAg
ICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX3N0
cmluZykpOwotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUp
LT5nZXRJbmRleChjYWxsRnJhbWUsIGkpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElP
TigpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIGlm
IChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAg
IC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAgQVNT
RVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5ieVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAg
ICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAgICBpZiAo
aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmd0eXBlKGluZGV4
aW5nVHlwZSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1v
ZGUpCisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVS
Tl9BRERSRVNTLCBhcnJheU1vZGUpOwogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9Cisg
ICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCBTVFVCX1JFVFJVTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9O
KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorICAgIAorREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWxfZ2VuZXJpYykKK3sK
KyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoaXNOYW1l
KHN1YnNjcmlwdCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNh
bGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZh
dGVOYW1lKCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2Fs
bEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkp
OwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0
ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGdldEJ5VmFsKGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFJVTl9BRERSRVNTKTsK
KyAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogICAgIApAQCAtMjUwMiwxNyArMjUyOCw4IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwpCitzdGF0
aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUs
IEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tG
cmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc3RhY2tGcmFt
ZS5nbG9iYWxEYXRhOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3Nb
MF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFd
LmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFs
dWUoKTsKLQogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAg
IHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpKSB7CkBAIC0yNTMzLDYgKzI1NTAsNTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJh
bWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9Cit9CisKK0RFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwpCit7CisgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFj
a0ZyYW1lLmNhbGxGcmFtZTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0Zy
YW1lLmdsb2JhbERhdGE7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJn
c1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3Nb
MV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNW
YWx1ZSgpOworCisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0lu
dDMyKCkpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29k
ZSgpOworICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBCeVZhbEluZm8m
IGJ5VmFsSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJ5VmFsSW5mbyhieXRlY29kZU9m
ZnNldCAtIDEpOworICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCk7CisgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkp
IHsKKyAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JJ
bmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0g
YnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZh
bCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZh
bEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcHV0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFs
dWUpOworCisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKK30KKworREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
c3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc3Rh
Y2tGcmFtZS5nbG9iYWxEYXRhOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5h
cmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJd
LmpzVmFsdWUoKTsKKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCB2YWx1ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTI5NDU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNv
ZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0
X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAg
IEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9i
eV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVS
TkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
dXRfZ2V0dGVyX3NldHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29m
Zl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHJldmlzaW9uIDEyOTQ1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEw
MTgsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0NlbGw6Om1f
c3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAgICBidGl6
IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBIYXNBcnJh
eVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXogdDIsIChJc0NvbnRpZ3Vv
dXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSwgLm9wR2V0QXJy
YXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDEKICAgICBsb2FkcCA2NFtQ
QiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwCkBA
IC0xMTQ3LDE0ICsxMTQ3LDI0IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxvYWRwIDMy
W1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDEpCiAgICAgbG9hZGlz
IDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BHZXRC
eVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDMsIHQxLCAub3BHZXRC
eVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BHZXRCeVZhbE5vdENv
bnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZGlz
IDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4XSwgdDIKKyAgICBqbXAgLm9w
R2V0QnlWYWxEb25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBI
YXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cK
ICAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjpt
X3ZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywg
OF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0Mgog
ICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3Rv
cmVwIHQyLCBbY2ZyLCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZh
bHVlUHJvZmlsZSh0MiwgdDApCkBAIC0xMjI2LDI5ICsxMjM2LDU1IEBAIF9sbGludF9vcF9wdXRf
YnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRw
IDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRp
eiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIs
IFBDLCA4XSwgdDAKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQ
dXRCeVZhbFNsb3cpCi0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZUludDMyKHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxv
YWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQ
dXRCeVZhbFNsb3cKLSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwg
Lm9wUHV0QnlWYWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRb
UEIsIFBDLCA4XSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBi
dGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAg
ICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1
YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRC
eVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIK
KyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEp
CisgICAgc3RvcmVwIHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5
VmFsQ29udGlndW91c091dE9mQm91bmRzOgorICAgIGJpYSB0MywgLXNpemVvZiBJbmRleGluZ0hl
YWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xv
dworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgaWYgVkFMVUVfUFJPRklM
RVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAgICAgc3RvcmViIDEsIEFy
cmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQKKyAgICBhZGRpIDEsIHQz
LCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlWYWxDb250aWd1b3VzU3Rv
cmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0Fy
cmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZh
bFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9wUHV0
QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3Vs
dDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3RvcmVwIHQxLCBBcnJheVN0
b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6
bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6
Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0g
ICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAg
ICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2Zp
bGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCi0gICAgYWRkaSAxLCBBcnJheVN0b3Jh
Z2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
dG9yZVJlc3VsdAorICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0
MF0sIHQxCisgICAgYWRkaSAxLCB0MQorICAgIGJpZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cK
KyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KKyAg
ICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJs
aWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAgICAgYWRk
aSAxLCB0MiwgdDEKICAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCi0gICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVS
ZXN1bHQKKyAgICBqbXAgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogCiAub3BQ
dXRCeVZhbFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHV0X2J5X3Zh
bCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyOTQ1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjMsOCAr
NjMsOSBAQCBlbmQKIAogIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVz
LgogY29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0NvbnRpZ3VvdXMgPSAyCiBjb25zdCBIYXNB
cnJheVN0b3JhZ2UgPSA4Ci1jb25zdCBBbGxBcnJheVR5cGVzID0gMTUKK2NvbnN0IEhhc1Nsb3dQ
dXRBcnJheVN0b3JhZ2UgPSAxNgogCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlw
ZSA9IDUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShy
ZXZpc2lvbiAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdz
IGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9m
IGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNo
YXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQor
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCk7IH0KQEAgLTcwLDkgKzc5LDE2IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50
MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5n
dGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4
aW5nSGVhZGVyLT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JM
ZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXItPnNldFZlY3Rvckxlbmd0aCh2
YWx1ZSk7IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFQqIGluZGV4aW5n
UGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CiAgICAgQXJy
YXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlT
dG9yYWdlPigpOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjb250aWd1b3VzKCkgeyBy
ZXR1cm4gaW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmllcjxVbmtub3duPiA+KCk7IH0KICAgICAK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4g
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KICAgICBz
dGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMTI5NDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheQogCiBpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNs
b3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSk7CiAgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+
cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQg
cHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBr
bm93IGluIHdoaWNoCkBAIC0xNjMsNyArMTYzLDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKIHsKLSAgICBBU1NFUlQo
aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VS
VChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHVuc2ln
bmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCiAgICAgbWVtbW92
ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5s
aW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjk0NTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDE3IEBAIGlubGluZSBzaXplX3QgSW5kZXhpbmdI
ZWFkZXI6OnByZUNhcGFjaXQKIAogaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKExJ
S0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAvLyBGbGFncyBmb3IgdGVzdGluZyB0
aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJ
c0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBI
YXNDb250aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBI
YXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBI
YXNTbG93UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIApAQCAtNDIsOSArNDMsMTEgQEAgc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZAogCiAvLyBMaXN0IG9mIGFjY2VwdGFi
bGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAg
ICAgICAgICAgICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJh
eVdpdGhDb250aWd1b3VzICAgICAgICAgID0gSGFzQ29udGlndW91czsKIHN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgICAgICA9IEhhc0FycmF5U3Rv
cmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZSA9IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEFycmF5Q2xhc3MgICAgICAgICAgICAgICAgICAgICAgPSBJc0FycmF5OyAvLyBJJ2Qgd2Fu
dCB0byBjYWxsIHRoaXMgIkFycmF5IiBidXQgdGhpcyB3b3VsZCBsZWFkIHRvIGRpc2FzdHJvdXMg
bmFtZXNwYWNlIHBvbGx1dGlvbi4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRo
Q29udGlndW91cyAgICAgICAgICAgICA9IElzQXJyYXkgfCBIYXNDb250aWd1b3VzOwogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAgICAgID0gSXNB
cnJheSB8IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkgfCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlOwogCkBAIC01Miw2ICs1NSwxMCBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5
V2l0aFNsb3dQCiAgICAgTm9uQXJyYXk6ICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBB
cnJheUNsYXNzCiAKKyNkZWZpbmUgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVMgXAorICAg
IE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICBcCisgICAgY2FzdCBBcnJheVdpdGhD
b250aWd1b3VzCisKICNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTIFwKICAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKQEAgLTc2LDYgKzgzLDExIEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihJbmQKICAgICByZXR1cm4gaGFz
SW5kZXhlZFByb3BlcnRpZXModHlwZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNDb250
aWd1b3VzKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAgcmV0dXJuICEoaW5kZXhp
bmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNBcnJh
eVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKIHsKICAgICByZXR1cm4gISEoaW5k
ZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lv
biAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk1LDYgKzM5NSwxNiBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3Ro
XS5nZXQoKTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAKQEAgLTQ1MSw2ICs0NjEsMjUgQEAgdm9p
ZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGlm
IChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxl
bmd0aCArIDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICBtZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOworICAg
ICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3Ro
IikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4
ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICB1bnNpZ25lZCBv
bGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5
SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1ZSkpIHsKQEAgLTU3OCw2ICs2
MDcsMTkgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIGNh
c2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5
V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKCFtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlm
ICghbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5pc051bWJlcigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcXNvcnQobV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpLCBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5n
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTYwNyw2ICs2NDksNyBAQCB2b2lkIEpTQXJy
YXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZy
b20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCiAgICAgICAg
IHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CiAgICAgICAgIAorICAgICAgICBhdHRlbXB0
VG9Db252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBz
dG9yYWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC02MTUsODYgKzY1
OCwxMTEgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIH0K
IH0KIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKK3RlbXBsYXRlPEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNob3J0Q29tcGFjdGVkVmVjdG9y
KFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKQog
ewotICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7Ci0gICAgCi0gICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6Cisg
ICAgaWYgKCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIENv
bnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBz
byB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgLy8g
VGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBl
ciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKKyAgICAv
LyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21l
IG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgIC8v
IHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5n
IGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgogICAgICAgICAKLSAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0g
ICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewotICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNj
cmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNl
IHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgICAgIC8vIFRoaXMgaXMgYSBj
b25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNv
biwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgICAgIC8vIGJ1ZmZl
ci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0
cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgICAgIC8vIHJh
bmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNv
bXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZh
bHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAg
ICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxW
YWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAg
IGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIEhlYXA6OmhlYXAodGhp
cyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wg
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAgICAg
QVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIHZhbHVlc1tpXS5maXJz
dCA9IHZhbHVlOwotICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgICAgIH0KKyAg
ICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBiZWdpbltpXS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgIGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2
ZSgpOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxv
b3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBh
ZnRlcgotICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5n
IG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAvLyBhIHRvU3RyaW5nIGNhbGwg
cmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICB2YWx1
ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJp
bmdJbmxpbmUoZXhlYyk7CiAgICAgICAgIAotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2
YWx1ZXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVj
dG9yKCZ2YWx1ZXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAg
Ly8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGht
IG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIK
LSAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0
IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRp
eCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAgLy8gdGhhbiBPKE4gbG9nIE4p
LgogICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICAgICAgaWYgKGlzU29ydGluZ1By
aW1pdGl2ZVZhbHVlcykKLSAgICAgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMu
c2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFT
b3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigp
LCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5n
UGFpckZvclFTb3J0KTsKLSNlbHNlCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFy
eSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCi0gICAgICAgIC8v
IEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHBy
YWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCisgICAgaWYgKGlzU29ydGlu
Z1ByaW1pdGl2ZVZhbHVlcykKICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOworICAgIGVsc2UKKyAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMu
c2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFT
b3J0KTsKKyNlbHNlCisgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlz
IGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KKyAgICAvLyBFQ01BU2NyaXB0LTI2MiBk
b2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMg
cGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMu
c2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFT
b3J0KTsKICNlbmRpZgorICAgIAorICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFu
Z2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgIC8vIGlu
Y3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwg
dmFsdWVzLgorICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBcnJheVdpdGhD
b250aWd1b3VzOgorICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKHJlbGV2YW50TGVuZ3Ro
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcg
ZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFn
ZSwKLSAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwg
bnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCi0gICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkgewotICAgICAgICAgICAgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBpZiAoc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkgeworICAgICAgICAgICAgaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFudExlbmd0aCk7CiAg
ICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCByZWxldmFudExl
bmd0aCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChyZWxldmFudExlbmd0aCk7Cisg
ICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZWxldmFudExlbmd0aDsgaSsrKQorICAgICAgICBiZWdpbltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICAKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1w
U29ydFZlY3RvcigmdmFsdWVzKTsKK30KKwordm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNs
YXNzOgorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMp
LT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3Vv
dXM6IHsKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPigK
KyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KICAgICAgICAgCisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQ29u
dGlndW91cz4oCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvciwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKTsKKworICAgICAgICBhdHRlbXB0VG9Db252ZXJ0Q29udGlndW91c0FycmF5
U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAgICAgCkBAIC03ODgsNiArODU2LDc4IEBAIHZvaWQgSlNBcnJheTo6c29y
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUg
ZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11
bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1
cCB0byBubyBnb29kCisgICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAg
ICAgICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgICAgICBpZiAo
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9y
QXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0
ZW1zCisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7CisgICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOworICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOworICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKKyAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7CisgICAgICAg
IAorICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKKyAgICAgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMs
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKKyAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1v
ZGlmaWVkCisgICAgICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1
aWxkaW5nIHRoZSB0cmVlIGhlcmUuCisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZp
bmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisg
ICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVz
LCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBp
bnRvIHRoZSB0cmVlLgorICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW251bURlZmluZWRdLmdldCgpOworICAgICAgICAgICAg
aWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsg
KytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAg
ICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVt
RGVmaW5lZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG51bURlZmluZWQgKyBudW1VbmRlZmluZWQgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
LnNpemUoKSA9PSBudW1EZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZh
bHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFj
dG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3Rh
cnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
RGVmaW5lZCAmJiBpIDwgbV9idXR0ZXJsZnktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAgICAgICAgICAgICsr
aXRlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1
ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgCkBAIC05MDcsNiArMTA0NywxMiBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdM
aXN0KEV4ZWNTdGF0ZSogZXhlCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTkzOCw2ICsxMDg0LDEyIEBAIHZvaWQgSlNBcnJheTo6
Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgdW5zaWduZWQgaSA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAt
Pmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxh
dGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0Q29tcGFjdGVk
VmVjdG9yKFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVu
Z3RoLCAKIAogICAgICAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wg
d3JpdGFibGUpOwogCkBAIC0xMDYsNiArMTA5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKICAgICB9OwogCisg
ICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgSW5k
ZXhpbmdIZWFkZXIgaGVhZGVyOworICAgICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHN0ZDo6
bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOR1RIKSk7CisgICAgICAgIGhlYWRlci5zZXRQdWJs
aWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlKAorICAg
ICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgaGVhZGVyLCBoZWFkZXIudmVjdG9yTGVu
Z3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisKICAgICBpbmxpbmUgQnV0
dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewogICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlKApAQCAtMTIxLDcgKzEzMywxNSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkK
ICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJy
YXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUNvbnRp
Z3VvdXNBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlCisgICAgICAgICAgICAgICAgICAgfHwgKGluaXRpYWxMZW5ndGggJiYgc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgICAg
ICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlh
bExlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMzMsMTUgKzE1Mywy
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAg
ICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwg
MCk7Ci0gICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRl
ckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHN0b3Jh
Z2UtPm1faW5kZXhCaWFzID0gMDsKLSAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIo
KTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpm
cm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVu
Z3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZvaWQqIHRl
bXA7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZl
Y3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwg
MCk7CisgICAgICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdI
ZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1f
c3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRh
LmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAg
ICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTI5
NDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0
Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7Ci0gICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsK
KyAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJy
YXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90
b3R5cGUuZ2V0KCksIEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKKyAgICBtX2FycmF5U3RydWN0dXJl
V2l0aEFycmF5U3RvcmFnZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBl
LmdldCgpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKICAgICBtX2FycmF5U3RydWN0dXJlRm9y
U2xvd1B1dC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSk7CiAgICAgbV9yZWdFeHBNYXRjaGVzQXJyYXlT
dHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwTWF0Y2hlc0FycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90
eXBlLmdldCgpKSk7CiAKQEAgLTQwNyw2ICs0MDgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpo
YXZlQUJhZFRpbWUoSlNHbG9iCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIEpTQXJyYXkgYWxs
b2NhdGlvbnMgdGhhdCBsb2FkIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgZnJvbQogICAgIC8v
IHRoaXMgb2JqZWN0IG5vdyBsb2FkIGEgc3RydWN0dXJlIHRoYXQgdXNlcyBTbG93UHV0LgogICAg
IG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVG
b3JTbG93UHV0LmdldCgpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkpOwog
ICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBvYmplY3RzIHRoYXQgaGF2ZSBpbmRleGVk
IHN0b3JhZ2Ugc3dpdGNoIHRvIHRoZSBzbG93IGtpbmQgb2YKICAgICAvLyBpbmRleGVkIHN0b3Jh
Z2UuCkBAIC00ODIsNiArNDg0LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVTY29wZVN0cnVj
dHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJndW1lbnRzU3RydWN0
dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZSk7
CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJy
YXlTdG9yYWdlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVj
dHVyZUZvclNsb3dQdXQpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Jvb2xl
YW5PYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Nh
bGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxMjk0NTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjcsNiArMTI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fbmFtZVNjb3BlU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2FyZ3VtZW50c1N0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3Ry
dWN0dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUu
CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJy
YXlTdG9yYWdlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0
IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KICAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQ7CiAgICAgICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZTsKICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlOwpA
QCAtMjYyLDcgKzI2Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmUqIG5h
bWVTY29wZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVNjb3BlU3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYXJndW1lbnRzU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmd1bWVudHNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBh
cnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0K
KyAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSBjb25z
dCB7IHJldHVybiBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5nZXQoKTsgfQogICAg
ICAgICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpIHsgcmV0dXJuICZtX2FycmF5U3Ry
dWN0dXJlOyB9CisgICAgICAgIHZvaWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlV2l0aEFycmF5
U3RvcmFnZSgpIHsgcmV0dXJuICZtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgfQog
ICAgICAgICBTdHJ1Y3R1cmUqIGJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBj
YWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Nv
bnN0cnVjdG9yU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tG
dW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZS5nZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTI5NDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMjQgKzEzMiwzOSBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgICAgICAqbmV3QnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYg
YXBwcm9wcmlhdGUuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogY3VycmVudFRhcmdldDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
Y3VycmVudFNvdXJjZTsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAg
ICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAg
ICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygq
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFZhbHVlKCZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlz
IHJpZ2h0LiBXaHkgaXNuJ3QgdGhpcyBwdWJsaWNMZW5ndGgoKT8KICAgICAgICAgICAgICAgICBp
ZiAobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCiAgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGls
ZSAoY291bnQtLSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNv
dXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fYnV0dGVyZmx5
ID0gbmV3QnV0dGVyZmx5OwpAQCAtMTU5LDYgKzE3NCw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgCiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5
IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+Y29udGlndW91cygpLCBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmIChidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKQEAgLTIzNSw2ICsyNTMsMTMgQEAg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBpZiAoaSA+PSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkK
QEAgLTM1Miw2ICszNzcsMjEgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsK
ICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAg
ICAgICBBU1NFUlQobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIDwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKHByb3Bl
cnR5TmFtZSArIDEpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbcHJvcGVydHlOYW1lXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC0zNjIsMTUgKzQwMiwx
OCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbcHJvcGVy
dHlOYW1lXTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAg
ICAgICAgIAorICAgICAgICBKU1ZhbHVlIG9sZCA9IHZhbHVlU2xvdC5nZXQoKTsKKyAgICAgICAg
dmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAg
ICAgICAgCiAgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFz
IG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBsZW5ndGgpIHsKICAgICAg
ICAgICAgIGxlbmd0aCA9IHByb3BlcnR5TmFtZSArIDE7CiAgICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQorICAgICAgICB9IGVsc2UgaWYg
KCFvbGQpIHsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAg
ICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2Jq
ZWN0LCB2YWx1ZSk7CisgICAgICAgICAgICBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9D
b250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFnZSk7CisgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC00NDQsNiArNDg3LDExIEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKIHZvaWQgSlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGhvcnJpYmx5IGlu
ZWZmaWNpZW50LCBhcyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNvbnZlcnNpb25zLiBXZSBjb3VsZCBv
cHRpbWl6ZQorICAgICAgICAvLyB0aGlzIGNhc2UgaWYgd2UgZXZlciBjYXJlZC4KKyAgICAgICAg
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMo
Z2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VB
bHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtNDkxLDkgKzUzOSwxMDQgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgp
Cit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0
dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwg
MCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5lZWRlZExl
bmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxl
bmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPnNldExlbmd0aChwdWJsaWNMZW5n
dGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgbmV3U3RvcmFn
ZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBwdWJsaWNMZW5ndGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICBuZXdTdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIG5ld1N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgbWVtY3B5KAorICAgICAgICBuZXdT
dG9yYWdlLT5tX3ZlY3RvciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgcHVibGljTGVuZ3Ro
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1
dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3U3RvcmFnZTsKK30KKworQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQor
eworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRp
b24oKSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdl
VG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQoreworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgQVNTRVJUKCFzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0KKyAgICAg
ICAgQnV0dGVyZmx5OmZyb21Qb2ludGVyKG1fYnV0dGVyZmx5LT5wb2ludGVyKCkgKyBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIAorICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAg
ICAKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwdWJsaWNMZW5ndGgpOworICAg
IG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgIAor
ICAgIC8vIFNoaWZ0IHRoZSBuYW1lZCBwcm9wZXJ0aWVzIG92ZXIsIGlmIHRoZXJlIGFyZSBzb21l
LgorICAgIHNpemVfdCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgp
OworICAgIGlmIChwcm9wZXJ0eVNpemUpIHsKKyAgICAgICAgbWVtbW92ZSgKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAg
ICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9Cisg
ICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9Db250aWd1b3VzKTsK
KyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUp
OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAKKyAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgd2F5IG1vcmUg
ZWZmaWNpZW50LCBpZiB3ZSBjYXJlZC4KKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAKICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xv
YmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgCkBAIC01MTMs
NiArNjU2LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKIHZv
aWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJy
YXlTdG9yYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
ewogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hUb1Nsb3dQdXRBcnJh
eVN0b3JhZ2UpOwpAQCAtNTU2LDggKzcwNCw3IEBAIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlw
ZShKU0dsb2JhbERhdGEKICAgICBpZiAoc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJl
LCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxE
YXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgIHN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShnbG9i
YWxEYXRhKTsKIH0KIAogYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2so
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTY5MSw2ICs4
MzgsMTIgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgLy8g
VGhlcmUgaXMgYW4gZXh0cmVtZWx5IG9idmlvdXMgY2FzZSB0aGF0IHdlIGNvdWxkIGhhbmRsZSBo
ZXJlIChkZWxldGluZyB0aGUgbGFzdCBlbGVtZW50KQorICAgICAgICAvLyBidXQgSSBkb24ndCBm
ZWVsIGxpa2Ugd3JpdGluZyB0ZXN0cyBmb3IgaXQsIHNvIEknbGwgcHVudCBpdC4KKyAgICAgICAg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICAvLyBGYWxsIHRocm91Z2guCisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhp
c09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTg2NCw2
ICsxMDE3LDEyIEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQor
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBv
YmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC0xMzI1LDYg
KzE0ODQsNTcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAg
IHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwogfQogCit2b2lkIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1
dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgCisgICAgLy8gRm9yIHVzIHRv
IGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxl
bmd0aCwgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5n
dGguCisgICAgQVNTRVJUKGkgPiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgfHwgaSA+PSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIGlmIChpID09IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSAmJiBpIDwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAg
ICBBU1NFUlQoaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAvLyBU
aGlzIGlzIHRoZSBvbmUgY2FzZSB3ZSBjYW4gaGFuZGxlLiBBbmQgd2UgaGFuZGxlIGl0IGJ5IGdy
b3dpbmcgdGhlIGNvbnRpZ3VvdXMKKyAgICAgICAgLy8gc3RvcmFnZS4KKyAgICAgICAgdW5zaWdu
ZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oCisgICAgICAgICAgICB0aW1lc1RocmVlUGx1
c09uZURpdmlkZWRCeVR3byhtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpLAorICAgICAgICAg
ICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwK
KyAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwor
ICAgICAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICBBU1NF
UlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHB1dEJ5SW5kZXhXaXRob3V0QXR0cmlidXRlc1doaWxlQ29udmVy
dGluZ0NvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
SlNPYmplY3Q6OnB1dEJ5SW5kZXhXaXRob3V0QXR0cmlidXRlc1doaWxlQ29udmVydGluZ0NvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmco
KSk7CisgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgaWYgKGlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoaSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSAmJiBpIDwgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgZ2xvYmFsRGF0
YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UsCisgICAgICAgICAgICBnZXROZXdWZWN0b3JMZW5ndGgo
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpLCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCks
IGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcisrOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgIFNwYXJzZUFyYXlWYWx1ZU1hcCogbWFw
ID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICBtYXAtPnB1dEVudHJ5
KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7Cit9CisKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzMzgsNiArMTU0OCwxMCBAQCB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgICAgICAgICBwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxk
VGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZShnbG9iYWxEYXRhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBpZiAoIWkgJiYgIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAg
ICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAxKVswXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAg
ICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpIHsKICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTM0OSw2ICsxNTYzLDExIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMRW5n
dGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFsdWUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAg
IGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdykpCkBAIC0xMzY4LDggKzE1ODcsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1v
ZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZh
bGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisg
ICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICBBU1NFUlQoYXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0g
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0g
TUFYX0FSUkFZX0lOREVYKTsKIApAQCAtMTQ1Myw2ICsxNjc0LDEwIEBAIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0
ZXMpCiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0
YSkpOworICAgICAgICBpZiAoIWkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1
b3VzKGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAg
ICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIDAsIDApKTsKICAgICAgICAgCkBAIC0xNDYxLDYgKzE2ODYsMTUgQEAg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CisgICAgICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAg
ICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1
dGVzKGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMTQ4MywxMiArMTcx
Nyw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNl
IGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3Rk
OjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2Vk
TGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAg
ICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkp
OwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93
LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5n
dGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGgg
PSB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAK
ICAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUwOCw5
ICsxNzM3LDEwIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAg
ICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5n
dGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0
b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1NTgsNiArMTc4OCwyMiBAQCBib29sIEpTT2JqZWN0
OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQg
SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgodW5zaWduZWQgbGVuZ3RoKQoreworICAg
IEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAg
IAorICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpIHsKKyAgICAg
ICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAg
ICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsK
KyAgICB9CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0
aCkKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworfQorCiBC
dXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQo
bmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTU4Niw2ICsxODMyLDEzIEBAIGJvb2wgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCksIDAp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChp
ID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjk0NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEsNiArMTYyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMDcsNiAr
MjA5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE4
LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjMx
LDYgKzIzNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpCisgICAgICAgICAgICAgICAgICAgICYm
IGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgogICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTI0OSw2ICsyNTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDw9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKQorICAgICAgICAgICAgICAgICAgICAmJiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjYwLDE1ICsyNzIsMjYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAg
IEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaSA8PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAg
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYp
OworICAgICAgICAgICAgICAgIGlmIChpID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7
CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAg
ICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVt
cHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTI3OSw2ICszMDIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pmxlbmd0aCgpKTsKQEAgLTI5NSw2ICszMjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmlu
U3BhcnNlTW9kZSgpOwpAQCAtNDk4LDE2ICs1MjYsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIC8vIGFscmVhZHkuCiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0Fy
cmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhn
bG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBj
b252ZXJ0IHRvIGNvbnRpZ3VvdXMgaW5kZXhpbmcgc3RvcmFnZS4gUmV0dXJucyB0cnVlIGlmIGl0
IHdhcyBkb25lLAorICAgICAgICAvLyBvciBmYWxzZSBpZiBpdCBiYWlsZWQgb3V0IGZvciBhbnkg
cmVhc29uLiBBbHNvIHJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgd2FzIGFscmVhZHkKKyAgICAg
ICAgLy8gY29udGlndW91cy4KKyAgICAgICAgYm9vbCBhdHRlbXB0VG9Db252ZXJ0VG9Db250aWd1
b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0
aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIGNyZWF0ZUluaXRp
YWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0
dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICAKQEAgLTU3MywxMSArNjIxLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEFycmF5
U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJ
bml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5l
ZWRlZExlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAgICAg
ICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJik7CiAgICAgICAgIAogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24p
OwogCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNX
aXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUpOwogICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CiAKICAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwpAQCAtNTg4LDcgKzY0
MSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBub3RpZnlQcmVzZW5jZU9mSW5k
ZXhlZEFjY2Vzc29ycyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgYXR0
ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRl
eCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBDYWxs
IHRoaXMgaWYgeW91IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRvIHN1Y2NlZWQgYW5kIHlvdSdyZSBz
dXJlIHRoYXQKKyAgICAgICAgLy8gdGhlIGFycmF5IGlzIGNvbnRpZ3VvdXMuCisgICAgICAgIHZv
aWQgZW5zdXJlQ29udGlndW91c0xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpOwogCisgICAgICAgIGJv
b2wgYXR0ZW1wdFRvQ29udmVydEFycmF5U3RvcmFnZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSAhPSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNB
cnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0
b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQoIXNob3Vs
ZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICAv
LyBPaCwgeW91IGRpZCB0aGlzIGNvbnZlcnNpb24gYmVmb3JlPyBXZWxsLCB5b3UgZG9uJ3QgZ2V0
IHRvIGRvIGl0IGFnYWluLiBCZWNhdXNlCisgICAgICAgICAgICAvLyB0aHJhc2hpbmcgaXMgbmV2
ZXIgZ29vZC4KKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpICYgSGFkQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIC8vIE9oLCB5b3UndmUgdXNlZCBzaGlmdCBhbmQgdW5zaGlmdD8g
Q2hhbmNlcyBhcmUgeW91J2xsIHVzZSBpdCBhZ2FpbiwgYW5kIHdlJ2xsIGhhdmUKKyAgICAgICAg
ICAgIC8vIHRvIGNvbnZlcnQgYmFjay4gTm8gY29udGlndW91cyBhcnJheXMgZm9yIHlvdSEKKyAg
ICAgICAgICAgIGlmIChzdG9yYWdlLT5tX2luZGV4QmlhcykKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29u
dGlndW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIApAQCAtNjEzLDYgKzY5Nyw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihF
eGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBvbGQpOwogICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBkb3VibGVzIGFz
IHB1dERpcmVjdCgpIGJlY2F1c2UgKGEpIGNvbnRpZ3VvdXMgaW1wbGllcyB0aGF0IHRoZXJlIGFy
ZSBub3QgaW5kZXhlZCBzZXR0ZXJzIG9yIGluZGV4ZWQgcmVhZG9ubGllcywgYW5kIChiKSB0aGlz
IGlzIG9ubHkgZm9yIGNhc2VzIHdoZXJlIHdlIGRvbid0IHdhbnQgdGhlIHByb3BlcnR5IHRvIGhh
dmUgYW55IGF0dHJpYnV0ZXMuCisgICAgICAgIHZvaWQgcHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1
dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAogICAgICAgICB2b2lkIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgYm9vbCBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJ
bmRleE1vZGUsIEFycmF5U3RvcmFnZSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhN
b2RlKTsKQEAgLTYyMiw2ICs3MDksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3Jh
Z2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAg
ICAgICB2b2lkIGNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKEpTR2xv
YmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBCdXR0
ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEyOTQ1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMywx
MSArMzIzLDE3IEBAIGJvb2wgU3RydWN0dXJlOjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXIKICAg
ICB9CiB9CiAKLU5vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEluZGV4
aW5nVHJhbnNpdGlvbigpIGNvbnN0Citib29sIFN0cnVjdHVyZTo6bmVlZHNTbG93UHV0SW5kZXhp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5k
ZXhlZEFjY2Vzc2VzKCkKKyAgICAgICAgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRp
bWUoKTsKK30KKworTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJy
YXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFoYXNJbmRleGVkUHJv
cGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwogICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWlu
TWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5n
QUJhZFRpbWUoKSkKKyAgICBpZiAobmVlZHNTbG93UHV0SW5kZXhpbmcoKSkKICAgICAgICAgcmV0
dXJuIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICAKICAgICByZXR1cm4gQWxsb2Nh
dGVBcnJheVN0b3JhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMTI5NDU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVy
Y2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpIGNvbnN0OworICAgICAg
ICBib29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKCkgY29uc3Q7CisgICAgICAgIE5vblByb3BlcnR5
VHJhbnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3Q7CiAgICAg
ICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3Qo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7
IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTI5NDU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRy
aQogLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25z
IG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCiAvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQs
IHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgogZW51bSBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRlQ29udGlndW91cywKKyAgICBTd2l0Y2hUb0Nv
bnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UsCiAgICAgQWxsb2NhdGVTbG93UHV0
QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSwKQEAgLTU3LDEy
ICs1OSwxOSBAQCBpbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5CiBpbmxp
bmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNoICh0cmFuc2l0aW9u
KSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3VvdXM6CisgICAgICAgIEFTU0VSVCghKG9sZFR5
cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpKTsKKyAgICAg
ICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1b3VzOworICAgIGNhc2UgU3dpdGNoVG9Db250
aWd1b3VzOgorICAgICAgICBBU1NFUlQob2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7CisgICAg
ICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNBcnJheVN0b3JhZ2UpIHwgKEhhc0NvbnRpZ3VvdXMg
fCBIYWRBcnJheVN0b3JhZ2UpOwogICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gKG9s
ZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxv
Y2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzU2xv
d1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3Vv
dXMpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFy
cmF5U3RvcmFnZToKICAgICAgICAgQVNTRVJUKG9sZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOwor
ICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgSGFzQ29udGlndW91cykpOwogICAgICAgICByZXR1
cm4gKG9sZFR5cGUgJiB+SGFzQXJyYXlTdG9yYWdlKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7
CiAgICAgY2FzZSBBZGRJbmRleGVkQWNjZXNzb3JzOgogICAgICAgICByZXR1cm4gb2xkVHlwZSB8
IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJh
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24g
MTI5NDU5KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDQsNiArMzA0LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGhhc1R3
b08KICAgICByZXR1cm4gIWhhc1plcm9Pck9uZUJpdHNTZXQodmFsdWUpOwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhUIHZh
bHVlKQoreworICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgLy8gICAo
dmFsdWUgKiAzICsgMSkgLyAyOworICAgIC8vIG9yOgorICAgIC8vICAgKHVuc2lnbmVkKWNlaWwo
dmFsdWUgKiAxLjUpKTsKKyAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFs
IG92ZXJmbG93LgorICAgIHJldHVybiB2YWx1ZSArICh2YWx1ZSA+PiAxKSArICh2YWx1ZSAmIDEp
OworfQorCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhT1MoU09M
QVJJUykKIHVzaW5nIHN0ZDo6aXNmaW5pdGU7CiAjaWYgIUNPTVBJTEVSX1FVSVJLKEdDQzExX0dM
T0JBTF9JU0lORl9JU05BTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165747</attachid>
            <date>2012-09-26 01:20:27 -0700</date>
            <delta_ts>2012-09-26 11:32:34 -0700</delta_ts>
            <desc>more</desc>
            <filename>contiguous_patch_6.diff</filename>
            <type>text/plain</type>
            <size>159906</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBpbmZlciB3aGVuIGluZGV4ZWQgc3RvcmFnZSBpcyBjb250aWd1b3VzLCBhbmQg
b3B0aW1pemUgZm9yIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5o
OgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tUG9p
bnRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cG9pbnRlcik6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6cHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpjb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aGFzQ29udGlndW91cyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNob3J0Q29tcGFj
dGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29u
dmVydFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252
ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0
dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVl
ZHNTbG93UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorCiAyMDEyLTA5LTI1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTI5NDU2KTogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3MtZXZhbC5odG1sIGlzIGZhaWxpbmcgb24gSlNDIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAoKSk7CiAgICAgfQorCisgICAgUGF0Y2hh
YmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgewor
ICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBtYXNr
KSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisjZGVmaW5lIEJ5VmFsSW5mb19oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJD
b2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKSVRT
dHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBKSVRBcnJheU1vZGUgeyBK
SVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsKKworc3RhdGljIGJvb2wgaXNPcHRpbWl6
YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworc3RhdGljIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5
cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJl
dHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAg
IH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAgQnlWYWxJbmZvKCkgeyB9CisgICAgCisg
ICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXAgYmFk
VHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIGludDE2X3QgYmFkVHlwZUp1bXBUb0Rv
bmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgICAgIDogYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQor
ICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgICwgYmFkVHlwZUp1bXBUb0Rv
bmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgo
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXA7CisgICAg
SklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQg
aW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7
CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aDsKKyAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRC
eVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKK3sKKyAgICByZXR1cm4gaW5m
by0+Ynl0ZWNvZGVJbmRleDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCisjZW5kaWYgLy8gQnlWYWxJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDksNiArMjA5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgICAgICAKKyAg
ICAgICAgQnlWYWxJbmZvJiBnZXRCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5z
aWduZWQsIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXg+KG1fYnlWYWxJbmZvcy5iZWdpbigpLCBt
X2J5VmFsSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgIH0KIAogICAgICAg
ICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCiAgICAgICAgIHsKQEAgLTYxMCw2ICs2MTUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6ZV90IHNpemUpIHsg
bV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQogICAgICAgICBzaXplX3QgbnVtYmVy
T2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJbmZv
cy5zaXplKCk7IH0KICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZv
KGludCBpbmRleCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3NbaW5kZXhdOyB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHNldE51bWJlck9mQnlWYWxJbmZvcyhzaXplX3Qgc2l6ZSkgeyBt
X2J5VmFsSW5mb3MuZ3JvdyhzaXplKTsgfQorICAgICAgICBzaXplX3QgbnVtYmVyT2ZCeVZhbElu
Zm9zKCkgY29uc3QgeyByZXR1cm4gbV9ieVZhbEluZm9zLnNpemUoKTsgfQorICAgICAgICBCeVZh
bEluZm8mIGJ5VmFsSW5mbyhzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYnlWYWxJbmZvc1tpbmRl
eF07IH0KIAogICAgICAgICB2b2lkIGFkZEdsb2JhbFJlc29sdmVJbmZvKHVuc2lnbmVkIGdsb2Jh
bFJlc29sdmVJbnN0cnVjdGlvbikKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NTksMTIgKzg1OSwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgog
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2Ug
UE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9w
KCk7CkBAIC05MDgsNiArOTEyLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtOTI0LDExICs5MzEsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAg
ICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hP
TEVfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
OgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzY3LDcgKzEzODAsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6IC8vIFRo
ZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlMZW5ndGgKICAgICAgICAgICAg
IC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdl
IG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1v
ZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkBAIC0xNDEwLDkgKzE0
MjUsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0K
ICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkg
ewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
KyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAg
ICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2
aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBBcnJheTo6TW9kZSBmcm9tT2Jz
ZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5wcm9maWxlZDsK
ICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0g
QXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkK
LSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTsgLy8gRklYTUU6
IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1dCBtb2RlLCBvciBub3QuIFRo
aXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9D
b250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBkb24ndCBrbm93IHdoZXRoZXIg
dG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1ZXNzaW5nIHRoYXQgd2UgZG9u
J3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CisgICAg
Y2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5
U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkNvbnRpZ3Vv
dXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAg
ICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
IDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91
c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250
aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9Ib2xlIDogQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5U3Rv
cmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJy
YXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CkBAIC01Niw2ICs2MiwyMCBA
QCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgY2FzZSBhc0Fy
cmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3Jh
Z2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgICAgICByZXR1cm4g
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJyYXk6OkNvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8
IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgor
ICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJj
ZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9D
b250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgaWYg
KGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKICAgICBjYXNl
IGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUt
Pm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwyMiBAQCBib29sIG1vZGVBbHJl
YWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAg
ICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNU
b1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgorICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhh
c0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworCiAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKQEAgLTE3
MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAKLSAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
TU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CkBAIC0yMjUsNiArMjYyLDI0
IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0
dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJu
ICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAi
Q29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKKyAgICAgICAg
cmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091dE9mQm91bmRzIjsKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0
aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6
CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9U
YWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6
CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMi
OwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJBcnJheVN0
b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKQEAgLTI0OSwxMCAr
MzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAg
ICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwogICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAg
ICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7Cisg
ICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQmxhbmtU
b0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QmxhbmtU
b1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb1Nsb3dQdXRBcnJh
eVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7Cisg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhD
b250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAg
ICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTI5
NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsKICAgICBTdHJpbmcsCiAgICAg
CiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQgc3RvcmFnZSB3aGVyZSB0aGUg
Y2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRpZ3VvdXMsCisgICAgQ29udGln
dW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQ29u
dGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMsCisg
ICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAgIFBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3RvcmFnZSwKICAgICBBcnJheVN0
b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKQEAgLTY4LDggKzc3LDE2IEBA
IGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdo
ZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBCbGFua1RvQ29udGlndW91cywK
ICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdl
LAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisgICAgCisgICAgLy8gTW9k
ZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9yYWdlLiBUaGVzZSBkb24ndCBi
ZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3RvcmFnZSBDU0UuCisgICAgQ29u
dGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3Rv
cmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKICAg
ICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAtODksNiArMTA2LDMyIEBAIGVu
dW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCiAKIC8v
IEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgorI2RlZmluZSBO
T05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
QXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOiAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9DT05USUdVT1VTX01PREVTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05fQVJSQVlfQ09OVElHVU9VU19N
T0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91czogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQ09OVElH
VU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c091
dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICBcCisgICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKICNkZWZpbmUgTk9OX0FS
UkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5
OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgIFwK
QEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVmaW5lIEFMTF9BUlJBWV9TVE9S
QUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBOT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQVJS
QVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCi0jZGVmaW5lIEFSUkFZX1NUT1JBR0VfVE9fSE9M
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlTdG9yYWdl
VG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKICNkZWZpbmUgSU5fQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFSUkFZX1NU
T1JBR0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAg
XAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5l
IEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hv
bGUKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKIAogLy8gTmV4dDogaGVscGVycyBm
b3Igc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FS
UkFZX1NUT1JBR0VfTU9ERVMgXAotICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVMgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzCisjZGVmaW5l
IEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFM
TF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZF
Q1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKICAgICBFRkZFQ1RG
VUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUgU0xPV19QVVRfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgIFwKKyNkZWZpbmUgU0xPV19QVVRfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgXAogICAgIEFycmF5OjpCbGFua1RvU2xvd1B1
dEFycmF5U3RvcmFnZQorI2RlZmluZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVMgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2UKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgY2FzZSBBTExfRUZGRUNUVUxfQVJSQVlfU1RPUkFHRV9NT0RF
UzogICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX0VGRkVDVEZVTF9NT0RF
UworCisvLyBGaW5hbGx5OiBoZWxwZXJzIGZvciBwb2x5bW9ycGhpYyBhcnJheSBhY2Nlc3Nlcy4K
KyNkZWZpbmUgUE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJy
YXlTdG9yYWdlCisjZGVmaWxlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVMKIAogQXJyYXk6
Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFr
ZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhB
cnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBh
cnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNU
RlVMX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTYsNyAr
MjE2LDkgQEAgaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZAogaW5saW5l
IGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNo
IChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzoKICAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBi
b29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNB
Y2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7
CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VP
VVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoK
ICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4ICsyNDksNTYgQEAgaW5saW5lIGJvb2wgaXNT
bG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3Rv
cmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3Vv
dXM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGlu
ZSBib29sIG1heVN0b3JlVG9Ib2xlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgog
ICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xP
V19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGln
dW91c09yQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bmxpbmUgYm9vbCBtb2RlSXNQb2x5bW9ycGhpYyhBcnJheTo6TW9kZSBtb2RlKQoreworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
fQogCitpbmxpbmUgYm9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhBcnJheTo6TW9k
ZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChhcnJheU1vZGUsIG1vZGVJc1BvbHlt
b3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBw
b2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2Rl
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CkBAIC0yMDQs
NiArMzA3LDcgQEAgaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcgogICAg
IGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMjQ5LDcgKzM1MywxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vCiAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9DT05USUdV
T1VTX01PREVTOgogICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAg
Y2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMjU5LDcgKzM2Nyw4IEBAIGlubGluZSBib29sIG1vZGVTdXBw
b3J0c0xlbmd0aChBcnJheTo6TW8KIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNo
ZWNrKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBB
TExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVM
X01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgogICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgpAQCAtMjczLDcgKzM4Miw3IEBAIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVj
dHVyZUNoZWNrKEEKIGlubGluZSBib29sIGlzRWZmZWN0ZnVsKEFycmF5OjpNb2RlIG1vZGUpCiB7
CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NzEsNiArMTU3MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJy
YXlTdG9yYWdlVG9Ib2xlOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXgg
YXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUpLCBPcElu
Zm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDAp
KSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKQEAgLTE1OTQs
NiArMTU5Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5
UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsNyArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShhcnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4
KCksIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAg
ICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRy
LT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5l
ZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICBpZiAo
c3RvcmFnZSA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
QEAgLTEzNywxNyArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAg
Ymxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBB
cnJheVB1c2g6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEo
KSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5v
ZGUuY2hpbGQyKCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3Bl
cmF0aW9uKG5vZGUuY2hpbGQxKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlv
bihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAxKTsKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7Cisg
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XTsKICAgICAgICAgICAgIApAQCAtMzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJy
YXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRl
eCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFn
ZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNrQXJyYXko
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBh
cnJheSwgTm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkg
PSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGgucmVmKGFycmF5KTsKIAogICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJyYXlNb2Rl
KSkgewotICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJ
bmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBOb05v
ZGUpOworICAgICAgICAgICAgbV9ncmFwaC5yZWYoaW5kZXgpOworICAgICAgICAgICAgTm9kZSBh
cnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBp
bmRleCk7CiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3Mg
dXNlZCBhcyBhIGJ1dHRlcmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQg
dHdpY2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXgg
YXJyYXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0
ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2Us
IHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24o
RWRnZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAgICAgewog
ICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0g
Jm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHIt
PmFycmF5TW9kZSgpID09IEFycmF5OjpGb3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNoIChub2Rl
UHRyLT5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAg
ICAgICAgICAgIE5vZGUgZm9yY2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdp
bik7CiAgICAgICAgICAgICBmb3JjZUV4aXQucmVmKCk7CiAgICAgICAgICAgICBOb2RlSW5kZXgg
Zm9yY2VFeGl0SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ss
IGZvcmNlRXhpdEluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKCFtb2RlSXNTcGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUoKSkpCisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHN0b3Jh
Z2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2lu
LCBiYXNlLmluZGV4KCkpOwotICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVT
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2hp
bGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3Jh
Z2UpOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9
IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmlnaW4sIGJh
c2UuaW5kZXgoKSwgaW5kZXguaW5kZXgoKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBO
b05vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgp
ID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9CiAgICAg
fQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDEy
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNf
Q09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9E
RVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2Fz
ZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJl
dHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyOTU5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMDksNiArMjEwOSwxMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJl
ZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJl
ZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZyk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNl
czsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlS
ZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0
LmdwcigpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
aG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmIG5vZGUs
IEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZh
bHVlUmVnLCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBu
b2RlLmFycmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgCisgICAgaWYgKCFtYXlTdG9yZVRvVGFpbChhcnJheU1vZGUpKSB7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJbkJvdW5kc0Fj
Y2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJlZyk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgaW5C
b3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBTY2Fs
ZVB0cikpOworICAgIAorICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKKyAgICByZXR1cm4gc2xvd0Nh
c2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0
eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcp
Cit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRz
KTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMp
OworCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3Jl
bWVudCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlN
b2RlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFr
ZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxsIGltbWVk
aWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0
CisgICAgICAgIC8vIHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAg
ICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBh
dGgsIHdlIHdvdWxkIGludmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0
IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdy
ZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSksIHRlbXBS
ZWcpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wUmVnKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
Mih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQg
YmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1faml0
LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAg
ICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgICAgICAgICAgCisgICAg
Ly8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1
ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBu
b2RlLm9wKCk7CkBAIC0yNTk1LDYgKzI2OTksNTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEluMzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgU2NhbGVQdHIpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAg
ICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExf
RUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAg
IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0
b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlf
U1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI2MTUsNiArMjc2Myw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwpAQCAtMjYyNywyMSArMjc3Niw1OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5
VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOwor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0LmdwcigpKTsKLQorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMp
OwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJl
Zyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBm
YWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVz
dWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwo
bm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3Jh
Z2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2gu
aXNTZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFz
QXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxl
QXJyYXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VS
ZWcsIHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxU
aHJvdWdoLmlzU2V0KCkpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3Vn
aCk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxBcnJheUludCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3NjIsNTMgKzI5NDks
MTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
Ci0gICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgYmV5b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3
cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0hvbGVWYWx1ZTsKLSAgICAgICAgICAg
IGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgdW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUg
YmFzZWxpbmUgSklUCi0gICAgICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0
aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAotICAgICAgICAgICAg
ICAgIC8vIHByb2ZpbGluZy4KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0
QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0
IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ug
d291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1
dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2Un
cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KLSAg
ICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBt
aWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVn
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5l
ZWRVcGRhdGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBub3RIb2xlVmFsdWUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsK
ICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
cyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKAorICAgICAg
ICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFs
dWVSZWcsCisgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwo
dGVtcG9yYXJ5LCBub2RlKSk7CiAKLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0
aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
LQotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICAgICAg
ICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIXNsb3dDYXNl
cy5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcy
ICszOTAsMTAwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAg
ICBBU1NFUlQoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAKKyAg
ICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAgCiAgICAgc3dpdGNo
IChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBzdHJ1Y3R1
cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKyAgICBjYXNlIEJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBkZXNpcmVkSW5kZXhp
bmdUeXBlTWFzayA9IEhhc0NvbnRpZ3VvdXM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxh
bmtUb0FycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNB
cnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxhbmtUb1Nsb3dQdXRBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJyYXlTdG9y
YWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdU
eXBlTWFzayA9IEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOworICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7
CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgIG1faml0Lmxv
YWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICAKLSAgICAgICAgLy8g
V2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkg
c3RvcmFnZS4KLSAgICAgICAgSW5kZXhpbmdUeXBlIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0K
LSAgICAgICAgICAgIGlzU2xvd1B1dEFjY2Vzcyhub2RlLmFycmF5TW9kZSgpKSA/IChIYXNBcnJh
eVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSA6IEhhc0FycmF5U3RvcmFnZTsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZElu
ZGV4aW5nVHlwZU1hc2spKTsKKyAgICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0
IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdlLgorICAgIEluZGV4aW5nVHlwZSBkZXNp
cmVkSW5kZXhpbmdUeXBlTWFzayA9CisgICAgICAgIGlzU2xvd1B1dEFjY2Vzcyhub2RlLmFycmF5
TW9kZSgpKSA/IChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSA6IEhh
c0FycmF5U3RvcmFnZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0
LmJyYW5jaFRlc3Q4KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVk
SW5kZXhpbmdUeXBlTWFzaykpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHRlbXBHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwogICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgIHNs
b3dDYXNlLmxpbmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIC8vIE5leHQgY2hlY2sgdGhh
dCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBk
b2VzLAotICAgICAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKKyAgICAv
LyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBh
Y2Nlc3Nlcy4gSWYgaXQgZG9lcywKKyAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgor
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKICAgICAgICAgCi0gICAgICAg
IC8vIE5vdyBjYWxsIG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIC8vIE5vdyBjYWxsIG91dCB0byBj
cmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVt
cEdQUik7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgY2FzZSBCbGFua1Rv
Q29udGlndW91czoKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1
b3VzLCB0ZW1wR1BSLCBiYXNlUmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbGFua1Rv
QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBi
YXNlUmVnKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKLQotICAg
ICAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgc3RydWN0dXJlIGJlY2F1c2Ugc2ls
ZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKLSAgICAgICAgLy8gdGVtcG9yYXJpZXMuIE5vciB3
b3VsZCBpdCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRoZXIgd2F5IHdlJ3JlIHRhbGtp
bmcKLSAgICAgICAgLy8gYWJvdXQgYSBsb2FkLgotICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5
LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdh
bnRlZCB0byBnZXQuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFja3dhcmRzIHNw
ZWN1bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgCi0gICAgICAgIC8vIGJ5
dGVjb2RlIG9wZXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVp
bmcgcmVleGVjdXRlZC4KLSAgICAgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0
aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSkpOwotICAgICAg
ICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHN0b3JhZ2VSZXN1bHQodGVt
cEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKLSAgICB9CisgICAgY2FzZSBC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZywg
cHJvcGVydHlSZWcpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisKKyAgICAvLyBBbGFzLCB3
ZSBuZWVkIHRvIHJlbG9hZCB0aGUgc3RydWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRv
ZXMgbm90IHNhdmUKKyAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBm
b3IgaXQgdG8gZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZworICAgIC8vIGFib3V0IGEg
bG9hZC4KKyAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAg
ICAgICAgCisgICAgLy8gRmluYWxseSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFy
cmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQgdG8gZ2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGlzIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0
aGUgCisgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJh
eWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgorICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBh
cnJheWlmaWNhdGlvbiBpcyBub3QgdXNlci12aXNpYmxlLgorICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1f
aml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpKTsKKyAgICAgICAgCisgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7
CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJ
bmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE0OSw2ICsyMTQ5LDQwIEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAg
ICAgdm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgCisg
ICAgTUFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwoTm9k
ZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVn
LCBHUFJSZWcgcmVzdWx0UmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGls
ZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3Bl
cnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7CisgICAgCisgICAg
Ym9vbCBwdXRCeVZhbFdpbGxOZWVkRXh0cmFSZWdpc3RlcihBcnJheTo6TW9kZSBhcnJheU1vZGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICAvLyBGb3IgQXJy
YXlTdG9yYWdlLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3Igc3RvcmVzIHRvIGhvbGVzIGV4Y2Vw
dCBpZgorICAgICAgICAvLyB3ZSdyZSBpbiBTbG93UHV0IG1vZGUuCisgICAgICAgIGNhc2UgQVJS
QVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9y
YXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgeworICAgICAgICBpZiAoIXB1dEJ5VmFs
V2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkpCisgICAgICAgICAgICByZXR1cm4gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgCisgICAgICAgIEdQUlRlbXBvcmFyeSByZWFsVGVtcG9yYXJ5
KHRoaXMpOworICAgICAgICB0ZW1wb3JhcnkuYWRvcHQocmVhbFRlbXBvcmFyeSk7CisgICAgICAg
IHJldHVybiB0ZW1wb3JhcnkuZ3ByKCk7CisgICAgfQorICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdp
c3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5
LCBub2RlLmFycmF5TW9kZSgpKTsKKyAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0
ZW1wUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5U3RvcmFn
ZVB1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJS
ZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7CisgICAgCiAg
ICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPblN0cmluZyhOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25JbmRleCA9IDA7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAg
IG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9
IDA7CiAgICAgCkBAIC03MzgsNiArNzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGls
ZShDb2RlUHRyKiBmdW4KICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHVi
SW5mb3MobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUo
KTsgKytpKQogICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlU
b1N0dWJJbmZvKG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIp
OworICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0
aW9uSW5mby5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFk
VHlwZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZh
bENvbXBpbGF0aW9uSW5mb1tpXS5iYWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBkb25lVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW2ldLmRvbmVUYXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0
aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tp
XS5zbG93UGF0aFRhcmdldCk7CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVz
cyA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1
cm5BZGRyZXNzKTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkg
PSBCeVZhbEluZm8oCisgICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVj
b2RlSW5kZXgsCisgICAgICAgICAgICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9baV0uYXJyYXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGJhZFR5cGVKdW1wLCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cihyZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0K
ICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAg
Q2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHVi
SW5mbyYgaW5mbywgTGlua0J1ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1
Y3QgQnlWYWxDb21waWxhdGlvbkluZm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygp
IHsgfQorICAgICAgICAKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQpCisgICAgICAgICAgICA6IGJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFk
VHlwZUp1bXApCisgICAgICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgICAg
ICAsIGRvbmVUYXJnZXQoZG9uZVRhcmdldCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgICAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGVKdW1wOworICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIHNsb3dQYXRoVGFyZ2V0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXR1
cm5BZGRyZXNzOworICAgIH07CisKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9u
SW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2lu
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7CkBAIC0zNDgsNiAr
MzY3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZz
ZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVy
ZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZVB1dEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogICAgICAgICB7CkBAIC0z
OTcsNiArNDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBj
b3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zm
c2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVD
aGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FsbEZy
YW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1
Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5BZGRyZXNzUHRyLCBib29sIGRpcmVj
dCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJ
bmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5
TW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFtcG9saW5l
U3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChK
U0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwpAQCAtNDUyLDYgKzQ4OCwy
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gs
IEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JC
eXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3Rl
cklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOworICAgICAg
ICAKKyAgICAgICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJl
Z1QwLiByZWdUMiBjb250YWlucyBpbmRleGluZyB0eXBlLgorICAgICAgICAvLyBQcm9wZXJ0eSBp
cyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuCisg
ICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93
IGNhc2VzLiBGYWxsLXRocm91Z2gKKyAgICAgICAgLy8gY2FzZSBjb250YWlucyByZXN1bHQgaW4g
cmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2ZpbGVkLgorICAgICAgICBKdW1wTGlzdCBlbWl0
Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7
CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkg
aXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5
cGUuCisgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJv
cGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCisgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2Ug
aXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KKyAgICAgICAg
Ly8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3Vv
dXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAg
ICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKTsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJl
RmluYWwsIEtub3duTm90RmluYWwgfTsKIApAQCAtODcwLDYgKzkyMiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAgICAgVmVjdG9y
PExhYmVsPiBtX2xhYmVsczsKICAgICAgICAgVmVjdG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0aW9u
SW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbzsKKyAgICAgICAgVmVjdG9yPEJ5
VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0
b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8+IG1f
bWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9q
bXBUYWJsZTsKQEAgLTg3OSw2ICs5MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICB1bnNpZ25lZCBtX3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleDsK
ICAgICAgICAgdW5zaWduZWQgbV9jYWxsTGlua0luZm9JbmRleDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyOTU5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NTksMTAgKzU1OSwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVGCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFj
YW5CZU9wdGltaXplZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKSAgICAKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUt
PmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBhcnJheVByb2ZpbGVTYXcoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUg
Y2FwYWJpbGl0eSkKK3sKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEh
KHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8
IGNhcGFiaWxpdHkpIHwgYXNBcnJheU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9k
ZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYg
KGFycmF5UHJvZmlsZVNhdyhwcm9maWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1
cm4gSklUQXJyYXlTdG9yYWdlOworICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NiArOTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAg
dW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNp
Z25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBA
IC0xMTEsMTcgKzExMiw1NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0
aW9uCiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVy
bywgcmVnVDApKTsKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9m
aWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xv
d0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBM
YWJlbCBkb25lID0gbGFiZWwoKTsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFk
VHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29u
dGlndW91cykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSkpOworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIp
LCByZWdUMCk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJ
bmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0
UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0MywxNyAr
MTg0LDEwMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAg
bm90U3RyaW5nLmxpbmsodGhpcyk7CiAgICAgbm9uQ2VsbC5saW5rKHRoaXMpOwogICAgIAotICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawotICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKKyAgICBzd2l0Y2ggKGNob29zZUFycmF5TW9kZShj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkgeworICAgIGNhc2UgSklUQ29udGlndW91
czoKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
TGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNl
LCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAg
ICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3Qp
OworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
c2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQog
Cit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQor
eworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+YmVn
aW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJy
YXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFi
ZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29k
ZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9
IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAo
IkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQg
JXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAg
IAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSwgYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
cmV0dXJuQWRkcmVzcywgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7Cit9CisKK3ZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5iZWdpbigpICsgYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
KyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1
b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAg
CisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9T
bG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25M
YWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUg
cHV0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAg
ICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lLCBieVZhbEluZm8tPnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhyZXR1cm5BZGRy
ZXNzLCBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0
ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgRmluYWxPYmplY3RNb2RlIGZpbmFsT2Jq
ZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwpAQCAtMjI2LDcg
KzM1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAg
ICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
dW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmls
ZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEp
OwpAQCAtMjM0LDEwICszNTgsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUo
cmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
SklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVP
ZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVn
VDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250
aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIAog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAg
SnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgTGFiZWwg
c3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2Nh
bGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgb3V0T2ZCb3VuZHMu
bGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZSwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVT
cGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QxLCByZWdUMyk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3Vs
dCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKIAogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKIApAQCAtMjQ3LDggKzQzNCwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAg
CiAgICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVT
cGVjaWFsQ2FzZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpLCByZWdU
Myk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMyk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgIGJyYW5jaDMyKEJlbG93LCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtU
byhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qx
KTsKQEAgLTI1Nyw4ICs0NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3Ry
dWN0aW9uCiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBlbmQu
bGluayh0aGlzKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwg
cmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNj
ZXNzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjcwLDEzICs0NjAsMjEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW4g
dmVjdG9yIGNoZWNrCisgICAgLy8gVGhlc2UgbmV4dCB0d28gY2hlY2tzIGhhdmUgZGlmZmVyZW50
IG1lYW5pbmdzIGFjY29yZGluZyB0byBhcnJheSBtb2RlLgorICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBs
YWJlbCgpOwogCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlzLCBjdGlfb3Bf
cHV0X2J5X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAg
ICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIpOwogICAgIHN0
dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1QyKTsKLSAgICBzdHViUHV0QnlW
YWxDYWxsLmNhbGwoKTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsK
KworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNs
b3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbElu
c3RydWN0aW9uSW5kZXgrKzsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2luZGV4KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MTQsNiArMjQxNCwzMCBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJl
dHVyblZhbHVlOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXND
ZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJl
c3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwg
YXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAg
ICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pT
U3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkp
IHsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9z
dHJpbmcpKTsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRl
eChjYWxsRnJhbWUsIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0
KGNhbGxGcmFtZSwgaSk7CisgICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAg
ICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2Uq
PihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIg
cHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUo
Y2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0
eSk7fQorfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5
X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yNDIz
LDM1ICsyNDQ3LDM3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8K
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwogICAg
IAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmlu
ZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCkt
PmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVl
KGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9
IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUp
ICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9S
RVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4
KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gQXR0ZW1w
dCB0byBvcHRpbWl6ZS4KKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJh
bWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICBBU1NFUlQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOworICAgICAgICBBU1NFUlQo
IWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChpc09wdGltaXph
YmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgICAgIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ3R5cGUoaW5kZXhpbmdUeXBlKTsK
KyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1Ms
IGFycmF5TW9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFs
dWUuZ2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KKyAgICAKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IFNUVUJfUkVUUlVOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChpc05hbWUoc3Vic2NyaXB0
KSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBq
c0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7
Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwotICAgIH0KKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1
YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Ci0gICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlW
YWwoYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUUlVOX0FERFJFU1MpOworICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAgICAgCkBAIC0yNTAyLDE3ICsyNTI4LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2Rl
ZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAot
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3N0YXRpYyB2b2lkIHB1
dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBz
dWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxG
cmFtZTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERh
dGE7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVl
KCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgp
OwotICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOwotCiAg
ICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3Qg
aSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0
KCkpIHsKQEAgLTI1MzMsNiArMjU1MCw1MSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cF9wdXRfYnlfdmFsCiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVy
dHksIHZhbHVlLCBzbG90KTsKICAgICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUo
c3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xvYmFs
RGF0YTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7CisK
KyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgewor
ICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7CisgICAg
ICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZv
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+YnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7
CisgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAg
ICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAg
ICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZShpbmRleGluZ1R5cGUpOworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8u
YXJyYXlNb2RlKQorICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RV
Ql9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CisKKyAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOworfQorCitERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcF9wdXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZS
QU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1l
LmNhbGxGcmFtZTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmds
b2JhbERhdGE7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNW
YWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgp
OworICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZh
bHVlKTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw2ICsz
NzAsNyBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3Bf
Z2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
ICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWls
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVl
IEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOworICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2dl
bmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpT
VmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9p
bihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1
ZSBKSVRfU1RVQiBjdGlfb3BfaW5zdGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKQEAgLTQ0Niw2ICs0NDcsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9T
VFVCIGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4KFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3Rp
X29wX3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0ZXJf
c2V0dGVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRp
b24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIF9s
bGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVb
dDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0MiwgdDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJy
YXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwg
Lm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRpeiB0MiwgKElzQ29udGlndW91cyB8IEhhc0Fy
cmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpLCAub3BHZXRBcnJheUxlbmd0aFNs
b3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MQogICAgIGxvYWRwIDY0W1BCLCBQQywgOF0s
IHQyCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKQEAgLTExNDcsMTQg
KzExNDcsMjQgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4
XSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MSkKICAgICBsb2FkaXMgMjRbUEIsIFBD
LCA4XSwgdDMKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykK
ICAgICBzeGkycCB0MSwgdDEKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0
MworICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cwor
CisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6
bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaXMgOFtQQiwgUEMs
IDhdLCB0MAorICAgIGxvYWRwIFt0MywgdDEsIDhdLCB0MgorICAgIGptcCAub3BHZXRCeVZhbERv
bmUKKworLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3Rv
cmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGJpYWVx
IHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVu
Z3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKICAg
ICBsb2FkcCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QzLCB0MSwgOF0sIHQyCiAgICAgYnRweiB0
MiwgLm9wR2V0QnlWYWxTbG93CisKKy5vcEdldEJ5VmFsRG9uZToKICAgICBzdG9yZXAgdDIsIFtj
ZnIsIHQwLCA4XQogICAgIGxvYWRwIDQwW1BCLCBQQywgOF0sIHQwCiAgICAgdmFsdWVQcm9maWxl
KHQyLCB0MCkKQEAgLTEyMjYsMjkgKzEyMzYsNTUgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAg
ICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVyZVt0MV0sIHQyCiAgICAgbG9hZHAgMzJbUEIsIFBD
LCA4XSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6IHQyLCBIYXNB
cnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdwogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0
MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDIsIC5vcFB1dEJ5VmFsU2xv
dykKLSAgICBzeGkycCB0MiwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAs
IHQzLCAub3BQdXRCeVZhbFNsb3cpCisgICAgc3hpMnAgdDMsIHQzCiAgICAgbG9hZHAgSlNPYmpl
Y3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hl
YWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xv
dwotICAgIGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdLCAub3BQdXRCeVZh
bEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgotICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhd
LCB0MwotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDMsIHQxKQorICAgIGJ0aXogdDIsIEhh
c0NvbnRpZ3VvdXMsIC5vcFB1dEJ5VmFsTm90Q29udGlndW91cworICAgIAorICAgIGJpYWVxIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGln
dW91c1N0b3JlUmVzdWx0OgorICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUodDIsIHQxKQorICAgIHdyaXRlQmFycmllcih0MSkKKyAgICBzdG9y
ZXAgdDEsIFt0MCwgdDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1
b3VzT3V0T2ZCb3VuZHM6CisgICAgYmlhIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5k
ZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlh
ZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JM
ZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBpZiBWQUxVRV9QUk9GSUxFUgorICAgICAg
ICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MgorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxl
OjptX21heVN0b3JlVG9Ib2xlW3QyXQorICAgIGVuZAorICAgIGFkZGkgMSwgdDMsIHQyCisgICAg
c3RvcmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVi
bGljTGVuZ3RoW3QwXQorICAgIGptcCAub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdAor
Cisub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdl
LCAub3BQdXRCeVZhbFNsb3cKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAg
IGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdLCAub3BQdXRCeVZhbEFycmF5
U3RvcmFnZUVtcHR5Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxv
YWRpcyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQx
KQogICAgIHdyaXRlQmFycmllcih0MSkKLSAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6bV92
ZWN0b3JbdDAsIHQyLCA4XQorICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0
MCwgdDMsIDhdCiAgICAgZGlzcGF0Y2goNSkKIAotLm9wUHV0QnlWYWxFbXB0eToKKy5vcFB1dEJ5
VmFsQXJyYXlTdG9yYWdlRW1wdHk6CiAgICAgaWYgVkFMVUVfUFJPRklMRVIKLSAgICAgICAgc3Rv
cmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0M10KKyAgICAgICAgbG9hZHAg
MzJbUEIsIFBDLCA4XSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlT
dG9yZVRvSG9sZVt0MV0KICAgICBlbmQKLSAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1W
YWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJ
bmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0
CisgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXSwgdDEKKyAg
ICBhZGRpIDEsIHQxCisgICAgYmllcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIHN0b3Jl
aSB0MSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQorICAgIGJpYiB0Miwg
LXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0
MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0
MQogICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
OjptX3B1YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAg
IGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xv
dzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw5IEBAIGVu
ZAogCiAjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCiBjb25zdCBJ
c0FycmF5ID0gMQorY29uc3QgSGFzQ29udGlndW91cyA9IDIKIGNvbnN0IEhhc0FycmF5U3RvcmFn
ZSA9IDgKLWNvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorY29uc3QgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSA9IDE2CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDEy
OTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFz
ZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKICAgICB9CiAgICAgCisg
ICAgLy8gVGhpcyBtZXRob2QgaXMgaGVyZSBub3QganVzdCBiZWNhdXNlIGl0J3MgaGFuZHksIGJ1
dCB0byByZW1pbmQgeW91IHRoYXQKKyAgICAvLyB0aGUgd2hvbGUgcG9pbnQgb2YgYnV0dGVyZmxp
ZXMgaXMgdG8gZG8gZXZpbCBwb2ludGVyIGFyaXRobWV0aWMuCisgICAgc3RhdGljIEJ1dHRlcmZs
eSogZnJvbVBvaW50ZXIoY2hhciogcHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8QnV0dGVyZmx5Kj4ocHRyKTsKKyAgICB9CisgICAgCisgICAgY2hhciogcG9pbnRl
cigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyB9CisgICAgCiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhp
bmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVy
KCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4
aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQpA
QCAtNzAsOSArNzksMTYgQEAgcHVibGljOgogICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRl
eGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9
CiAgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ug
cHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVy
dHlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKTsgfQorICAgIHVpbnQzMl90IHZlY3Rv
ckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9Cisg
ICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIt
PnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1aW50
MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlci0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVlKTsgfQor
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0b3JhZ2Uq
IGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7
IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVybiBpbmRl
eGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+ID4oKTsgfQogICAgIAogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQg
aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjk1
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0g
ICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsK
ICAgICBBU1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0
eShzdHJ1Y3R1cmUpKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBi
ZSB3aXNlIHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hp
Y2gKQEAgLTE2Myw3ICsxNjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hp
ZnQoU3RyCiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGlu
Z0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5
U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVy
dHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhN
RTogU2VlIGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxMCArNDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJl
Q2FwYWNpdAogCiBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNB
cnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAg
ICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdU
eXBlLmgJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIHR5cGVkZWYg
dWludDhfdCBJbmRleGluZ1R5cGU7CiAKIC8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5j
ZSBvZiBjYXBhYmlsaXRpZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAg
ICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3Vv
dXMgICAgICAgICAgICA9IDI7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3Rv
cmFnZSAgICAgICAgICA9IDg7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRB
cnJheVN0b3JhZ2UgICA9IDE2OwogCkBAIC00Miw5ICs0MywxMSBAQCBzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkCiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0
eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAg
ICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aENvbnRp
Z3VvdXMgICAgICAgICAgPSBIYXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAgID0gSGFzQXJyYXlTdG9yYWdlOwogc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0g
SGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlD
bGFzcyAgICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7IC8vIEknZCB3YW50IHRvIGNhbGwg
dGhpcyAiQXJyYXkiIGJ1dCB0aGlzIHdvdWxkIGxlYWQgdG8gZGlzYXN0cm91cyBuYW1lc3BhY2Ug
cG9sbHV0aW9uLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhDb250aWd1b3Vz
ICAgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgICAgPSBJc0FycmF5IHwgSGFz
QXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAg
LTUyLDYgKzU1LDEwIEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AK
ICAgICBOb25BcnJheTogICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5Q2xhc3MK
IAorI2RlZmluZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUyBcCisgICAgTm9uQXJyYXlX
aXRoQ29udGlndW91czogICAgICAgICAgIFwKKyAgICBjYXN0IEFycmF5V2l0aENvbnRpZ3VvdXMK
KwogI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMgXAogICAg
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2Ug
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQpAQCAtNzYsNiArODMsMTEgQEAgc3RhdGljIGlu
bGluZSBib29sIGhhc0luZGV4aW5nSGVhZGVyKEluZAogICAgIHJldHVybiBoYXNJbmRleGVkUHJv
cGVydGllcyh0eXBlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gIShpbmRleGluZ1R5cGUgJiBI
YXNDb250aWd1b3VzKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3RvcmFnZShJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogewogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUg
JiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyOTU5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTUsNiArMzk1LDE2IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCFsZW5ndGgtLSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwor
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAtNDUxLDYgKzQ2MSwyNSBAQCB2b2lkIEpTQXJyYXk6
OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChs
ZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBp
ZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgbGVuZ3Ro
LCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9
IGxlbmd0aCgpOwogICAgICAgICBpZiAoYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9s
ZShleGVjLCBvbGRMZW5ndGgsIHZhbHVlLCB0cnVlKSkgewpAQCAtNTc5LDYgKzYwOCwxOSBAQCB2
b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgY2FzZSBBcnJheUNs
YXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICBpZiAoIW1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBxc29ydChtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCksIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
LCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAg
ICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xv
YmFsRGF0YSgpKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwpAQCAtNjA4LDYgKzY1MCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydE51
bWVyaWMoRXhlY1N0YXRlKiBleGUKICAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGlu
ZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KICAgICAgICAgcXNvcnQoc3Rv
cmFnZS0+bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21w
YXJlTnVtYmVyc0ZvclFTb3J0KTsKICAgICAgICAgCisgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRD
b250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTYxNiw4NiArNjU5LDExMSBAQCB2
b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogfQogCi12b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6c2hvcnRDb21wYWN0ZWRWZWN0b3IoV3JpdGVCYXJy
aWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpCiB7Ci0gICAgQVNT
RVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICBpZiAoIXJl
bGV2YW50TGVuZ3RoKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29udmVydGluZyBK
YXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0
IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KKyAgICAvLyBUaGlzIGlzIGEg
Y29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlz
b24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAgIC8vIGJ1ZmZlci4g
QmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBo
YXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgLy8gcmFuZG9tIG9y
IG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBm
dW5jdGlvbiBpbmNvbnNpc3RlbnQuCiAgICAgICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9
IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgaWYg
KHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVl
cyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQg
YW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJs
ZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2gg
aXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAgICAgLy8gYnVmZmVyLiBCZXNpZGVz
LCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3Vz
dG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAgICAgLy8gcmFuZG9tIG9yIG90
aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5j
dGlvbiBpbmNvbnNpc3RlbnQuCi0gICAgICAgIAotICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQ
YWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgaWYgKCF2
YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgVmVjdG9yPFZhbHVlU3RyaW5n
UGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgaWYgKCF2YWx1
ZXMuYmVnaW4oKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5w
dXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRl
bXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc1NvcnRpbmdQ
cmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoIXZh
bHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7
Ci0gICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRp
dmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICAgICAgfQorICAgIGJvb2wgaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJlbGV2YW50TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJlZ2luW2ld
LmdldCgpOworICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICB2
YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAg
fQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51
ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAg
ICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgIC8vIEZJWE1F
OiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2Vx
dWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4g
ZXhjZXB0aW9uLgogICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNv
bmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAg
ICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShl
eGVjKTsKICAgICAgICAgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVl
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
U2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUg
dG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgICAgICAv
LyB0aGFuIE8oTiBsb2cgTikuCisgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5n
IHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRo
YXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAvLyB0aGFuIE8oTiBsb2cgTikuCiAgICAgICAg
IAogI2lmIEhBVkUoTUVSR0VTT1JUKQotICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFs
dWVzKQotICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOwotI2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9u
IGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KLSAgICAgICAgLy8gRUNNQVNjcmlw
dC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJy
b3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzKQogICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAg
ZWxzZQorICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworI2Vs
c2UKKyAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRv
IG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNw
ZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEg
c3RhYmxlIHNvcnQuCisgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vu
ZGlmCisgICAgCisgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxl
bmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCisgICAgLy8gaW5jcmVhc2UgdGhl
IGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisg
ICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6
CisgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgocmVsZXZhbnRMZW5ndGgpOworICAgICAg
ICBicmVhazsKICAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBj
aGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgICAg
ICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2Yg
YWN0dWFsIHZhbHVlcy4KLSAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Cisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIHJlbGV2YW50TGVuZ3RoKTsKICAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQot
ICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKQorICAg
ICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBDUkFTSCgpOworICAgIH0KKworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVu
Z3RoOyBpKyspCisgICAgICAgIGJlZ2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNb
aV0uZmlyc3QpOworICAgIAorICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9y
KCZ2YWx1ZXMpOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBT
b3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAg
ICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAg
ICAgICAKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPigK
KyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpOworCisgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9D
b250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgICAgICAKQEAgLTc4OSw2ICs4NTcsNzggQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBv
ciBpbiB0b051bWJlci4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVw
dGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdv
b2QKKyAgICAgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgorICAgICAgICBBU1NF
UlQobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgICAgIGlmIChtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBpZiAoIW1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpT
RnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZp
ZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAg
ICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhl
IHRyZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5n
IHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRy
ZWUuCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyArK251bURlZmluZWQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodi5pc1Vu
ZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICB0cmVl
Lmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1EZWZpbmVkOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsrbnVt
VW5kZWZpbmVkOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAg
dHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZCA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID09
IG51bURlZmluZWQpOworICAgICAgICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sg
aW50byBtX3N0b3JhZ2UuCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJh
eUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xl
YXN0KHRyZWUpOworICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkICYm
IGkgPCBtX2J1dHRlcmxmeS0+cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGlu
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICAKQEAgLTkwOCw2ICsxMDQ4LDEyIEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0
YXRlKiBleGUKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAg
IGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgYXJncy5hcHBlbmQo
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwpAQCAtOTM5LDYgKzEwODUsMTIgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1
bWVudHMoRXhlY1N0YXRlKgogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAg
ICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICB1bnNpZ25lZCBpID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwLmdldCgpOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNS
ZWFkT25seSgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgsIAogCiAg
ICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7
CiAKQEAgLTEwNiw2ICsxMDksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVk
IGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwogICAgIH07CiAKKyAgICBpbmxpbmUg
QnV0dGVyZmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBJbmRleGluZ0hlYWRl
ciBoZWFkZXI7CisgICAgICAgIGhlYWRlci5zZXRWZWN0b3JMZW5ndGgoc3RkOjptYXgobGVuZ3Ro
LCBCQVNFX1ZFQ1RPUl9MRU5HVEgpKTsKKyAgICAgICAgaGVhZGVyLnNldFB1YmxpY0xlbmd0aChs
ZW5ndGgpOworICAgICAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBn
bG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBoZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNy
ZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCkBAIC0xMjEsNyArMTMzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
aW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxE
YXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAg
ICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250
aWd1b3VzKSkgeworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5
QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJU
KCFpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UK
KyAgICAgICAgICAgICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0
ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgfQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMTUzLDI2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCog
dGVtcDsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0
b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAg
ICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXko
aW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgPSAwOwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAg
ICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIDApOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxM
ZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAg
ICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSksICZ0ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAg
ICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFy
cmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3Rv
cmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAu
Y2xlYXIoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0
aWFsTGVuZ3RoOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpT
QXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMSw3ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1Zh
bHVlIHByb3RvCiAgICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpOwogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1fYXJy
YXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQo
KSwgQXJyYXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlT
dG9yYWdlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFy
cmF5V2l0aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkp
KTsKIApAQCAtNDA3LDYgKzQwOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGlt
ZShKU0dsb2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxvY2F0aW9ucyB0
aGF0IGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8gdGhpcyBvYmpl
Y3Qgbm93IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAgbV9hcnJheVN0
cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQu
Z2V0KCkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CiAgICAgCiAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQgc3RvcmFnZSBz
d2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFnZS4KQEAgLTQ4
Miw2ICs0ODQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVNjb3BlU3RydWN0dXJlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1bWVudHNTdHJ1Y3R1cmUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Up
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlRm9yU2xv
d1B1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYm9vbGVhbk9iamVjdFN0
cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGJhY2tDb25z
dHJ1Y3RvclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2
ICsxMjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X2FycmF5U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JT
bG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KKyAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7
IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBh
cyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CkBAIC0yNjIsNyAr
MjYzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogbmFtZVNjb3BlU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAg
ICAgICAgU3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Fy
Z3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBT
dHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdldCgpOyB9CiAgICAgICAgIHZvaWQq
IGFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmU7IH0K
KyAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkg
eyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyB9CiAgICAgICAgIFN0
cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9vbGVh
bk9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrQ29u
c3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrQ29uc3RydWN0b3JT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9uU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgp
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwyNCArMTMyLDM5IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0
ZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJy
ZW50VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291
cmNlOworICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGNv
dW50ID0gbmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsK
LSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOyBjb3VudC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1
cnJlbnRTb3VyY2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
dXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuIFdo
eSBpc24ndCB0aGlzIHB1YmxpY0xlbmd0aCgpPwogICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFw
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0t
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChj
dXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0
ZXJmbHk7CkBAIC0xNTksNiArMTc0LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcgogICAgICAgICAKICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9w
cmlhdGUuCiAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyhidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQpAQCAtMjM1LDYgKzI1MywxMyBAQCBib29sIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgIH0KKyAgICAg
ICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpAQCAtMzUyLDYg
KzM3NywyMSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEFTU0VS
VChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W3Byb3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgocHJvcGVydHlOYW1lICsg
MSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHByb3BlcnR5TmFtZSA8IG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wdWJs
aWNMZW5ndGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9w
ZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTM2MiwxNSArNDAyLDE4IEBAIHZvaWQg
SlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltwcm9wZXJ0eU5hbWVdOwog
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAgICAgCisg
ICAgICAgIEpTVmFsdWUgb2xkID0gdmFsdWVTbG90LmdldCgpOworICAgICAgICB2YWx1ZVNsb3Qu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICAKICAg
ICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5
LgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgewogICAgICAgICAgICAgbGVu
Z3RoID0gcHJvcGVydHlOYW1lICsgMTsKICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChs
ZW5ndGgpOwogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAg
ICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgIH0gZWxzZSBpZiAoIW9sZCkgewog
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAKLSAg
ICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVl
KTsKKyAgICAgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdG9yYWdlKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgICAgICAKQEAgLTQ0NCw2ICs0ODcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQs
IGFzIGl0IHdpbGwgcGVyZm9ybSB0d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCisg
ICAgICAgIC8vIHRoaXMgY2FzZSBpZiB3ZSBldmVyIGNhcmVkLgorICAgICAgICBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRh
LCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlz
dHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJl
YWs7CkBAIC00OTEsOSArNTM5LDEwNCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJ
bml0aWFsQXJyCiAgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBC
QVNFX1ZFQ1RPUl9MRU4pOwogfQogCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK3sKKyAgICBB
U1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAK
KyAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lU2l6ZSgpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0
eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7Cisg
ICAgCisgICAgbWVtY3B5KAorICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
IC0gcHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBwcm9wZXJ0eVNpemUsCisgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOworICAgIAorICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rv
ckxlbmd0aCk7CisgICAgbmV3U3RvcmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAg
bmV3U3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4
QmlhcyA9IDA7CisgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IHB1YmxpY0xl
bmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIG5ld1N0b3JhZ2UtPm1faW5p
dGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgbmV3U3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICBtZW1jcHkoCisgICAgICAgIG5ld1N0b3JhZ2UtPm1f
dmVjdG9yLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBwdWJsaWNMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0
cmFuc2l0aW9uKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBu
ZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiBuZXdTdG9yYWdlOworfQorCitBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0
dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlv
biwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpKTsKK30K
Kwordm9pZCBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3Vv
dXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7Cisg
ICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICBBU1NFUlQoIXNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPQorICAgICAgICBCdXR0ZXJm
bHk6ZnJvbVBvaW50ZXIobV9idXR0ZXJmbHktPnBvaW50ZXIoKSArIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcigwKSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgIAorICAgIG5l
d0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3QnV0dGVy
Zmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgCisgICAgLy8gU2hp
ZnQgdGhlIG5hbWVkIHByb3BlcnRpZXMgb3ZlciwgaWYgdGhlcmUgYXJlIHNvbWUuCisgICAgc2l6
ZV90IHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CisgICAgaWYg
KHByb3BlcnR5U2l6ZSkgeworICAgICAgICBtZW1tb3ZlKAorICAgICAgICAgICAgbmV3QnV0dGVy
Zmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgICAgIHBy
b3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hUb0NvbnRpZ3VvdXMpOworICAgIHNldEJ1
dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7Cit9CisKK0Fy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIAorICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZpY2llbnQs
IGlmIHdlIGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKQEAgLTUxMyw2ICs2NTYsMTEg
QEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBKU09iamVj
dDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
IHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2Up
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7
CkBAIC01NTYsOCArNzA0LDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFs
RGF0YQogICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3aXRjaFRv
U2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0
cnVjdHVyZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwog
fQogCiBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNjkxLDYgKzgzOCwxMiBAQCBi
b29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKKyAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBUaGVyZSBpcyBh
biBleHRyZW1lbHkgb2J2aW91cyBjYXNlIHRoYXQgd2UgY291bGQgaGFuZGxlIGhlcmUgKGRlbGV0
aW5nIHRoZSBsYXN0IGVsZW1lbnQpCisgICAgICAgIC8vIGJ1dCBJIGRvbid0IGZlZWwgbGlrZSB3
cml0aW5nIHRlc3RzIGZvciBpdCwgc28gSSdsbCBwdW50IGl0LgorICAgICAgICBjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIC8vIEZh
bGwgdGhyb3VnaC4KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtODY0LDYgKzEwMTcsMTIg
QEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTEzMjUsNiArMTQ4NCw1NyBA
QCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgdmFsdWVTbG90
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVChoYXND
b250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVCghaW5k
ZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICAKKyAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUs
IHRoZSBpbmRleCBpcyBlaXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBn
cmVhdGVyIHRoYW4KKyAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KKyAgICBB
U1NFUlQoaSA+IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSB8fCBpID49IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgaWYgKGkgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpICYmIGkgPCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFTU0VSVChp
ID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIC8vIFRoaXMgaXMgdGhl
IG9uZSBjYXNlIHdlIGNhbiBoYW5kbGUuIEFuZCB3ZSBoYW5kbGUgaXQgYnkgZ3Jvd2luZyB0aGUg
Y29udGlndW91cworICAgICAgICAvLyBzdG9yYWdlLgorICAgICAgICB1bnNpZ25lZCBuZXdWZWN0
b3JMZW5ndGggPSBzdGQ6Om1pbigKKyAgICAgICAgICAgIHRpbWVzVGhyZWVQbHVzT25lRGl2aWRl
ZEJ5VHdvKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSksCisgICAgICAgICAgICBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+
Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAg
ICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1f
YnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgbV9i
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgIEFTU0VSVChpIDwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBB
U1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICBpZiAoaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihpLCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpICYmIGkgPCBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBBbGxvY2F0
ZUFycmF5U3RvcmFnZSwKKyAgICAgICAgICAgIGdldE5ld1ZlY3Rvckxlbmd0aChtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSwgaSArIDEpKTsK
KyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxv
Y2F0ZUFycmF5U3RvcmFnZSk7CisgICAgU3BhcnNlQXJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhp
cywgaSwgdmFsdWUsIGZhbHNlKTsKK30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMzOCw2ICsxNTQ4LDEwIEBAIHZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5z
dXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2Jh
bERhdGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmICghaSAm
JiAhc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIGNy
ZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYg
KCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkgewogICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzQ5LDYgKzE1
NjMsMTEgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3RvckxFbmd0aENvbnRpZ3Vv
dXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgog
ICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICAvLyBObyBv
d24gcHJvcGVydHkgcHJlc2VudCBpbiB0aGUgdmVjdG9yLCBidXQgdGhlcmUgbWlnaHQgYmUgaW4g
dGhlIHNwYXJzZSBtYXAhCkBAIC0xMzcxLDggKzE1OTAsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleEJleW9uZFZlY3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2Rl
IG1vZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBh
IHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3Iu
CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICBBU1NFUlQoYXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkg
Pj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkg
PD0gTUFYX0FSUkFZX0lOREVYKTsKIApAQCAtMTQ1Niw2ICsxNjc3LDEwIEBAIGJvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJp
YnV0ZXMpCiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSkpOworICAgICAgICBpZiAoIWkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250
aWd1b3VzKGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQog
ICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKICAgICAgICAgCkBAIC0xNDY0LDYgKzE2ODksMTUg
QEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CisgICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQor
ICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRy
aWJ1dGVzKGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMTQ4NiwxMiAr
MTcyMCw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBl
bHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0g
c3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVh
c2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAg
ICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEu
NSkpOwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJm
bG93LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRM
ZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5n
dGggPSB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9
CiAKICAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUx
MSw5ICsxNzQwLDEwIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YK
ICAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGgg
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBs
ZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0
aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1NjEsNiArMTc5MSwyMiBAQCBib29sIEpTT2Jq
ZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Zv
aWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgodW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwor
ICAgIAorICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpIHsKKyAg
ICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAg
ICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3Ro
KTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxl
bmd0aCkKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworfQor
CiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NF
UlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTU4OSw2ICsxODM1LDEzIEBAIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCks
IDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlm
IChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEsNiArMTYyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMDcs
NiArMjA5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
aSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MjY3LDYgKzI3Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpCisgICAgICAgICAgICAgICAgICAg
ICYmIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgogICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTI4NSw2ICsyOTQsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDw9IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKQorICAgICAgICAgICAgICAgICAgICAmJiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjk2LDE1ICszMDgs
MjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAg
ICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA8PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHYpOworICAgICAgICAgICAgICAgIGlmIChpID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsg
MSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0
KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAg
ICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5s
ZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsg
MSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0
dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFn
ZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzogewogICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3Jh
Z2UtPmxlbmd0aCgpKTsKQEAgLTMzMSw2ICszNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PmluU3BhcnNlTW9kZSgpOwpAQCAtNTM0LDE2ICs1NjIsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIC8vIGFscmVhZHkuCiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBpZiAoTElLRUxZKGhh
c0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdCB0
byBjb252ZXJ0IHRvIGNvbnRpZ3VvdXMgaW5kZXhpbmcgc3RvcmFnZS4gUmV0dXJucyB0cnVlIGlm
IGl0IHdhcyBkb25lLAorICAgICAgICAvLyBvciBmYWxzZSBpZiBpdCBiYWlsZWQgb3V0IGZvciBh
bnkgcmVhc29uLiBBbHNvIHJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgd2FzIGFscmVhZHkKKyAg
ICAgICAgLy8gY29udGlndW91cy4KKyAgICAgICAgYm9vbCBhdHRlbXB0VG9Db252ZXJ0VG9Db250
aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJ
bml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIGNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApOworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKQEAgLTYwOSwxMSArNjU3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEFy
cmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVh
dGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVk
IG5lZWRlZExlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsK
ICAgICAgICAgCiAgICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRp
b24pOwogCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3Vv
dXNXaXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUpOwogICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CiAKICAgICAgICAgYm9vbCBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwpAQCAtNjI0LDcg
KzY3NywzOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBub3RpZnlQcmVzZW5jZU9m
SW5kZXhlZEFjY2Vzc29ycyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wg
YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBp
bmRleCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRvIHN1Y2NlZWQgYW5kIHlvdSdy
ZSBzdXJlIHRoYXQKKyAgICAgICAgLy8gdGhlIGFycmF5IGlzIGNvbnRpZ3VvdXMuCisgICAgICAg
IHZvaWQgZW5zdXJlQ29udGlndW91c0xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpOwogCisgICAgICAg
IGJvb2wgYXR0ZW1wdFRvQ29udmVydEFycmF5U3RvcmFnZVRvQ29udGlndW91cyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSAhPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvQ29udmVydENvbnRpZ3Vv
dXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJh
eVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNBcnJheVN0b3Jh
Z2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQoIXNo
b3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAg
ICAvLyBPaCwgeW91IGRpZCB0aGlzIGNvbnZlcnNpb24gYmVmb3JlPyBXZWxsLCB5b3UgZG9uJ3Qg
Z2V0IHRvIGRvIGl0IGFnYWluLiBCZWNhdXNlCisgICAgICAgICAgICAvLyB0aHJhc2hpbmcgaXMg
bmV2ZXIgZ29vZC4KKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSgpICYgSGFkQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIC8vIE9oLCB5b3UndmUgdXNlZCBzaGlmdCBhbmQgdW5zaGlm
dD8gQ2hhbmNlcyBhcmUgeW91J2xsIHVzZSBpdCBhZ2FpbiwgYW5kIHdlJ2xsIGhhdmUKKyAgICAg
ICAgICAgIC8vIHRvIGNvbnZlcnQgYmFjay4gTm8gY29udGlndW91cyBhcnJheXMgZm9yIHlvdSEK
KyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX2luZGV4QmlhcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRv
Q29udGlndW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIApAQCAtNjQ5LDYgKzczMyw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRv
cihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJv
cGVydHlEZXNjcmlwdG9yJiBvbGQpOwogICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBkb3VibGVz
IGFzIHB1dERpcmVjdCgpIGJlY2F1c2UgKGEpIGNvbnRpZ3VvdXMgaW1wbGllcyB0aGF0IHRoZXJl
IGFyZSBub3QgaW5kZXhlZCBzZXR0ZXJzIG9yIGluZGV4ZWQgcmVhZG9ubGllcywgYW5kIChiKSB0
aGlzIGlzIG9ubHkgZm9yIGNhc2VzIHdoZXJlIHdlIGRvbid0IHdhbnQgdGhlIHByb3BlcnR5IHRv
IGhhdmUgYW55IGF0dHJpYnV0ZXMuCisgICAgICAgIHZvaWQgcHV0QnlJbmRleFdpdGhvdXRBdHRy
aWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAogICAgICAgICB2b2lk
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgYm9vbCBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJl
Y3RJbmRleE1vZGUsIEFycmF5U3RvcmFnZSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5k
ZXhNb2RlKTsKQEAgLTY1OCw2ICs3NDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0
b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAor
ICAgICAgICB2b2lkIGNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKEpT
R2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBC
dXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
MywxMSArMzIzLDE3IEBAIGJvb2wgU3RydWN0dXJlOjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXIK
ICAgICB9CiB9CiAKLU5vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZElu
ZGV4aW5nVHJhbnNpdGlvbigpIGNvbnN0Citib29sIFN0cnVjdHVyZTo6bmVlZHNTbG93UHV0SW5k
ZXhpbmcoKSBjb25zdAoreworICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0
SW5kZXhlZEFjY2Vzc2VzKCkKKyAgICAgICAgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJh
ZFRpbWUoKTsKK30KKworTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVk
QXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFoYXNJbmRleGVk
UHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwogICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNo
YWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2
aW5nQUJhZFRpbWUoKSkKKyAgICBpZiAobmVlZHNTbG93UHV0SW5kZXhpbmcoKSkKICAgICAgICAg
cmV0dXJuIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICAKICAgICByZXR1cm4gQWxs
b2NhdGVBcnJheVN0b3JhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgYW55T2JqZWN0SW5DaGFpbk1heUlu
dGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpIGNvbnN0OworICAg
ICAgICBib29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKCkgY29uc3Q7CisgICAgICAgIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3Q7CiAg
ICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmpl
Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDggQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxB
dHRyaQogLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRp
b25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCiAvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVz
ZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgogZW51bSBOb25Q
cm9wZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRlQ29udGlndW91cywKKyAgICBTd2l0Y2hU
b0NvbnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UsCiAgICAgQWxsb2NhdGVTbG93
UHV0QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSwKQEAgLTU3
LDEyICs1OSwxOSBAQCBpbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5CiBp
bmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNoICh0cmFuc2l0
aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3VvdXM6CisgICAgICAgIEFTU0VSVCghKG9s
ZFR5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpKTsKKyAg
ICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1b3VzOworICAgIGNhc2UgU3dpdGNoVG9D
b250aWd1b3VzOgorICAgICAgICBBU1NFUlQob2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7Cisg
ICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNBcnJheVN0b3JhZ2UpIHwgKEhhc0NvbnRpZ3Vv
dXMgfCBIYWRBcnJheVN0b3JhZ2UpOwogICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0g
ICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4g
KG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFz
U2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRp
Z3VvdXMpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIFN3aXRjaFRvU2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgQVNTRVJUKG9sZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2Up
OworICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgSGFzQ29udGlndW91cykpOwogICAgICAgICBy
ZXR1cm4gKG9sZFR5cGUgJiB+SGFzQXJyYXlTdG9yYWdlKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2U7CiAgICAgY2FzZSBBZGRJbmRleGVkQWNjZXNzb3JzOgogICAgICAgICByZXR1cm4gb2xkVHlw
ZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4
dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNp
b24gMTI5NTk5KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDQsNiArMzA0LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGhh
c1R3b08KICAgICByZXR1cm4gIWhhc1plcm9Pck9uZUJpdHNTZXQodmFsdWUpOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhU
IHZhbHVlKQoreworICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgLy8g
ICAodmFsdWUgKiAzICsgMSkgLyAyOworICAgIC8vIG9yOgorICAgIC8vICAgKHVuc2lnbmVkKWNl
aWwodmFsdWUgKiAxLjUpKTsKKyAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVy
bmFsIG92ZXJmbG93LgorICAgIHJldHVybiB2YWx1ZSArICh2YWx1ZSA+PiAxKSArICh2YWx1ZSAm
IDEpOworfQorCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhT1Mo
U09MQVJJUykKIHVzaW5nIHN0ZDo6aXNmaW5pdGU7CiAjaWYgIUNPTVBJTEVSX1FVSVJLKEdDQzEx
X0dMT0JBTF9JU0lORl9JU05BTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165838</attachid>
            <date>2012-09-26 11:32:34 -0700</date>
            <delta_ts>2012-09-26 13:25:27 -0700</delta_ts>
            <desc>almost there!</desc>
            <filename>contiguous_patch_7.diff</filename>
            <type>text/plain</type>
            <size>177498</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBpbmZlciB3aGVuIGluZGV4ZWQgc3RvcmFnZSBpcyBjb250aWd1b3VzLCBhbmQg
b3B0aW1pemUgZm9yIGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NzI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5o
OgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tUG9p
bnRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cG9pbnRlcik6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6cHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpjb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aGFzQ29udGlndW91cyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNob3J0Q29tcGFj
dGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZl
cnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29u
dmVydFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252
ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0
dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVl
ZHNTbG93UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorCiAyMDEyLTA5LTI1ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTI5NDU2KTogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3MtZXZhbC5odG1sIGlzIGZhaWxpbmcgb24gSlNDIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAoKSk7CiAgICAgfQorCisgICAgUGF0Y2hh
YmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgewor
ICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBtYXNr
KSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisjZGVmaW5lIEJ5VmFsSW5mb19oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJD
b2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKSVRT
dHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBKSVRBcnJheU1vZGUgeyBK
SVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsKKworc3RhdGljIGJvb2wgaXNPcHRpbWl6
YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworc3RhdGljIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5
cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJl
dHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAg
IH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAgQnlWYWxJbmZvKCkgeyB9CisgICAgCisg
ICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXAgYmFk
VHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIGludDE2X3QgYmFkVHlwZUp1bXBUb0Rv
bmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgICAgIDogYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQor
ICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgICwgYmFkVHlwZUp1bXBUb0Rv
bmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgo
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXA7CisgICAg
SklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQg
aW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7
CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aDsKKyAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRC
eVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKK3sKKyAgICByZXR1cm4gaW5m
by0+Ynl0ZWNvZGVJbmRleDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCisjZW5kaWYgLy8gQnlWYWxJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDksNiArMjA5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgICAgICAKKyAg
ICAgICAgQnlWYWxJbmZvJiBnZXRCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5z
aWduZWQsIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXg+KG1fYnlWYWxJbmZvcy5iZWdpbigpLCBt
X2J5VmFsSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgIH0KIAogICAgICAg
ICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCiAgICAgICAgIHsKQEAgLTYxMCw2ICs2MTUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6ZV90IHNpemUpIHsg
bV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQogICAgICAgICBzaXplX3QgbnVtYmVy
T2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJbmZv
cy5zaXplKCk7IH0KICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZv
KGludCBpbmRleCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3NbaW5kZXhdOyB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHNldE51bWJlck9mQnlWYWxJbmZvcyhzaXplX3Qgc2l6ZSkgeyBt
X2J5VmFsSW5mb3MuZ3JvdyhzaXplKTsgfQorICAgICAgICBzaXplX3QgbnVtYmVyT2ZCeVZhbElu
Zm9zKCkgY29uc3QgeyByZXR1cm4gbV9ieVZhbEluZm9zLnNpemUoKTsgfQorICAgICAgICBCeVZh
bEluZm8mIGJ5VmFsSW5mbyhzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYnlWYWxJbmZvc1tpbmRl
eF07IH0KIAogICAgICAgICB2b2lkIGFkZEdsb2JhbFJlc29sdmVJbmZvKHVuc2lnbmVkIGdsb2Jh
bFJlc29sdmVJbnN0cnVjdGlvbikKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NTksMTIgKzg1OSwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgog
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2Ug
UE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9w
KCk7CkBAIC05MDgsNiArOTEyLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtOTI0LDExICs5MzEsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAg
ICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hP
TEVfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
OgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzY3LDcgKzEzODAsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6IC8vIFRo
ZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlMZW5ndGgKICAgICAgICAgICAg
IC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdl
IG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1v
ZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkBAIC0xNDEwLDkgKzE0
MjUsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0K
ICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkg
ewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
KyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAg
ICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2
aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBBcnJheTo6TW9kZSBmcm9tT2Jz
ZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5wcm9maWxlZDsK
ICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0g
QXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkK
LSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTsgLy8gRklYTUU6
IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1dCBtb2RlLCBvciBub3QuIFRo
aXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9D
b250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBkb24ndCBrbm93IHdoZXRoZXIg
dG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1ZXNzaW5nIHRoYXQgd2UgZG9u
J3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CisgICAg
Y2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5
U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkNvbnRpZ3Vv
dXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAg
ICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
IDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91
c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250
aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9Ib2xlIDogQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5U3Rv
cmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJy
YXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CkBAIC01Niw2ICs2MiwyMCBA
QCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgY2FzZSBhc0Fy
cmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3Jh
Z2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgICAgICByZXR1cm4g
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJyYXk6OkNvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8
IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgor
ICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJj
ZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9D
b250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgaWYg
KGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKICAgICBjYXNl
IGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUt
Pm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwyMiBAQCBib29sIG1vZGVBbHJl
YWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAg
ICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNU
b1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgorICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhh
c0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworCiAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKQEAgLTE3
MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAKLSAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
TU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CkBAIC0yMjUsNiArMjYyLDI0
IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0
dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJu
ICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAi
Q29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKKyAgICAgICAg
cmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091dE9mQm91bmRzIjsKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0
aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6
CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9U
YWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6
CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMi
OwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJBcnJheVN0
b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKQEAgLTI0OSwxMCAr
MzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAg
ICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwogICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAg
ICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7Cisg
ICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQmxhbmtU
b0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QmxhbmtU
b1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb1Nsb3dQdXRBcnJh
eVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7Cisg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhD
b250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAg
ICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTI5
NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsKICAgICBTdHJpbmcsCiAgICAg
CiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQgc3RvcmFnZSB3aGVyZSB0aGUg
Y2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRpZ3VvdXMsCisgICAgQ29udGln
dW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQ29u
dGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMsCisg
ICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAgIFBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3RvcmFnZSwKICAgICBBcnJheVN0
b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKQEAgLTY4LDggKzc3LDE2IEBA
IGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdo
ZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBCbGFua1RvQ29udGlndW91cywK
ICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdl
LAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisgICAgCisgICAgLy8gTW9k
ZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9yYWdlLiBUaGVzZSBkb24ndCBi
ZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3RvcmFnZSBDU0UuCisgICAgQ29u
dGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3Rv
cmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKICAg
ICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAtODksNiArMTA2LDMyIEBAIGVu
dW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCiAKIC8v
IEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgorI2RlZmluZSBO
T05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
QXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOiAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9DT05USUdVT1VTX01PREVTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05fQVJSQVlfQ09OVElHVU9VU19N
T0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91czogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQ09OVElH
VU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c091
dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICBcCisgICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKICNkZWZpbmUgTk9OX0FS
UkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5
OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgIFwK
QEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVmaW5lIEFMTF9BUlJBWV9TVE9S
QUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBOT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQVJS
QVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCi0jZGVmaW5lIEFSUkFZX1NUT1JBR0VfVE9fSE9M
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlTdG9yYWdl
VG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKICNkZWZpbmUgSU5fQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFSUkFZX1NU
T1JBR0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAg
XAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5l
IEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hv
bGUKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKIAogLy8gTmV4dDogaGVscGVycyBm
b3Igc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FS
UkFZX1NUT1JBR0VfTU9ERVMgXAotICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVMgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzCisjZGVmaW5l
IEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFM
TF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZF
Q1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKICAgICBFRkZFQ1RG
VUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUgU0xPV19QVVRfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgIFwKKyNkZWZpbmUgU0xPV19QVVRfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgXAogICAgIEFycmF5OjpCbGFua1RvU2xvd1B1
dEFycmF5U3RvcmFnZQorI2RlZmluZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVMgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2UKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgY2FzZSBBTExfRUZGRUNUVUxfQVJSQVlfU1RPUkFHRV9NT0RF
UzogICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX0VGRkVDVEZVTF9NT0RF
UworCisvLyBGaW5hbGx5OiBoZWxwZXJzIGZvciBwb2x5bW9ycGhpYyBhcnJheSBhY2Nlc3Nlcy4K
KyNkZWZpbmUgUE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJy
YXlTdG9yYWdlCisjZGVmaWxlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVMKIAogQXJyYXk6
Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFr
ZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhB
cnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBh
cnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNU
RlVMX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTYsNyAr
MjE2LDkgQEAgaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZAogaW5saW5l
IGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNo
IChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzoKICAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBi
b29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNB
Y2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7
CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VP
VVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoK
ICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4ICsyNDksNTYgQEAgaW5saW5lIGJvb2wgaXNT
bG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3Rv
cmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VP
VVNfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
IGlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAg
ICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01P
REVTOgogICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpCbGFua1Rv
Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitpbmxpbmUgYm9vbCBtb2RlSXNQb2x5bW9ycGhpYyhBcnJheTo6TW9kZSBtb2RlKQorewor
ICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogfQogCitpbmxpbmUgYm9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChhcnJheU1vZGUsIG1vZGVJ
c1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUg
Ym9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJy
YXlNb2RlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGNhbkNTRVN0b3Jh
Z2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CkBA
IC0yMDQsNiArMzA3LDcgQEAgaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBh
cgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgog
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RF
UzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjQ5LDcgKzM1MywxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgo
QXJyYXk6Ok1vCiAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpG
b3JjZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9D
T05USUdVT1VTX01PREVTOgogICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjU5LDcgKzM2Nyw4IEBAIGlubGluZSBib29sIG1v
ZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW8KIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVj
dHVyZUNoZWNrKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZG
RUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOgogICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgpAQCAtMjczLDcgKzM4Miw3IEBAIGlubGluZSBib29sIGJlbmVmaXRzRnJv
bVN0cnVjdHVyZUNoZWNrKEEKIGlubGluZSBib29sIGlzRWZmZWN0ZnVsKEFycmF5OjpNb2RlIG1v
ZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NzEsNiArMTU3MSw4IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgogICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUp
LCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVy
YW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKQEAg
LTE1OTQsNiArMTU5Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhi
b28KICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBo
KEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVn
aXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5
TW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hl
Y2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgp
LmluZGV4KCksIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxl
bmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAg
ICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKQEAgLTEzNywxNyArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5j
aGlsZDEoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQx
KCksIG5vZGUuY2hpbGQyKCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAxKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwg
Myk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKICAgICAgICAgICAgIApAQCAtMzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNo
ZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5v
ZGVJbmRleCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NF
U3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNr
QXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJ
bmRleCBhcnJheSwgTm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6
TW9kZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAg
ICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKIAogICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJy
YXlNb2RlKSkgewotICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCAh
PSBOb05vZGUpOworICAgICAgICAgICAgbV9ncmFwaC5yZWYoaW5kZXgpOworICAgICAgICAgICAg
Tm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFy
cmF5LCBpbmRleCk7CiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNl
IGl0J3MgdXNlZCBhcyBhIGJ1dHRlcmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAv
LyBBbmQgdHdpY2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2Rl
SW5kZXggYXJyYXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRH
ZW5lcmF0ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdl
IGJhc2UsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVy
YXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAg
ICAgewogICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2lu
dCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2Rl
UHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgaWYgKG5v
ZGVQdHItPmFycmF5TW9kZSgpID09IEFycmF5OjpGb3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNo
IChub2RlUHRyLT5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
IHsKICAgICAgICAgICAgIE5vZGUgZm9yY2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29k
ZU9yaWdpbik7CiAgICAgICAgICAgICBmb3JjZUV4aXQucmVmKCk7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggZm9yY2VFeGl0SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleElu
QmxvY2ssIGZvcmNlRXhpdEluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKCFtb2RlSXNTcGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUo
KSkpCisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4
IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBiYXNlLmluZGV4KCkpOwotICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisg
ICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElD
X01PREVTOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIG1fZ3Jh
cGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdl
KHN0b3JhZ2UpOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBOb2RlSW5kZXggc3Rv
cmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmln
aW4sIGJhc2UuaW5kZXgoKSwgaW5kZXguaW5kZXgoKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFn
ZSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hp
bGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9
CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCAr
NDc5LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hP
TEVfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
OgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAg
ICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyOTU5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMDksNiArMjEwOSwxMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmIG5vZGUs
IEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJl
c3VsdFJlZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZyk7CisgICAgCisgICAgcmV0dXJuIHNs
b3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAK
KyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
cmVzdWx0LmdwcigpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoaG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUm
IG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BS
UmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBhcnJheU1v
ZGUgPSBub2RlLmFycmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisgICAgaWYgKCFtYXlTdG9yZVRvVGFpbChhcnJheU1vZGUpKSB7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJlZyk7
CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAg
ICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LnN0b3JlUHRyKHZh
bHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBTY2FsZVB0cikpOworICAgIAorICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkp
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKKyAgICByZXR1cm4g
c2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBw
cm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRl
bXBSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsK
KyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5
Qm91bmRzKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlC
b3VuZHMpOworCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNv
IGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUo
YXJyYXlNb2RlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYg
d2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxs
IGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZv
ciBleGl0CisgICAgICAgIC8vIHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
KyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwor
ICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBj
b2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5j
aC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBp
ZiB3ZSdyZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSks
IHRlbXBSZWcpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1w
UmVnKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2Ug
bWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9
CisgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgICAgICAgICAg
CisgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZVB0
cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wKCk7CkBAIC0yNTk1LDYgKzI2OTksNTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEluMzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwor
ICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgU2NhbGVQdHIpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgor
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNf
QVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI2MTUsNiArMjc2Myw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAg
ICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwpAQCAtMjYyNywyMSArMjc3Niw2NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRS
ZWcpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKTsKLQorICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZC
b3VuZHMpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHJlc3VsdFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0Nv
bnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250
aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJl
c3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5j
bHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91
Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAg
ICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChmYWxsVGhyb3VnaCk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3
MzUsOCArMjkyOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdw
cigpOwpAQCAtMjc1Niw1OSArMjk0OSw3MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBh
cnJheS4KICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiYXNl
LnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51
c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKLSAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rv
ci4KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAg
ICAgICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVu
IHRoZSBiYXNlbGluZSBKSVQKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNv
dW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAg
ICAgICAgICAgLy8gcHJvZmlsaW5nLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICAgICAgICAgIGlmIChpc1Ns
b3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRo
LCB3ZSB3b3VsZCBpbnZlcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5j
aC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBp
ZiB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1l
LgotICAgICAgICAgICAgICAgICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xl
IHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVy
dHlSZWcpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBsZW5ndGhEb2Vz
Tm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGln
dW91c1B1dEJ5VmFsKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsCisgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKSk7CisKKyAgICAgICAgICAgIGlm
ICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJh
eUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJp
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlS
ZWcsIHZhbHVlUmVnKSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9N
T0RFUzogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsK
KworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkp
IHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAg
ICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CisgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAg
IGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAgICAgICAgICAgICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAg
ICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQor
ICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVn
LAorICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBv
cmFyeSwgbm9kZSkpOwogCi0gICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFy
cmF5LgotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAg
ICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoaXNIb2xlVmFsdWUpOworICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsCkBAIC0yODIwLDYgKzMwMjYsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAg
QVNTRVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5
UmVnID0gdGVtcG9yYXJ5LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
bGxUaHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKHBvbHlt
b3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9u
ZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZh
bGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1
bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChu
b2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFy
eVJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVk
ZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gg
PSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2RlLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZykp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0KCkp
OworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAg
ICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTI5NzMsMjYgKzMyMjksNTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICAv
LyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdm
ZmZmZmZlKSkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICAv
LyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIo
MHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3Jl
MzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQ
Uik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwog
ICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5
UHVzaCwgTm9SZXN1bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCi0gICAgICAgICAgICAgICAgdmFsdWVH
UFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
c3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgIG1faml0Lm9y
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgIAorICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTMwMDIsNDEgKzMyODQsNzAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWUo
dGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAg
ICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5n
dGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICAvLyBGSVhNRTog
QXJyYXlQb3AgaW4gY29udGlndW91cyBtb2RlIGhhcyBubyBjaGFuY2Ugb2Ygc2lkZSBlZmZlY3Rz
LiBXZSBzaG91bGQgdGFrZQorICAgICAgICAgICAgLy8gYWR2YW50YWdlIG9mIHRoaXMsIHNvbWVo
b3cuCisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9IG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworICAgICAgICAgICAg
bV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCB2YWx1ZUdQUiwgU2Nh
bGVQdHIpLCB2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgc2V0VW5k
ZWZpbmVkQ2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwotICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
dG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0
VW5kZWZpbmVkQ2FzZXM7CisgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNs
b3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogCi0gICAgICAgIHNldFVu
ZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAot
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgK
LSAgICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgICAgICBzZXRVbmRl
ZmluZWRDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsK
ICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJh
eVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOwog
Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTMyMTAsOCArMzUyMSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5n
cHIoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
LCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgc2l6ZUdQUik7
Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdEVtcHR5ID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBzaXplR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAg
ICBub3RFbXB0eS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplLCByZXN1bHRHUFIsIHJlc3VsdEdQUiwgc2l6ZUdQUik7CisgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw2ICszNTIs
MjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2Fz
ZSBQT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
KyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgdGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJuZWQgaW50
byBhIHNpbmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5jZQorICAg
ICAgICAvLyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJIGZlZWwg
Y29tZm9ydGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVyYWdlIGZv
ciB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoCisgICAgICAgICAgICAgICAgICAgIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhu
b2RlLmFycmF5TW9kZSgpKSA/IEhhc0NvbnRpZ3VvdXMgOiAwKQorICAgICAgICAgICAgICAgICAg
ICB8IChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpID8g
SGFzQXJyYXlTdG9yYWdlIDogMCkpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsK
ICAgICAgICAgYnJlYWs7CkBAIC0zOTAsNzIgKzQxMywxMDAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAgIEFTU0VSVCghbW9kZUFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwogICAgIAog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOworICAgIAorICAgIEluZGV4aW5nVHlwZSBkZXNpcmVkSW5kZXhpbmdU
eXBlTWFzazsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICBjYXNl
IEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewotICAgICAgICBHUFJU
ZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIGNhc2UgQmxhbmtUb0NvbnRpZ3Vv
dXM6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91czsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBCbGFua1RvQXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNp
cmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4
aW5nVHlwZU1hc2sgPSBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6
CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91cyB8IEhhc0Fy
cmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1
cmUodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHN0cnVj
dHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7CisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7CiAgICAgICAgIAotICAgICAgICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0
IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBJbmRleGluZ1R5cGUg
ZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPQotICAgICAgICAgICAgaXNTbG93UHV0QWNjZXNzKG5v
ZGUuYXJyYXlNb2RlKCkpID8gKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2UpIDogSGFzQXJyYXlTdG9yYWdlOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpOworICAgIC8vIFdlIGNh
biBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3Jh
Z2UuCisgICAgSW5kZXhpbmdUeXBlIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0KKyAgICAgICAg
aXNTbG93UHV0QWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpID8gKEhhc0FycmF5U3RvcmFnZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2UpIDogSGFzQXJyYXlTdG9yYWdlOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVH
UFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAg
bV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBzbG93
Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOwogICAgICAgICAK
LSAgICAgICAgLy8gTmV4dCBjaGVjayB0aGF0IHRoZSBvYmplY3QgZG9lcyBub3QgaW50ZXJjZXB0
IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0IGRvZXMsCi0gICAgICAgIC8vIHRoZW4gdGhpcyBtb2Rl
IHdvbid0IHdvcmsuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvKSkpOworICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRv
ZXMgbm90IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAorICAgIC8vIHRo
ZW4gdGhpcyBtb2RlIHdvbid0IHdvcmsuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvKSkpOwogICAgICAgICAKLSAgICAgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUg
YXJyYXkgc3RvcmFnZS4KLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7
CisgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKKyAgICBjYXNlIEJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VSZWcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEJsYW5rVG9BcnJheVN0b3JhZ2U6CisgICAgY2FzZSBCbGFua1Rv
U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1
cmVBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcpOwotICAgICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHRlbXBHUFIpOwotCi0gICAgICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVsb2Fk
IHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQotICAg
ICAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8g
c28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZwotICAgICAgICAvLyBhYm91dCBhIGxvYWQuCi0g
ICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUga2luZCBv
ZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KLSAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwgcmVz
dWx0IGluIHRoZSAKLSAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcg
dG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgotICAgICAgICAvLyBUaGF0
J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZElu
ZGV4aW5nVHlwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LSAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICBjYXNlIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlT
dG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFT
SCgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0
ZW1wR1BSKTsKKworICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUg
YmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQorICAgIC8vIHRlbXBvcmFyaWVz
LiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdy
ZSB0YWxraW5nCisgICAgLy8gYWJvdXQgYSBsb2FkLgorICAgIG1faml0LmxvYWRQdHIoCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAKKyAgICAvLyBGaW5hbGx5LCBjaGVjayB0
aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBn
ZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hl
Y2ssIHdoaWNoIHdpbGwgcmVzdWx0IGluIHRoZSAKKyAgICAvLyBieXRlY29kZSBvcGVyYXRpb24g
Y29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCisg
ICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2li
bGUuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNr
KSkpOworICAgICAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBzdG9yYWdlUmVzdWx0
KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTQ5LDYgKzIxNDksNTAgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKE5vZGUmKTsKICAgICAKKyAgICBNQWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29t
cGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9w
ZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQ
UlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJS
ZWcgcmVzdWx0UmVnKTsKKyAgICAKKyAgICBib29sIHB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lz
dGVyKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7CisgICAgICAgIC8vIEZvciBBcnJheVN0b3JhZ2UsIHdlIG5lZWQgYW4gZXh0cmEgcmVn
IGZvciBzdG9yZXMgdG8gaG9sZXMgZXhjZXB0IGlmCisgICAgICAgIC8vIHdlJ3JlIGluIFNsb3dQ
dXQgbW9kZS4KKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CisgICAg
ICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNl
IEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEZvciBDb250aWd1b3VzLCB3ZSBuZWVkIGFu
IGV4dHJhIHJlZyBmb3IgYW55IGFjY2VzcyB0aGF0IG1heSBzdG9yZQorICAgICAgICAvLyB0byB0
aGUgdGFpbC4KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgCisgICAgICAgIC8vIEFsbCBwb2x5bW9ycGhpYyBtb2RlcyBuZWVkIGFuIGV4dHJh
IHJlZy4KKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdp
c3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJh
eU1vZGUpCisgICAgeworICAgICAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVy
KGFycmF5TW9kZSkpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZWFsVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICB0ZW1w
b3JhcnkuYWRvcHQocmVhbFRlbXBvcmFyeSk7CisgICAgICAgIHJldHVybiB0ZW1wb3JhcnkuZ3By
KCk7CisgICAgfQorICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRl
bXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRl
bXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlLmFycmF5TW9kZSgpKTsK
KyAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzUHV0
QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmLCBHUFJS
ZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVn
IHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hh
ckNvZGVBdChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlJik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEyOTU5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAw
LDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7Cisg
ICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUluZm9J
bmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC03MzgsNiAr
NzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICBt
X2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBtX3By
b3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29kZUJsb2Nr
LT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJsb2NrLT5z
ZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsg
KytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRp
b25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5i
YWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0ID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRvbmVUYXJnZXQp
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRhcmdldCk7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsKKyAgICAgICAg
CisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisgICAgICAg
ICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAg
ICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uYXJy
YXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJhZFR5cGVKdW1w
LCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihyZXR1
cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0
TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8u
c2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJl
ck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0g
bV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1ZmZl
ciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxhdGlvbklu
Zm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAKKyAgICAg
ICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGRvbmVUYXJnZXQpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCkKKyAgICAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCisgICAgICAgICAg
ICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgICAgICAsIGRvbmVUYXJnZXQoZG9uZVRh
cmdldCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4OworICAgICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOworICAgICAg
ICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
ZG9uZVRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoVGFyZ2V0
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXR1cm5BZGRyZXNzOworICAgIH07CisK
ICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7CkBAIC0zNDgsNiArMzY3LDIwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9u
KHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFp
biwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5t
X2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJh
eU1vZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFs
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZv
LT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwo
YnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1
Y3R1cmUgKnRyYW1wb2xpbmVzKQogICAgICAgICB7CkBAIC0zOTcsNiArNDMwLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0
cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBT
dHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2Fs
bEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0
dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJl
Q2hhaW4qLCBSZXR1cm5BZGRyZXNzUHRyLCBib29sIGRpcmVjdCk7CisgICAgICAgIAorICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKICAgICAgICAgUGFz
c1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVU
cmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAgICAgICAg
IExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlz
Q29uc3RydWN0ID0gZmFsc2UpOwpAQCAtNDUyLDYgKzQ4OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJl
QW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSopOwogICAg
ICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVy
SUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9s
ZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgSklUQXJyYXlN
b2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBp
bmRleGluZyB0eXBlLgorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVy
byBleHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuCisgICAgICAgIC8vIFN0cnVjdHVyZSBp
cyBhbHJlYWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gK
KyAgICAgICAgLy8gY2FzZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3Qg
eWV0IHByb2ZpbGVkLgorICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVt
aXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMg
aW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAgIC8vIFRoZSB2
YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQg
YW5kCisgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1
Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KKyAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBj
YXNlcy4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlT
dG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKIAog
ICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwg
fTsKIApAQCAtODcwLDYgKzkyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8
Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKICAg
ICAgICAgVmVjdG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mbzsKKyAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAg
VmVjdG9yPE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8+IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9u
SW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKQEAgLTg3OSw2ICs5
MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9z
d2l0Y2hlczsKIAogICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25J
bmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7CiAgICAgICAg
IHVuc2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9j
YWxsTGlua0luZm9JbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTksMTAgKzU1
OSwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGCiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9I
b2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXco
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJy
YXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJh
eU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhwcm9m
aWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwor
ICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC0xMTEsMTcgKzExMiw1NyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdU
MiwgcmVnVDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRD
b250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
IAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwor
fQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWRQ
dHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgCisgICAg
cmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3Jh
Z2VHZXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJy
YXlTdG9yYWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdU
MCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7Cisg
ICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0MywxNyArMTg0LDEwMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgbm90U3RyaW5nLmxpbmsodGhpcyk7
CiAgICAgbm9uQ2VsbC5saW5rKHRoaXMpOwogICAgIAotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gdmVjdG9yIGxlbmd0aCBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkg
dmFsdWUKKyAgICBzd2l0Y2ggKGNob29zZUFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kKSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3Rv
ciBsZW5ndGggY2hlY2sKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1
ZQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJl
bCgpOwogICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlf
dmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7CiAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7
CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93
UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwog
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQogCit2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+YmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBK
SVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNo
QnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7
CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV92YWwg
c3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2Rl
QmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlW
YWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSwgYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsocmV0dXJuQWRkcmVzcywgY3RpX29w
X2dldF9ieV92YWxfZ2VuZXJpYyk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3Vv
dXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0
b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGlu
ayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVs
QXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVt
cC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAg
ICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAg
ICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZvciBD
b2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0
dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJh
ZFR5cGVKdW1wVG9Eb25lLCBieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhyZXR1cm5BZGRyZXNzLCBjdGlfb3BfcHV0X2J5X3Zh
bF9nZW5lcmljKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVy
SUQgc2NyYXRjaCwgRmluYWxPYmplY3RNb2RlIGZpbmFsT2JqZWN0TW9kZSkKIHsKICAgICBBU1NF
UlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwpAQCAtMjI2LDcgKzM1MCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMjM0LDEwICszNTgsNzMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHplcm9FeHRl
bmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwg
cmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9y
YWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxl
KTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2Zp
bGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93
Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExh
YmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUs
IGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVn
VDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
KTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAg
ICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
KyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0
cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92
ZSwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAg
ICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsK
KyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7CisgICAgc3Rv
cmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgCisgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICAKKyAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAg
IEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
IApAQCAtMjQ3LDggKzQzNCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3Ry
dWN0aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlz
KTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
QWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJ
blZlY3RvcikpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShw
cm9maWxlKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpLCByZWdUMyk7CisgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwg
cmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVl
c0luVmVjdG9yKSkpOwogICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7
CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKQEAgLTI1Nyw4ICs0NDcsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBlbmQubGluayh0aGlzKTsKLQotICAgIGVt
aXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlcklt
bWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAgICAKKyAgICByZXR1
cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMjcwLDEzICs0NjAsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50
MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFz
ZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBj
aGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW4gdmVjdG9yIGNoZWNrCisgICAgLy8g
VGhlc2UgbmV4dCB0d28gY2hlY2tzIGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzIGFjY29yZGluZyB0
byBhcnJheSBtb2RlLgorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgSklUU3R1
YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlzLCBjdGlfb3BfcHV0X2J5X3ZhbCk7CiAgICAgc3R1
YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5h
ZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJn
dW1lbnQodmFsdWUsIHJlZ1QyKTsKLSAgICBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICBD
YWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1Bh
dGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
cmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2luZGV4KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2
aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MTQsNiArMjQxNCwzMCBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCitzdGF0
aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBi
YXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0Lmlz
U3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0Nl
bGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+
dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBpID0gc3Vi
c2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYg
YXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAgICAgICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCByZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKKyAgICAgICAgICAg
IHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJhbWUsIGkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7CisgICAg
fQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAgICAgICByZXR1cm4gYmFzZVZhbHVl
LmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkp
LT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBz
dWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CisgICAgcmV0
dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7fQorfQorCiBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yNDIzLDM1ICsyNDQ3LDM3IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFz
ZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAo
SlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShj
YWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAg
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0
LmlzVUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigp
OwotICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1
ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAg
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNj
cmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9y
Tm9uREZHQ29kZSgpOworICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBC
eVZhbEluZm8mIGJ5VmFsSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmJ5VmFsSW5mbyhi
eXRlY29kZU9mZnNldCAtIDEpOworICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGlu
ZSk7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAg
ICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4
aW5nVHlwZSkpIHsKKyAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJh
eU1vZGVGb3JJbmRleGluZ3R5cGUoaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgICAgIGlmIChhcnJh
eU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBp
bGVHZXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CiAgICAgICAg
IH0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7
Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5
VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUUlVOX0FERFJFU1Mp
OworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKIAotICAgIGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewotICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4o
c3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9F
WENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAg
IH0KKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0g
ICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxs
RnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1
ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9F
TkQoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgp
OworICAgIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIFNUVUJfUkVUUlVOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0yNTAyLDE3ICsy
NTI4LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0KLSAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJz
Y3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUg
PSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOwotCiAgICAgaWYgKExJS0VMWShzdWJzY3Jp
cHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQz
MigpOwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTI1MzMsNiArMjU1
MCw1MSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAg
ICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKICAg
ICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5
X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKKworICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7CisKKyAgICBpZiAoYmFzZVZhbHVlLmlz
T2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRv
IG9wdGltaXplLgorICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+
Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9m
ZnNldCk7CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+YnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlW
YWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJ
bmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAg
ICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJy
YXlNb2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUs
IGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CisKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOworfQorCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFs
X2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7CisKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOworICAgIAorICAgIHB1dEJ5VmFs
KGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKIAogICAgIENIRUNLX0ZP
Ul9FWENFUFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw2ICszNzAsNyBAQCBleHRlcm4gIkMiIHsK
ICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRf
YnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAgIEVuY29kZWRK
U1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwog
ICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pbihTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW5z
dGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKQEAgLTQ0Niw2ICs0
NDcsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRf
ZGlyZWN0X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAg
dm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4KFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWwoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3Bf
cHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwog
ICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0ZXJfc2V0dGVyKFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nbG9i
YWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI5NTk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVu
Z3RoOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJv
ZmlsZSh0MiwgdDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3Ro
U2xvdwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93
CisgICAgYnRpeiB0MiwgKElzQ29udGlndW91cyB8IEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQ
dXRBcnJheVN0b3JhZ2UpLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2FkaXMgOFtQQiwg
UEMsIDhdLCB0MQogICAgIGxvYWRwIDY0W1BCLCBQQywgOF0sIHQyCiAgICAgbG9hZHAgSlNPYmpl
Y3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKQEAgLTExNDcsMTQgKzExNDcsMjQgQEAgX2xsaW50X29w
X2dldF9ieV92YWw6CiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDMKICAgICBhcnJheVByb2Zp
bGUodDIsIHQzLCB0MSkKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKLSAgICBidGl6IHQy
LCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBzeGkycCB0MSwgdDEKICAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MworICAgIGJ0aXogdDIsIEhhc0Nv
bnRpZ3VvdXMsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cworCisgICAgYmlhZXEgdDEsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAu
b3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAorICAgIGxvYWRwIFt0
MywgdDEsIDhdLCB0MgorICAgIGptcCAub3BHZXRCeVZhbERvbmUKKworLm9wR2V0QnlWYWxOb3RD
b250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJh
eVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxT
bG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkcCBBcnJheVN0b3JhZ2U6
Om1fdmVjdG9yW3QzLCB0MSwgOF0sIHQyCiAgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CisK
Ky5vcEdldEJ5VmFsRG9uZToKICAgICBzdG9yZXAgdDIsIFtjZnIsIHQwLCA4XQogICAgIGxvYWRw
IDQwW1BCLCBQQywgOF0sIHQwCiAgICAgdmFsdWVQcm9maWxlKHQyLCB0MCkKQEAgLTEyMjYsMjkg
KzEyMzYsNTUgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgSlNDZWxsOjptX3N0
cnVjdHVyZVt0MV0sIHQyCiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDMKICAgICBhcnJheVBy
b2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5
VmFsU2xvdwogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MAotICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGVJbnQzMih0MCwgdDIsIC5vcFB1dEJ5VmFsU2xvdykKLSAgICBzeGkycCB0MiwgdDIK
KyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQzLCAub3BQdXRCeVZhbFNsb3cp
CisgICAgc3hpMnAgdDMsIHQzCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwg
dDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
OjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJ0cHogQXJyYXlTdG9y
YWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0
b3JlUmVzdWx0OgotICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwotICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUodDMsIHQxKQorICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcFB1dEJ5
VmFsTm90Q29udGlndW91cworICAgIAorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVh
ZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxDb250
aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0OgorICAg
IGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIs
IHQxKQorICAgIHdyaXRlQmFycmllcih0MSkKKyAgICBzdG9yZXAgdDEsIFt0MCwgdDMsIDhdCisg
ICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAg
YmlhIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGlj
TGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZh
bFNsb3cKKyAgICBpZiBWQUxVRV9QUk9GSUxFUgorICAgICAgICBsb2FkcCAzMltQQiwgUEMsIDhd
LCB0MgorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3Qy
XQorICAgIGVuZAorICAgIGFkZGkgMSwgdDMsIHQyCisgICAgc3RvcmVpIHQyLCAtc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQorICAgIGpt
cCAub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdAorCisub3BQdXRCeVZhbE5vdENvbnRp
Z3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKKyAg
ICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3Zl
Y3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGJ0cHogQXJyYXlTdG9yYWdlOjpt
X3ZlY3Rvclt0MCwgdDMsIDhdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5Cisub3BQdXRC
eVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0
MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQogICAgIHdyaXRlQmFycmllcih0
MSkKLSAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XQorICAg
IHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdCiAgICAgZGlzcGF0
Y2goNSkKIAotLm9wUHV0QnlWYWxFbXB0eToKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHk6
CiAgICAgaWYgVkFMVUVfUFJPRklMRVIKLSAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6
bV9tYXlTdG9yZVRvSG9sZVt0M10KKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDEKKyAg
ICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0MV0KICAgICBl
bmQKLSAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAg
ICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJs
aWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgbG9hZGkgQXJyYXlTdG9y
YWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXSwgdDEKKyAgICBhZGRpIDEsIHQxCisgICAgYmll
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIHN0b3JlaSB0MSwgQXJyYXlTdG9yYWdlOjpt
X251bVZhbHVlc0luVmVjdG9yW3QwXQorICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlT
dG9yYWdlU3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQogICAgIHN0b3JlaSB0MSwgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0K
LSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5
U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI5NTk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw5IEBAIGVuZAogCiAjIENvbnN0YW50IGZvciBy
ZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCiBjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFz
Q29udGlndW91cyA9IDIKIGNvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKLWNvbnN0IEFsbEFycmF5
VHlwZXMgPSAxNQorY29uc3QgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSA9IDE2CiAKICMgVHlwZSBj
b25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1
NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZs
eSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHBy
b3BlcnR5Q2FwYWNpdHkgKyAxKTsKICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBtZXRob2QgaXMg
aGVyZSBub3QganVzdCBiZWNhdXNlIGl0J3MgaGFuZHksIGJ1dCB0byByZW1pbmQgeW91IHRoYXQK
KyAgICAvLyB0aGUgd2hvbGUgcG9pbnQgb2YgYnV0dGVyZmxpZXMgaXMgdG8gZG8gZXZpbCBwb2lu
dGVyIGFyaXRobWV0aWMuCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbVBvaW50ZXIoY2hhciog
cHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4o
cHRyKTsKKyAgICB9CisgICAgCisgICAgY2hhciogcG9pbnRlcigpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyB9CisgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5k
ZXhpbmdIZWFkZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGlu
Z0hlYWRlcjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQpAQCAtNzAsOSArNzksMTYgQEAgcHVi
bGljOgogICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsg
cmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgUHJvcGVydHlTdG9yYWdl
IHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3Rv
cmFnZSgpOyB9CiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29u
c3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICAK
KyAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5w
dWJsaWNMZW5ndGgoKTsgfQorICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGlu
ZGV4aW5nSGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRQdWJsaWNMZW5n
dGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXItPnNldFB1YmxpY0xlbmd0aCh2YWx1
ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGlu
Z0hlYWRlci0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVlKTsgfQorICAgIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0
dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJy
aWVyPFVua25vd24+ID4oKTsgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3RvcmFn
ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFy
cmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNTRVJUKGhhc0luZGV4aW5n
SGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoaGFzQXJyYXlT
dG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBBU1NFUlQobnVtYmVyT2ZT
bG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpKTsKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRvIHJld3JpdGUgdGhp
cyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAgLTE2Myw3ICsxNjMsNyBA
QCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RyCiAKIGlubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1i
ZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gdW5z
aGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsMTcg
QEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdAogCiBpbmxpbmUgc2l6
ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJl
dHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIAor
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVy
biBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVy
dGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDEyOTU5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7
CiAKIC8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7Citz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAgICAgICAgICA9IDI7CiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgICA9IDE2Owog
CkBAIC00Miw5ICs0MywxMSBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRl
eGVkCiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgPSBIYXND
b250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UgICAgICAgID0gSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAgICAgICAgICAg
ICAgICA9IElzQXJyYXk7IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXkiIGJ1dCB0aGlz
IHdvdWxkIGxlYWQgdG8gZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAgID0gSXNBcnJh
eSB8IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZSAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlICAgID0gSXNB
cnJheSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU1LDEwIEBAIHN0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJheTogICAgICAg
ICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91czogICAgICAg
ICAgIFwKKyAgICBjYXN0IEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBBUlJBWV9XSVRI
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZQpAQCAtNzYsNiArODMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0luZGV4aW5n
SGVhZGVyKEluZAogICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBlKTsKIH0KIAor
c3RhdGljIGlubGluZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSkKK3sKKyAgICByZXR1cm4gIShpbmRleGluZ1R5cGUgJiBIYXNDb250aWd1b3VzKTsKK30KKwog
c3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3RvcmFnZShJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlKQogewogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwg
SGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNiArMzk1LDE2
IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKICAgICBjYXNlIEFycmF5
Q2xhc3M6CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGgtLSkK
KyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgbV9i
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOworICAgIH0KKyAgICAgICAgCiAgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAg
IApAQCAtNDUxLDYgKzQ2MSwyNSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhd
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5E
RVgpIHsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywg
bGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250
aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgbGVuZ3RoLCB2YWx1ZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogICAgICAgICBp
ZiAoYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShleGVjLCBvbGRMZW5ndGgsIHZh
bHVlLCB0cnVlKSkgewpAQCAtNTc5LDYgKzYwOCwxOSBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1l
cmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47
CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICBpZiAo
IW1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCFtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBxc29ydChtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCksIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFT
b3J0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwpAQCAt
NjA4LDYgKzY1MCw3IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUK
ICAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwg
cHJpbWl0aXZlIHZhbHVlcy4KICAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUs
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsK
ICAgICAgICAgCisgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdl
VG9Db250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKQEAgLTYxNiw4NiArNjU5LDExMSBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1l
cmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogfQogCi12b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0
YXRlKiBleGVjKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNB
cnJheTo6c2hvcnRDb21wYWN0ZWRWZWN0b3IoV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwg
dW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5n
TW9kZSgpKTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewotICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQogICAgICAg
ICByZXR1cm47CisgICAgCisgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBz
dHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNv
cnQgYmFzZWQgb24gdGhhdC4KKyAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVt
ZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJl
cyBhIGxhcmdlIHRlbXBvcmFyeQorICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0
cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBt
ZXRob2RzIHRoYXQgcmV0dXJuCisgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyBy
ZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQu
CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4
ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFw
LmdldCgpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICAgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBl
eHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhh
dC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRv
aW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0
ZW1wb3JhcnkKLSAgICAgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZy
b20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMg
dGhhdCByZXR1cm4KLSAgICAgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1
bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCi0g
ICAgICAgIAotICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAg
ICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CisgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZh
bHVlcyk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMp
OwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVl
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZDsgaSsrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOwot
ICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgICAgICBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQ
cmltaXRpdmUoKTsKLSAgICAgICAgfQorICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgpOworICAgICAgICBBU1NF
UlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1
ZTsKKyAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgfQogICAgICAgICAKLSAgICAgICAg
Ly8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBv
biBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAgICAgIC8vIGEgdG9TdHJpbmcgY2Fs
bCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3Ag
Y29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRl
cgorICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAgICAK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQ7IGkrKykKLSAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3Qu
dG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9
IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSGVhcDo6
aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJp
bmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4g
VGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgICAgICAvLyB0aGFuIE8oTiBsb2cgTikuCisg
ICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3Jp
dGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRo
ZXIKKyAgICAvLyB0aGFuIE8oTiBsb2cgTikuCiAgICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JU
KQotICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICAgICAgcXNv
cnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIp
LCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0
cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotI2Vsc2UKLSAgICAgICAg
Ly8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUg
YSBzdGFibGUgc29ydC4KLSAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lm
eSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFi
bGUgc29ydC4KKyAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQogICAgICAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgZWxzZQorICAgICAgICBtZXJnZXNv
cnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIp
LCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogVGhl
IHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0
LgorICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwg
YnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCisgICAgcXNv
cnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIp
LCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCisgICAgCisgICAgLy8gSWYg
dGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3Ig
dmVjdG9yIHN0b3JhZ2UsCisgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhl
IG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUpIHsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGVuc3VyZUNvbnRp
Z3VvdXNMZW5ndGgocmVsZXZhbnRMZW5ndGgpOworICAgICAgICBicmVhazsKICAgICAgICAgCi0g
ICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVu
Z3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICAg
ICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKSB7Ci0gICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRh
KCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8IHJlbGV2YW50
TGVuZ3RoKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxE
YXRhKCksIHJlbGV2YW50TGVuZ3RoKTsKICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0
aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmIChzdG9y
YWdlLT5sZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0
TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKysp
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWVzW2ldLmZpcnN0KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgIH0K
KworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJl
Z2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworfQorCit2b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJ
bmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwor
ICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICBzb3J0Q29tcGFjdGVkVmVj
dG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRp
bmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFy
c2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgc29ydENv
bXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworCisgICAgICAgIGF0dGVt
cHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEs
IHN0b3JhZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTc4OSw2ICs4
NTcsNzggQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGNh
c2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5
V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRp
b25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KKyAgICAg
ICAgCisgICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBi
dXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAgICAgLy8gaWYgYSBs
YXJnZXIgYXJyYXkgaXMgcGFzc2VkLgorICAgICAgICBBU1NFUlQobV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKSk7CisgICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoIW1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFW
TFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0
aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rp
b24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFy
ZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFy
ZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
Lmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRv
cHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVu
Y3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVj
dG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0IGZy
b20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1V
bmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJh
eSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQg
aW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAoOyBu
dW1EZWZpbmVkIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK251bURlZmluZWQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbnVtRGVm
aW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1E
ZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1E
ZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5l
ZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZCA9
PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
KHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID09IG51bURlZmluZWQpOworICAgICAg
ICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAg
ICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0
b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkICYmIGkgPCBtX2J1dHRlcmxmeS0+cHVi
bGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRl
cl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kp
CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFVuZGVmaW5lZCgp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTkwOCw2ICsxMDQ4LDEy
IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsgKytpKQorICAgICAgICAgICAgYXJncy5hcHBlbmQobV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgY2FzZSBB
UlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwpAQCAtOTM5LDYg
KzEwODUsMTIgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKgogICAg
IGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFy
cmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgY2FsbEZyYW1lLT5z
ZXRBcmd1bWVudChpLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICB1bnNpZ25lZCBpID0gMDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEyOTU5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtOTgsNiArOTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpOwogICAgICAg
ICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgor
ICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoV3JpdGVCYXJyaWVyPFVua25vd24+KiBi
ZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgsIAogCiAgICAgICAgIHZvaWQgc2V0TGVuZ3Ro
V3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7CiAKQEAgLTEwNiw2ICsxMDksMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpT
R2xvYmFsRGF0YSYpOwogICAgIH07CiAKKyAgICBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250
aWd1b3VzQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgeworICAgICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7CisgICAgICAgIGhl
YWRlci5zZXRWZWN0b3JMZW5ndGgoc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU5HVEgp
KTsKKyAgICAgICAgaGVhZGVyLnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICByZXR1
cm4gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVl
LCBoZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7CiAg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCkBAIC0xMjEs
NyArMTMzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJy
YXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAg
ICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEs
IGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKCFpbml0aWFsTGVuZ3RoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICB8
fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1
dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfQogICAgICAgICBK
U0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2Jh
bERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwog
ICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVy
biBhcnJheTsKQEAgLTEzMywxNSArMTUzLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBp
ZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0
dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9y
TGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwotICAgICAgICBz
dG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7
CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdp
dGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICB2b2lkKiB0ZW1wOwor
ICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAgICAgICAg
ICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAg
IGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0
dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgICpidXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZl
Y3Rvckxlbmd0aCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAw
OworICAgICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEs
OCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9jYWxs
YmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxi
YWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAgbV9hcnJheVBy
b3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKLSAgICBtX2FycmF5
U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCks
IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQ29udGlndW91
cykpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkp
OwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsK
ICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKIApAQCAtNDA3LDYgKzQwOCw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZShKU0dsb2IKICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxvY2F0aW9ucyB0aGF0IGxvYWQgdGhlIGFwcHJvcHJp
YXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8gdGhpcyBvYmplY3Qgbm93IGxvYWQgYSBzdHJ1Y3R1
cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkpOworICAgIG1fYXJyYXlT
dHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5U3Ry
dWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxs
IG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQgc3RvcmFnZSBzd2l0Y2ggdG8gdGhlIHNsb3cga2lu
ZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFnZS4KQEAgLTQ4Miw2ICs0ODQsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fbmFtZVNjb3BlU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9hcmd1bWVudHNTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2FycmF5U3RydWN0dXJlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uYW1lU2NvcGVTdHJ1Y3R1
cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJndW1lbnRzU3RydWN0dXJl
OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlOyAvLyBU
aGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2Ug
ZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IC8vIFRoaXMgZ2V0cyBzZXQgdG8g
bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBh
IGJhZCB0aW1lLgogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0
dXJlRm9yU2xvd1B1dDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9ib29sZWFu
T2JqZWN0U3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxi
YWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CkBAIC0yNjIsNyArMjYzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFN0cnVjdHVyZSogbmFtZVNjb3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcmd1
bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1N0cnVjdHVyZS5nZXQo
KTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9hcnJheVN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0
dXJlV2l0aEFycmF5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmVXaXRo
QXJyYXlTdG9yYWdlLmdldCgpOyB9CiAgICAgICAgIHZvaWQqIGFkZHJlc3NPZkFycmF5U3RydWN0
dXJlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogYWRkcmVz
c09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1
Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYm9vbGVhbk9iamVj
dFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5nZXQo
KTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAg
ICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjk1OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMiwyNCArMTMyLDM5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBN
YXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OworICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOworICAgICAgICAgICAgc2l6
ZV90IGNvdW50OworICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5
LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAg
ICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgewotICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgY3VycmVu
dFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAg
ICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCk7IC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuIFdoeSBpc24ndCB0aGlzIHB1YmxpY0xl
bmd0aCgpPwogICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CkBAIC0xNTksNiArMTc0
LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAK
ICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0
dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwKQpAQCAtMjM1LDYgKzI1MywxMyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmdldCgpOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlm
IChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpAQCAtMzUyLDYgKzM3NywyMSBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkgPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW3Byb3BlcnR5TmFtZV0uc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5zZXRQdWJsaWNMZW5ndGgocHJvcGVydHlOYW1lICsgMSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA8
IG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKQEAgLTM2MiwxNSArNDAyLDE4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCAKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3Qg
PSBzdG9yYWdlLT5tX3ZlY3Rvcltwcm9wZXJ0eU5hbWVdOwogICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAgICAgCisgICAgICAgIEpTVmFsdWUgb2xkID0g
dmFsdWVTbG90LmdldCgpOworICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICAKICAgICAgICAgLy8gVXBkYXRlIGxlbmd0
aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID49IGxlbmd0aCkgewogICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsg
MTsKICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOwogICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWx1
ZVNsb3QpCisgICAgICAgIH0gZWxzZSBpZiAoIW9sZCkgewogICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAKLSAgICAgICAgdmFsdWVTbG90LnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgICAgIGF0dGVt
cHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dG9yYWdlKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAg
LTQ0NCw2ICs0ODcsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5
SQogdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8v
IE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQsIGFzIGl0IHdpbGwgcGVyZm9ybSB0
d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCisgICAgICAgIC8vIHRoaXMgY2FzZSBp
ZiB3ZSBldmVyIGNhcmVkLgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVu
QXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1Rv
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC00OTEsOSArNTM5LDEw
NCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyCiAgICAgcmV0dXJu
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOwogfQog
CitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRp
b24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoaGFzQ29udGlndW91cyhz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBwdWJsaWNM
ZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHByb3Bl
cnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNp
Z25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOworICAgIAor
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgCisgICAgbWVtY3B5KAorICAg
ICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAg
ICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAg
ICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIAorICAgIEFy
cmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgbmV3U3Rv
cmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3U3RvcmFnZS0+bV9zcGFyc2VN
YXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3U3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IHB1YmxpY0xlbmd0aDsKKyNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQorICAgIG5ld1N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7
CisgICAgbmV3U3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYK
KyAgICBtZW1jcHkoCisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yLCBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpLCBwdWJsaWNMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRC
dXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJl
dHVybiBuZXdTdG9yYWdlOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJu
IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkt
PnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpKTsKK30KKwordm9pZCBKU09iamVjdDo6Y29u
dmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgQVNTRVJUKGhhc0FycmF5U3Rv
cmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoIXNob3VsZFVz
ZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPQorICAgICAgICBCdXR0ZXJmbHk6ZnJvbVBvaW50ZXIobV9idXR0
ZXJmbHktPnBvaW50ZXIoKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisgICAg
dW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgIAorICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgo
dmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgCisgICAgLy8gU2hpZnQgdGhlIG5hbWVkIHByb3BlcnRp
ZXMgb3ZlciwgaWYgdGhlcmUgYXJlIHNvbWUuCisgICAgc2l6ZV90IHByb3BlcnR5U2l6ZSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CisgICAgaWYgKHByb3BlcnR5U2l6ZSkgeworICAg
ICAgICBtZW1tb3ZlKAorICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBTd2l0Y2hUb0NvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBu
ZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVy
biBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZpY2llbnQsIGlmIHdlIGNhcmVkLgorICAgICAg
ICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCkpOwogICAgICAgICAKQEAgLTUxMyw2ICs2NTYsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJy
YXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7CkBAIC01NTYsOCArNzA0LDcgQEAg
dm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YQogICAgIGlmIChzaG91bGRV
c2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7
Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVjdHVyZSk7CisgICAgc3dpdGNo
VG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogfQogCiBib29sIEpTT2JqZWN0Ojpz
ZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFs
dWUgcHJvdG90eXBlKQpAQCAtNjkxLDYgKzgzOCwxMiBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAvLyBUaGVyZSBpcyBhbiBleHRyZW1lbHkgb2J2aW91cyBj
YXNlIHRoYXQgd2UgY291bGQgaGFuZGxlIGhlcmUgKGRlbGV0aW5nIHRoZSBsYXN0IGVsZW1lbnQp
CisgICAgICAgIC8vIGJ1dCBJIGRvbid0IGZlZWwgbGlrZSB3cml0aW5nIHRlc3RzIGZvciBpdCwg
c28gSSdsbCBwdW50IGl0LgorICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAgICAgICAg
CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIApAQCAtODY0LDYgKzEwMTcsMTIgQEAgdm9pZCBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAKQEAgLTEzMjUsNiArMTQ4NCw1NyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgp
KTsKKyAgICAKKyAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRoZXIg
Z3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyBv
ciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KKyAgICBBU1NFUlQoaSA+IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSB8fCBpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgaWYgKGkgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpICYmIGkgPCBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9uZSBjYXNlIHdlIGNhbiBoYW5k
bGUuIEFuZCB3ZSBoYW5kbGUgaXQgYnkgZ3Jvd2luZyB0aGUgY29udGlndW91cworICAgICAgICAv
LyBzdG9yYWdlLgorICAgICAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbigK
KyAgICAgICAgICAgIHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSksCisgICAgICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsK
KyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAg
ICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChpICsgMSk7CisgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcHV0QnlJbmRleFdp
dGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRy
aWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIXN0cnVjdHVy
ZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkp
OworICAgIAorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKyAgICAKKyAgICBpZiAoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpICYmIGkgPCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBBbGxvY2F0ZUFycmF5U3RvcmFnZSwKKyAgICAg
ICAgICAgIGdldE5ld1ZlY3Rvckxlbmd0aChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCksIG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKGkg
Pj0gc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEp
OworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7Cisg
ICAgU3BhcnNlQXJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2Jh
bERhdGEpOworICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIGZhbHNlKTsK
K30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7
CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAt
MTMzOCw2ICsxNTQ4LDEwIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW4KICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmICghaSAmJiAhc3RydWN0dXJlKCktPm5lZWRz
U2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3Vz
KGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewogICAgICAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwg
dmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzQ5LDYgKzE1NjMsMTEgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAg
cHV0QnlJbmRleEJleW9uZFZlY3RvckxFbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhl
eGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICAvLyBObyBvd24gcHJvcGVydHkgcHJlc2VudCBp
biB0aGUgdmVjdG9yLCBidXQgdGhlcmUgbWlnaHQgYmUgaW4gdGhlIHNwYXJzZSBtYXAhCkBAIC0x
MzcxLDggKzE1OTAsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSog
c3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhhc0FycmF5
U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoYXJyYXlT
dG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsK
IApAQCAtMTQ1Niw2ICsxNjc3LDEwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG8KICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAgICAgICBp
ZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCiAgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAo
IWkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDEp
WzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkg
fHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAs
IDApKTsKICAgICAgICAgCkBAIC0xNDY0LDYgKzE2ODksMTUgQEAgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAg
IGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywg
bW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMTQ4NiwxMiArMTcyMCw3IEBAIEFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICghY3VycmVudFZlY3Rv
ckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0
aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5
IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0
aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExl
bmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlz
IGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJl
ZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVlUGx1c09u
ZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoaW5jcmVh
c2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUxMSw5ICsxNzQwLDEwIEBAIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9yTGVuZ3Ro
ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0go
KTsKQEAgLTE1NjEsNiArMTc5MSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxl
bmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNv
bnRpZ3VvdXNMZW5ndGgodW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChoYXNDb250aWd1
b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIGlmIChtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
LAorICAgICAgICAgICAgbGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAg
IG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKKyAgICAgICAgbV9idXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0
Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUp
OwpAQCAtMTU4OSw2ICsxODM1LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCksIDApOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0
aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZp
c2lvbiAxMjk1OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEsNiArMTYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMDcsNiArMjA5LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsK
ICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjY3LDYgKzI3Myw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPD0gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpCisgICAgICAgICAgICAgICAgICAgICYmIGkgPCBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICAgICAg
ICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KTsKQEAgLTI4NSw2ICsyOTQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
ICAgIHJldHVybiBpIDw9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKQorICAgICAgICAgICAg
ICAgICAgICAmJiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjk2LDE1ICszMDgsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8PSBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAg
IGlmIChpID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAgICAg
eC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsK
ICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0
b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMx
NSw2ICszMzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUlu
ZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAg
ICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAg
ICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKQEAgLTMz
MSw2ICszNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOwpAQCAt
NTM0LDE2ICs1NjIsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGFscmVhZHkuCiAg
ICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBjb252ZXJ0IHRvIGNvbnRpZ3Vv
dXMgaW5kZXhpbmcgc3RvcmFnZS4gUmV0dXJucyB0cnVlIGlmIGl0IHdhcyBkb25lLAorICAgICAg
ICAvLyBvciBmYWxzZSBpZiBpdCBiYWlsZWQgb3V0IGZvciBhbnkgcmVhc29uLiBBbHNvIHJldHVy
bnMgdHJ1ZSBpZiB0aGUgYXJyYXkgd2FzIGFscmVhZHkKKyAgICAgICAgLy8gY29udGlndW91cy4K
KyAgICAgICAgYm9vbCBhdHRlbXB0VG9Db252ZXJ0VG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEpOworICAgICAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2Jh
bERhdGEsIDApOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb0NvbnZlcnRBcnJh
eVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTYwOSwxMSArNjU3
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJy
YXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAg
IEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAog
ICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJv
b2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCisgICAgICAgIHZvaWQg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwogICAgICAgICB2b2lk
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlT
dG9yYWdlKik7CiAKICAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwpAQCAtNjI0LDcgKzY3NywzOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhKU0ds
b2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0
QnlJbmRleE9uSG9sZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQg
c2V0SW5kZXhRdWlja2x5IHRvIHN1Y2NlZWQgYW5kIHlvdSdyZSBzdXJlIHRoYXQKKyAgICAgICAg
Ly8gdGhlIGFycmF5IGlzIGNvbnRpZ3VvdXMuCisgICAgICAgIHZvaWQgZW5zdXJlQ29udGlndW91
c0xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpOwogCisgICAgICAgIGJvb2wgYXR0ZW1wdFRvQ29udmVy
dEFycmF5U3RvcmFnZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5
U3RvcmFnZSogc3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGhhc0FycmF5
U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgIEFTU0VS
VCghc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAg
ICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChzdG9y
YWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRp
Z3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQoIXNob3VsZFVzZVNsb3dQdXQoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICAvLyBPaCwgeW91IGRpZCB0aGlz
IGNvbnZlcnNpb24gYmVmb3JlPyBXZWxsLCB5b3UgZG9uJ3QgZ2V0IHRvIGRvIGl0IGFnYWluLiBC
ZWNhdXNlCisgICAgICAgICAgICAvLyB0aHJhc2hpbmcgaXMgbmV2ZXIgZ29vZC4KKyAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgSGFk
QXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IC8vIE9oLCB5b3UndmUgdXNlZCBzaGlmdCBhbmQgdW5zaGlmdD8gQ2hhbmNlcyBhcmUgeW91J2xs
IHVzZSBpdCBhZ2FpbiwgYW5kIHdlJ2xsIGhhdmUKKyAgICAgICAgICAgIC8vIHRvIGNvbnZlcnQg
YmFjay4gTm8gY29udGlndW91cyBhcnJheXMgZm9yIHlvdSEKKyAgICAgICAgICAgIGlmIChzdG9y
YWdlLT5tX2luZGV4QmlhcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjb252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRh
LCBzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAgICAgICAgIApAQCAtNjQ5LDYgKzczMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VB
cnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQp
OwogICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBkb3VibGVzIGFzIHB1dERpcmVjdCgpIGJlY2F1
c2UgKGEpIGNvbnRpZ3VvdXMgaW1wbGllcyB0aGF0IHRoZXJlIGFyZSBub3QgaW5kZXhlZCBzZXR0
ZXJzIG9yIGluZGV4ZWQgcmVhZG9ubGllcywgYW5kIChiKSB0aGlzIGlzIG9ubHkgZm9yIGNhc2Vz
IHdoZXJlIHdlIGRvbid0IHdhbnQgdGhlIHByb3BlcnR5IHRvIGhhdmUgYW55IGF0dHJpYnV0ZXMu
CisgICAgICAgIHZvaWQgcHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5n
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSk7CisgICAgICAgIAogICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKICAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3Rv
cmFnZSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKQEAgLTY1OCw2ICs3
NDUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3Rv
cmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIGNvbnZlcnRD
b250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3Rv
cmFnZSopOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5
OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDEyOTU5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMywxMSArMzIzLDE3IEBAIGJvb2wg
U3RydWN0dXJlOjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXIKICAgICB9CiB9CiAKLU5vblByb3Bl
cnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpIGNv
bnN0Citib29sIFN0cnVjdHVyZTo6bmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKKyAg
ICAgICAgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKTsKK30KKworTm9uUHJv
cGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlv
bigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5
cGUoKSkpOwogICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhl
ZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKSkKKyAgICBp
ZiAobmVlZHNTbG93UHV0SW5kZXhpbmcoKSkKICAgICAgICAgcmV0dXJuIEFsbG9jYXRlU2xvd1B1
dEFycmF5U3RvcmFnZTsKICAgICAKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIGJvb2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nl
cygpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dl
c3RlZEluZGV4aW5nVHJhbnNpdGlvbigpIGNvbnN0OworICAgICAgICBib29sIG5lZWRzU2xvd1B1
dEluZGV4aW5nKCkgY29uc3Q7CisgICAgICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiBzdWdnZXN0
ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Qu
Z2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaQogLy8gU3VwcG9ydCBmb3Ig
YXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHBy
b3BlcnRpZXMuCiAvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlv
biBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgogZW51bSBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gewor
ICAgIEFsbG9jYXRlQ29udGlndW91cywKKyAgICBTd2l0Y2hUb0NvbnRpZ3VvdXMsCiAgICAgQWxs
b2NhdGVBcnJheVN0b3JhZ2UsCiAgICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlLAogICAg
IFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSwKQEAgLTU3LDEyICs1OSwxOSBAQCBpbmxpbmUg
dW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5CiBpbmxpbmUgSW5kZXhpbmdUeXBlIG5l
d0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
IHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxv
Y2F0ZUNvbnRpZ3VvdXM6CisgICAgICAgIEFTU0VSVCghKG9sZFR5cGUgJiAoSGFzQXJyYXlTdG9y
YWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUg
fCBIYXNDb250aWd1b3VzOworICAgIGNhc2UgU3dpdGNoVG9Db250aWd1b3VzOgorICAgICAgICBB
U1NFUlQob2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgIHJldHVybiAob2xkVHlw
ZSAmIH5IYXNBcnJheVN0b3JhZ2UpIHwgKEhhc0NvbnRpZ3VvdXMgfCBIYWRBcnJheVN0b3JhZ2Up
OwogICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBl
IHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGln
dW91cykgfCBIYXNBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0
b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsK
KyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzU2xvd1B1dEFy
cmF5U3RvcmFnZTsKICAgICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAg
ICAgQVNTRVJUKG9sZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICBBU1NFUlQoIShv
bGRUeXBlICYgSGFzQ29udGlndW91cykpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFz
QXJyYXlTdG9yYWdlKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBZGRJbmRl
eGVkQWNjZXNzb3JzOgogICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNj
ZXNzb3JzOwpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTI5NTk5KQorKysgU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE2IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGhhc1R3b08KICAgICByZXR1cm4gIWhh
c1plcm9Pck9uZUJpdHNTZXQodmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgVCB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhUIHZhbHVlKQoreworICAgIC8vIE1h
dGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgLy8gICAodmFsdWUgKiAzICsgMSkgLyAy
OworICAgIC8vIG9yOgorICAgIC8vICAgKHVuc2lnbmVkKWNlaWwodmFsdWUgKiAxLjUpKTsKKyAg
ICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgIHJl
dHVybiB2YWx1ZSArICh2YWx1ZSA+PiAxKSArICh2YWx1ZSAmIDEpOworfQorCiAjaWYgIUNPTVBJ
TEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhT1MoU09MQVJJUykKIHVzaW5nIHN0ZDo6
aXNmaW5pdGU7CiAjaWYgIUNPTVBJTEVSX1FVSVJLKEdDQzExX0dMT0JBTF9JU0lORl9JU05BTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165861</attachid>
            <date>2012-09-26 13:25:27 -0700</date>
            <delta_ts>2012-09-27 00:17:50 -0700</delta_ts>
            <desc>fixing things</desc>
            <filename>contiguous_patch_8.diff</filename>
            <type>text/plain</type>
            <size>199787</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0wOS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSgpIGlnbm9yZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
ZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcHJldmVudGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2
Myw2ICsxNjMsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0Mz
REIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8q
IERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi87IH07
CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VF
MDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTkzMyw2ICs5MzQsNyBAQAogCQkwRjc3
MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RC
MSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU3ltYm9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjQ3Miw1NiArMjQ3NCw1NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEY2Mzk0
NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEY2Mzk0NTIx
NUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovLAotCQkJCTBGNTZBMUQ0MTUwMDFD
RjIwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKLQkJCQkwRjU2QTFEMTE1MDAw
RjMxMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovLAotCQkJCTBGQjU0NjdDMTRGNUNG
RDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKLQkJCQkw
RkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
ICovLAotCQkJCTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgKi8sCi0JCQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmggKi8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVj
b2RlQ29udmVudGlvbnMuaCAqLywKLQkJCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJ
bnRDYWxsTGlua0luZm8uaCAqLywKLQkJCQkwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3Bl
cmFuZHMuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyog
UHV0S2luZC5oICovLAorCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8u
aCAqLywKKwkJCQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAq
LywKKwkJCQkwRjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJ
CQkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKIAkJ
CQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLywKLQkJCQkw
RjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5
MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5
NzE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovLAotCQkJCTBG
OTMzMjk4MTRDQTdEQzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICovLAotCQkJ
CTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkw
RjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGRjQy
NzZFMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCAqLywKLQkJCQkw
RkY0Mjc2RjE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5oICovLAotCQkJ
CTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLywKIAkJCQkwRjBC
ODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQu
aCAqLywKLQkJCQkwRjBCODNCNjE0QkNGOERGMDA4ODVCNEYgLyogR2xvYmFsUmVzb2x2ZUluZm8u
aCAqLywKLQkJCQkwRjBCODNCMjE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJbmZv
LmNwcCAqLywKLQkJCQkwRjBCODNCMzE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJ
bmZvLmggKi8sCi0JCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5j
cHAgKi8sCi0JCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICov
LAotCQkJCUZFQjYzQUEyMTU5QjlEQTMwMDg5MzJBNiAvKiBDb21tZW50LmggKi8sCi0JCQkJMEYw
QjgzQUMxNEJDRjYwMjAwODg1QjRGIC8qIExpbmVJbmZvLmggKi8sCi0JCQkJMEYwQjgzQUExNEJD
RjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCAqLywKLQkJCQkwRjBCODNBODE0
QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywKLQkJCQkwRjBCODNBNTE0QkNGNTA0
MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQk5NjlBMDc5MDBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQk5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEgLyogQ29k
ZUJsb2NrLmggKi8sCiAJCQkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCAqLywKKwkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKKwkJ
CQlGRUI2M0FBMjE1OUI5REEzMDA4OTMyQTYgLyogQ29tbWVudC5oICovLAogCQkJCTBGNDI2QTRB
MTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCiAJCQkJMEZCQzBBRTQxNDk2QzdD
MTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLywKIAkJCQkwRkJDMEFFNTE0OTZDN0Mx
MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLywKIAkJCQk5NjlBMDc5MjBFRDFEM0FFMDBG
MUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovLAorCQkJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJC
MSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKKwkJCQkwRjU2QTFEMTE1MDAwRjMxMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovLAorCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0
RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggKi8sCisJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVG
M0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeUlkU3RhdHVzLmggKi8sCisJCQkJMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8q
IEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCisJCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8q
IEhhbmRsZXJJbmZvLmggKi8sCiAJCQkJOTY5QTA3OTMwRUQxRDNBRTAwRjFGNjgxIC8qIEluc3Ry
dWN0aW9uLmggKi8sCiAJCQkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5j
cHAgKi8sCiAJCQkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovLAor
CQkJCTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgKi8sCisJCQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmggKi8sCisJCQkJMEYwQjgzQUMxNEJDRjYwMjAwODg1QjRGIC8qIExpbmVJbmZvLmgg
Ki8sCisJCQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8sCisJCQkJMEYwQjgzQjIxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5j
cHAgKi8sCisJCQkJMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5m
by5oICovLAorCQkJCTBGOTMzMjk3MTRDQTdEQzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0
YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOTgxNENBN0RDMTAwODVGM0M2IC8qIE1ldGhvZENhbGxM
aW5rU3RhdHVzLmggKi8sCisJCQkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovLAorCQkJCTBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJOTY5QTA3OTQwRUQx
RDNBRTAwRjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFG
NjgxIC8qIE9wY29kZS5oICovLAotCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVj
dWxhdGVkVHlwZS5jcHAgKi8sCi0JCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFNwZWN1
bGF0ZWRUeXBlLmggKi8sCisJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRz
LmggKi8sCisJCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuY3BwICovLAorCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggKi8sCisJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAq
LywKKwkJCQkwRkY0Mjc2RTE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5j
cHAgKi8sCisJCQkJMEZGNDI3NkYxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0
dXMuaCAqLywKIAkJCQkxNDI5RDg4MzBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNw
cCAqLywKIAkJCQkxNDI5RDg4NDBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmggKi8s
CisJCQkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCAqLywK
KwkJCQkwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCAqLywKKwkJ
CQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8sCiAJCQkJMEY3
NjZEMzYxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwICovLAogCQkJCTBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50LmggKi8sCiAJCQkJQkNDRjBEMEIwRUYwQjhBNTAwNDEzQzhGIC8qIFN0
cnVjdHVyZVN0dWJJbmZvLmNwcCAqLywKQEAgLTI5NDksNiArMjk1Miw3IEBACiAJCQkJMEZCN0Yz
OUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0Yz
OUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYg
KzIzOSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChq
dW1wKCkpOwogICAgIH0KKworICAgIFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNoVGVzdDMy
KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sg
PSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAo
YnJhbmNoVGVzdDMyKGNvbmQsIHJlZywgbWFzaykpOworICAgIH0KICNlbmRpZgogCiAgICAgdm9p
ZCBqdW1wKExhYmVsIHRhcmdldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeVZhbEluZm9f
aAorI2RlZmluZSBCeVZhbEluZm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSW5k
ZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gSklUQXJyYXlNb2RlIHsgSklUQ29udGlndW91cywgSklUQXJyYXlTdG9yYWdl
IH07CisKK2lubGluZSBib29sIGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUp
Cit7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQ29udGlndW91czsKKyAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJu
IEpJVEFycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAg
ICByZXR1cm4gSklUQ29udGlndW91czsKKyAgICB9Cit9CisKK3N0cnVjdCBCeVZhbEluZm8gewor
ICAgIEJ5VmFsSW5mbygpIHsgfQorICAgIAorICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlLCBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lLCBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Ns
b3dQYXRoKQorICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
LCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKKyAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2Rl
KQorICAgICAgICAsIGJhZFR5cGVKdW1wVG9Eb25lKGJhZFR5cGVKdW1wVG9Eb25lKQorICAgICAg
ICAsIHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9j
YXRpb25KdW1wIGJhZFR5cGVKdW1wOworICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7IC8vIFRo
ZSBhcnJheSBtb2RlIHRoYXQgd2FzIGJha2VkIGludG8gdGhlIGlubGluZSBKSVQgY29kZS4KKyAg
ICBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lOworICAgIGludDE2X3QgcmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGg7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKK307CisK
K2lubGluZSB1bnNpZ25lZCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5m
bykKK3sKKyAgICByZXR1cm4gaW5mby0+Ynl0ZWNvZGVJbmRleDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gQnlWYWxJbmZvX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19o
CiAKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNp
bmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgi
CiAjaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKQEAgLTIwOSw2
ICsyMTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgICAgIAorICAgICAgICBC
eVZhbEluZm8mIGdldEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gKihiaW5hcnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZCwg
Z2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleD4obV9ieVZhbEluZm9zLmJlZ2luKCksIG1fYnlWYWxJ
bmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgfQogCiAgICAgICAgIENhbGxM
aW5rSW5mbyYgZ2V0Q2FsbExpbmtJbmZvKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykK
ICAgICAgICAgewpAQCAtNjEwLDYgKzYxNiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX3N0cnVj
dHVyZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CiAgICAgICAgIHNpemVfdCBudW1iZXJPZlN0cnVj
dHVyZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUo
KTsgfQogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1YkluZm8oaW50IGlu
ZGV4KSB7IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJbmZvc1tpbmRleF07IH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZCeVZhbEluZm9zKHNpemVfdCBzaXplKSB7IG1fYnlWYWxJ
bmZvcy5ncm93KHNpemUpOyB9CisgICAgICAgIHNpemVfdCBudW1iZXJPZkJ5VmFsSW5mb3MoKSBj
b25zdCB7IHJldHVybiBtX2J5VmFsSW5mb3Muc2l6ZSgpOyB9CisgICAgICAgIEJ5VmFsSW5mbyYg
YnlWYWxJbmZvKHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9ieVZhbEluZm9zW2luZGV4XTsgfQog
CiAgICAgICAgIHZvaWQgYWRkR2xvYmFsUmVzb2x2ZUluZm8odW5zaWduZWQgZ2xvYmFsUmVzb2x2
ZUluc3RydWN0aW9uKQogICAgICAgICB7CkBAIC0xMjg5LDYgKzEyOTksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVT
dHViSW5mbz4gbV9zdHJ1Y3R1cmVTdHViSW5mb3M7CisgICAgICAgIFZlY3RvcjxCeVZhbEluZm8+
IG1fYnlWYWxJbmZvczsKICAgICAgICAgVmVjdG9yPEdsb2JhbFJlc29sdmVJbmZvPiBtX2dsb2Jh
bFJlc29sdmVJbmZvczsKICAgICAgICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0lu
Zm9zOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbExpbmtJbmZvPiBtX21ldGhvZENhbGxMaW5r
SW5mb3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OSwxMiArODU5LDE2IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3Ao
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElH
VU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKQEAgLTkwOCw2ICs5MTIsOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MjQsMTEgKzkz
MSwxNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19U
QUlMX01PREVTOgogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgog
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgor
ICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBP
VVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NU
T1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAg
Y2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzNjcsNyArMTM4MCw5IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzogLy8gVGhlc2Ugb25seSBnZXQgYSBDaGVja0FycmF5
IGZvciBHZXRBcnJheUxlbmd0aAogICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGZpbHRlciBh
bnl0aGluZyBtZWFuaW5nZnVsIHJpZ2h0IG5vdy4gV2UgbWF5IHdhbnQgdG8gYWRkCiAgICAgICAg
ICAgICAvLyBDRkEgdHJhY2tpbmcgb2YgYXJyYXkgbW9kZSBzcGVjdWxhdGlvbnMsIGJ1dCB3ZSBk
b24ndCBoYXZlIHRoYXQsIHlldC4KICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKQEAgLTE0MTAsOSArMTQyNSwxMCBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnk6IHsKICAg
ICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgRUZGRUNURlVM
X05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfTU9ERVM6CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDE0IEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHAKICAg
ICAgICAgcmV0dXJuIEFycmF5OjpVbnByb2ZpbGVkOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5KToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUt
Pm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQotICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRv
IGdvIHRvIHNsb3cgcHV0IG1vZGUsIG9yIG5vdC4gVGhpcyBpcyBhIGRlY2VudCBndWVzcy4KKyAg
ICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsg
Ly8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1dCBtb2RlIG9y
IG5vdC4gV2UncmUgZ3Vlc3NpbmcgdGhhdCB3ZSBkb24ndCBuZWVkIHNsb3cgcHV0LgogICAgICAg
ICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkNvbnRp
Z3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkNv
bnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6Q29udGlndW91cyk7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hv
bGUoKSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3Vv
dXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4g
bWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMg
OiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENv
bnRpZ3VvdXNUb0hvbGUgOiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzKTsKICAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICBy
ZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmls
ZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6
QXJyYXlTdG9yYWdlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlKToKQEAgLTU2LDYgKzYyLDIwIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZl
ZChBcnJheVByb2ZpbGUqIHAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwg
YXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZSk6CiAgICAgICAgIHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAg
ICAgIHJldHVybiBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNB
cnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3Vv
dXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIGlmIChhY3Rpb24gPT0gQXJy
YXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAg
ICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM7CisgICAgICAgIHJldHVy
biBBcnJheTo6VW5kZWNpZGVkOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAm
JiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgICAgIHJl
dHVybiBBcnJheTo6VW5kZWNpZGVkOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8
IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICBpZiAoYWN0
aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vz
c2VzKCkpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7CkBA
IC0xNDQsNiArMTY0LDIyIEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUm
IHYKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhD
b250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1Rv
VGFpbDoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJv
dW5kczoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Np
bmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
c2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSGFzQ29udGlndW91cyk7CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpCisg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgpAQCAtMTcwLDcgKzIwNiw4IEBAIGJvb2wgbW9kZUFs
cmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiAoSGFzQXJy
YXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpCiAgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SXNBcnJheSk7CiAgICAgICAgIAotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQ
SElDX01PREVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKQEAgLTIyNSw2ICsyNjIsMjQgQEAgY29uc3QgY2hhciogbW9kZVRvU3Ry
aW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2Fz
ZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7CisgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzIjsKKyAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNUb1RhaWwi
OworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJu
ICJDb250aWd1b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c091dE9mQm91
bmRzIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAg
ICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiUG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgogICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlVG9Ib2xlOgpAQCAtMjQ5LDEwICszMDQsMjAgQEAgY29uc3QgY2hhciogbW9k
ZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29u
dGlndW91czoKKyAgICAgICAgcmV0dXJuICJCbGFua1RvQ29udGlndW91cyI7CiAgICAgY2FzZSBB
cnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJCbGFua1RvQXJyYXlT
dG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZToKICAg
ICAgICAgcmV0dXJuICJCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJCbGFu
a1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
T3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c09yQXJyYXlTdG9yYWdl
IjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAg
ICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7
CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7
CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNSBA
QCBlbnVtIE1vZGUgewogICAgIFN0cmluZywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50
aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBub24gc2lkZS1lZmZlY3Rp
bmcuCisgICAgQ29udGlndW91cywKKyAgICBDb250aWd1b3VzVG9UYWlsLAorICAgIENvbnRpZ3Vv
dXNPdXRPZkJvdW5kcywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNUb1RhaWwsCisgICAgQXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAorICAg
IFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cywKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNUb1RhaWwsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMs
CiAgICAgQXJyYXlTdG9yYWdlLAogICAgIEFycmF5U3RvcmFnZVRvSG9sZSwKICAgICBTbG93UHV0
QXJyYXlTdG9yYWdlLApAQCAtNjgsOCArNzcsMTYgQEAgZW51bSBNb2RlIHsKICAgICBQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAgIAogICAgIC8vIE1vZGVzIG9m
IGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlzIHNpZGUtZWZm
ZWN0aW5nLgorICAgIEJsYW5rVG9Db250aWd1b3VzLAogICAgIEJsYW5rVG9BcnJheVN0b3JhZ2Us
CiAgICAgQmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCisgICAgQmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKKyAgICAKKyAgICAvLyBNb2RlcyB0aGF0IGluZGljYXRlIHBvbHltb3Jw
aGljIGFycmF5IHN0b3JhZ2UuIFRoZXNlIGRvbid0IGJlbmVmaXQgZnJvbQorICAgIC8vIGFueSBj
aGVja2luZyBvciBzdG9yYWdlIENTRS4KKyAgICBDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisg
ICAgQXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAogICAgIAogICAgIEFyZ3VtZW50cywKICAgICBJ
bnQ4QXJyYXksCkBAIC04OSw2ICsxMDYsMzIgQEAgZW51bSBNb2RlIHsKIC8vIGhhdmUgdGhlIHdv
cmQgIkFycmF5U3RvcmFnZSIgaW4gdGhlbS4KIAogLy8gRmlyc3Q6IGhlbHBlcnMgZm9yIG5vbi1z
aWRlLWVmZmVjdGluZyBjaGVja3MuCisjZGVmaW5lIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVT
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91czogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXNUb1RhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKKyNkZWZp
bmUgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMK
KyNkZWZpbmUgQUxMX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVMKKyNkZWZpbmUg
SU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IEFycmF5OjpDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMKKyNkZWZp
bmUgQ09OVElHVU9VU19UT19UQUlMX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1Rh
aWwKKyNkZWZpbmUgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91
bmRzOiAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcwogI2RlZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VU
b0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTA2LDMzICsxNDksNDggQEAgZW51
bSBNb2RlIHsKICNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9E
RVMKKyNkZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5
U3RvcmFnZQogI2RlZmluZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VU
b0hvbGU6ICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlVG9Ib2xlCi0jZGVmaW5lIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQogI2RlZmluZSBTTE9XX1BVVF9BUlJBWV9TVE9S
QUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQogI2RlZmluZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCi0gICAgU0xPV19Q
VVRfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAor
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzCiAKIC8vIE5leHQ6IGhlbHBlcnMgZm9yIHNpZGUtZWZmZWN0aW5nIGNoZWNrcy4K
LSNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTIFwKLSAgICBB
cnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQUxM
X0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFy
cmF5OjpCbGFua1RvQ29udGlndW91cworI2RlZmluZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZ
X1NUT1JBR0VfTU9ERVMgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3Jh
Z2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpCbGFua1Rv
U2xvd1B1dEFycmF5U3RvcmFnZQotI2RlZmluZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0Vf
TU9ERVMgICAgICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMg
ICAgICAgICAgICAgICAgICBcCiAgICAgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdF
X01PREVTCi0jZGVmaW5lIFNMT1dfUFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICBc
CisjZGVmaW5lIFNMT1dfUFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAg
ICAgIFwKICAgICBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UKKyNkZWZpbmUgUE9M
WU1PUlBISUNfRUZGRUNURlVMX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFy
cmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9FRkZFQ1RG
VUxfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBTExfRUZGRUNU
RlVMX0NPTlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVMKKworLy8gRmluYWxseTogaGVscGVycyBm
b3IgcG9seW1vcnBoaWMgYXJyYXkgYWNjZXNzZXMuCisjZGVmaW5lIFBPTFlNT1JQSElDX01PREVT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91
c09yQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTogICAgICAgICBcCisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UKKyNkZWZpbmUg
QUxMX1BPTFlNT1JQSElDX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IFBPTFlNT1JQSElDX0VGRkVDVEZVTF9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUwogCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQo
QXJyYXlQcm9maWxlKiwgQXJyYXk6OkFjdGlvbiwgYm9vbCBtYWtlU2FmZSk7CiAKQEAgLTE0NSw4
ICsyMDMsMTAgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIGlubGlu
ZSBib29sIG1vZGVVc2VzQnV0dGVyZmx5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2Fz
ZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU2LDcgKzIxNiw5IEBAIGlubGluZSBib29sIG1v
ZGVVc2VzQnV0dGVyZmx5KEFycmF5OjpNb2QKIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2Fz
ZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJy
YXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNjYsNiArMjI4LDkgQEAgaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJh
eShBcnJheTo6TW9kZSBhcgogaW5saW5lIGJvb2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9k
ZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIElOX0JP
VU5EU19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVT
OgorICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgSU5fQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1
bHQ6CkBAIC0xODQsMTggKzI0OSw1NSBAQCBpbmxpbmUgYm9vbCBpc1Nsb3dQdXRBY2Nlc3MoQXJy
YXk6Ok1vZGUgCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBtYXlTdG9yZVRvVGFpbChBcnJheTo6
TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIENP
TlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoKKyAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIGJvb2wgbWF5
U3RvcmVUb0hvbGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7CiAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgY2FzZSBP
VVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBTTE9XX1BVVF9BUlJB
WV9TVE9SQUdFX01PREVTOgogICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBtb2RlSXNQb2x5bW9ycGhpYyhBcnJheTo6TW9kZSBtb2RlKQoreworICAgIHN3aXRj
aCAobW9kZSkgeworICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQog
CitpbmxpbmUgYm9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhBcnJheTo6TW9kZSBh
cnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3Jw
aGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBwb2x5
bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CkBAIC0yMDQsNiAr
MzA2LDcgQEAgaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcgogICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MjQ5LDcgKzM1MiwxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1v
CiAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9DT05USUdVT1VT
X01PREVTOgogICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5
U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMjU5LDcgKzM2Niw4IEBAIGlubGluZSBib29sIG1vZGVTdXBwb3J0
c0xlbmd0aChBcnJheTo6TW8KIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNr
KEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBTExf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01P
REVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgY2FzZSBBcnJheTo6VW5kZWNp
ZGVkOgogICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VF
eGl0OgpAQCAtMjczLDcgKzM4MSw3IEBAIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVy
ZUNoZWNrKEEKIGlubGluZSBib29sIGlzRWZmZWN0ZnVsKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAg
ICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTI5
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NzEsNiArMTU3MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlVG9Ib2xlOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgogICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYXJy
YXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8o
cHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwg
Z2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKQEAgLTE1OTQsNiAr
MTU5Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91c091dE9mQm91bmRzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRz
OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9w
LCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZz
ZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYs
NyArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxl
SW5kZXgpOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShh
cnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCks
IGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAg
ICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5j
b2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRz
U3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICBpZiAoc3Rv
cmFnZSA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAg
LTEzNywxNyArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eVB1c2g6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwg
Mik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0
aW9uKG5vZGUuY2hpbGQxKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAxKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CisgICAg
ICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4
XTsKICAgICAgICAgICAgIApAQCAtMzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXko
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBh
cnJheSwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwg
Ym9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJh
eSwgTm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBj
YW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChtb2RlSXNTcGVjaWZpYyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAgICAgICAgIG1f
Z3JhcGgucmVmKGFycmF5KTsKIAogICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJyYXlNb2RlKSkg
ewotICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZv
KGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBOb05vZGUp
OworICAgICAgICAgICAgbV9ncmFwaC5yZWYoaW5kZXgpOworICAgICAgICAgICAgTm9kZSBhcnJh
eWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBpbmRl
eCk7CiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNl
ZCBhcyBhIGJ1dHRlcmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdp
Y2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXggYXJy
YXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0ZSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIHVu
c2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRn
ZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAgICAgewogICAg
ICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHItPmFy
cmF5TW9kZSgpID09IEFycmF5OjpGb3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNoIChub2RlUHRy
LT5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAg
ICAgICAgIE5vZGUgZm9yY2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdpbik7
CiAgICAgICAgICAgICBmb3JjZUV4aXQucmVmKCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggZm9y
Y2VFeGl0SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGZv
cmNlRXhpdEluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKCFtb2RlSXNTcGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUoKSkpCisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFy
cmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2Ug
PSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBi
YXNlLmluZGV4KCkpOwotICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2hpbGQo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2Up
OworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNo
ZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmlnaW4sIGJhc2Uu
aW5kZXgoKSwgaW5kZXguaW5kZXgoKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0g
RWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAg
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09O
VElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6
CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBT
TE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
TU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVy
biBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDksNiAr
MTMwOSwxNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2NoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEs
IGV4ZWMpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3Qt
PmVuc3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwpAQCAtMTMxNyw2ICsxMzI1LDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5l
bnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworCisgICAgaWYgKGluZGV4KQorICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3Qt
PmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91YmxlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICBy
ZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBAIHR5cGVk
ZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBE
RkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7
CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKIHR5
cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRl
Kiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09w
ZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKIApAQCAtMTkyLDcgKzE5Myw5IEBAIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm8KIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5l
d1NpemUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7
CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqLCBKU09iamVjdCopOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKIAog
Ly8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5
ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJv
bSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFi
b3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA5LDYgKzIx
MDksMTEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9
CiB9CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNHZXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywg
R1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1
bHRSZWcpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5v
ZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywg
R1BSUmVnIHJlc3VsdFJlZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJl
c3VsdFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSk7CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG91
dE9mQm91bmRzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgIHJldHVybiBzbG93
Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0
eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcp
Cit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGlmICgh
bWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAor
ICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgc2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgcHJvcGVydHlSZWcsIHRlbXBSZWcpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgICAgIGluQm91bmRzLmxpbmsoJm1faml0KTsKKyAg
ICB9CisKKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBpZiAo
aXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwo
Tm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVn
LCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRB
cnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mo
YXJyYXlNb2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rv
ci4KKyAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhp
cyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBi
YXNlbGluZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBz
dG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcu
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2Vzcyhh
cnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYg
d2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKKyAg
ICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGgg
aXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8vIGFscmVh
ZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGVtcFJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElm
IHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRl
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZywgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBk
YXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICBub3RIb2xlVmFsdWUubGluaygm
bV9qaXQpOworICAgIH0KKyAgICAgICAgICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0
aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwpAQCAtMjU5NSw2ICsy
Njk5LDUwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdV
T1VTX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbjMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIFNjYWxlUHRyKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01P
REVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVz
dWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dldEJ5
VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOwor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5j
aGlsZDMoKSk7CkBAIC0yNjE1LDYgKzI3NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9X
X1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJS
QVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTI2MjcsMjEgKzI3NzYs
NjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAg
ICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9Q
T0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9s
ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIo
KSk7Ci0KKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoaG9sZSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9u
ZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91Z2g7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVP
ZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRl
c0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFs
bFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VSZWcs
IHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlN
b2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAg
ICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
SGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21w
aWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZh
bGxUaHJvdWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOwogICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJ
bnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CkBAIC0yNzM1LDggKzI5MjgsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9E
RVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CiAgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI3NTYsNTkgKzI5NDksNzYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAg
IC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZh
bHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0cikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
YmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGlz
SW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRz
KTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlm
IHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xl
KGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJl
Y2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAg
ICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRo
ZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhv
bGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3
YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdv
cnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgIGlz
SG9sZVZhbHVlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUg
YXJyYXk7IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhE
b2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRl
bXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKworICAgICAgICAg
ICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAg
dmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAg
ICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAgICAgICAgICAgICAgICBu
b2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFy
eVJlZyk7CisKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jl
c3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFs
dWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2gu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykg
eworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAg
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0g
dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUpOworCiAgICAgICAg
ICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAg
ICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAg
ICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1w
b3JhcnlSZWcpOwogCi0gICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5
LgotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAg
ICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoaXNIb2xlVmFsdWUpOworICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHko
KSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsCkBAIC0yODIwLDYgKzMwMzAsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgQVNT
RVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVn
ID0gdGVtcG9yYXJ5LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxU
aHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3Jw
aGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNh
c2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxU
aHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJl
ZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNB
cnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFs
bFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2RlLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZykpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0KCkpOwor
ICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoZmFsbFRocm91Z2gpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAg
ICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKQEAgLTI5NzMsMjYgKzMyMzMsNTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdl
TGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOwogICAg
ICAgICAKLSAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCi0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBU
cnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3Rv
cmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OworICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQ
UiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5z
dG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAg
ICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAot
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAotICAgICAg
ICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAg
ICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVu
Z3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3Ro
R1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMDAyLDQxICszMjg5
LDcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHZhbHVlKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0
aCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhH
UFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAg
ICAgICAgLy8gRklYTUU6IEFycmF5UG9wIGluIGNvbnRpZ3VvdXMgbW9kZSBoYXMgbm8gY2hhbmNl
IG9mIHNpZGUgZWZmZWN0cy4gV2Ugc2hvdWxkIHRha2UKKyAgICAgICAgICAgIC8vIGFkdmFudGFn
ZSBvZiB0aGlzLCBzb21laG93LgorICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5l
ZENhc2UgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
UiwgdmFsdWVHUFIsIFNjYWxlUHRyKSwgdmFsdWVHUFIpOworCisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAg
ICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6
IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOworICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOworICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKLSAg
ICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOworICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOworICAgICAgICAgICAgc2V0VW5kZWZpbmVk
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3Rv
cmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFsdWVHUFIpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsK
IAotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIHNldFVuZGVmaW5l
ZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2
YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuc3ViMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3RvcikpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAg
ICBzbG93UGF0aE1vdmUoCi0gICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMs
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAg
ICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIHZhbHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
LSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhp
cywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVH
UFIsIGJhc2VHUFIpKTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zMjEwLDggKzM1MjYsMTUgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
c2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAg
IEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlKCksIHNpemVHUFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RFbXB0eSA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2l6ZUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAgICAgbm90RW1wdHkubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCByZXN1bHRHUFIsIHNpemVHUFIp
OworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTIsNiArMzUyLDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9k
ZSYgbm8KICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBj
YW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJhbmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUg
bm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBkb2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxl
LCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdpdGggdGhlIHByZXNlbnQgdGVzdAorICAgICAg
ICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBhdGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkp
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgICAgICAgICAocG9seW1vcnBoaWNJbmNs
dWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkgPyBIYXNDb250aWd1b3VzIDogMCkKKyAg
ICAgICAgICAgICAgICAgICAgfCAocG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2Rl
LmFycmF5TW9kZSgpKSA/IEhhc0FycmF5U3RvcmFnZSA6IDApKSkpOworICAgICAgICAKKyAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmQXJn
dW1lbnRzOjpzX2luZm87CiAgICAgICAgIGJyZWFrOwpAQCAtMzkwLDcyICs0MTMsMTAwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAgICBBU1NFUlQoIW1vZGVB
bHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlN
b2RlKCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAKKyAgICBJbmRleGluZ1R5cGUg
ZGVzaXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9k
ZSgpKSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6
IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1
cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICBjYXNl
IEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1h
c2sgPSBIYXNDb250aWd1b3VzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFu
a1RvQXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0Fy
cmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQ
dXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJy
YXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgZGVz
aXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKKyAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3Ry
dWN0dXJlLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
KyAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFk
eSBoYXZlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEluZGV4aW5nVHlwZSBkZXNpcmVkSW5kZXhp
bmdUeXBlTWFzayA9Ci0gICAgICAgICAgICBpc1Nsb3dQdXRBY2Nlc3Mobm9kZS5hcnJheU1vZGUo
KSkgPyAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkgOiBIYXNBcnJh
eVN0b3JhZ2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQu
YnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSk7CisgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRo
YXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KKyAgICBJbmRl
eGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPQorICAgICAgICBpc1Nsb3dQdXRBY2Nl
c3Mobm9kZS5hcnJheU1vZGUoKSkgPyAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5
U3RvcmFnZSkgOiBIYXNBcnJheVN0b3JhZ2U7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKICAgICAgICAgCi0gICAgICAgIG1faml0
LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRy
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIHNsb3dDYXNlLmxpbmsoJm1f
aml0KTsKKyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICAvLyBO
ZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nl
c3Nlcy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4K
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8pKSk7CisgICAgLy8gTmV4dCBjaGVjayB0aGF0IHRoZSBvYmplY3QgZG9lcyBub3QgaW50ZXJj
ZXB0IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0IGRvZXMsCisgICAgLy8gdGhlbiB0aGlzIG1vZGUg
d29uJ3Qgd29yay4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CiAgICAg
ICAgIAotICAgICAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdl
LgotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAvLyBOb3cg
Y2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgorICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAg
IGNhc2UgQmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RW5zdXJlQ29udGlndW91cywgdGVtcEdQUiwgYmFzZVJlZyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICBjYXNlIEJsYW5rVG9TbG93UHV0QXJyYXlT
dG9yYWdlOgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFn
ZSwgdGVtcEdQUiwgYmFzZVJlZyk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVt
cEdQUik7Ci0KLSAgICAgICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVy
ZSBiZWNhdXNlIHNpbGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCi0gICAgICAgIC8vIHRlbXBv
cmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdh
eSB3ZSdyZSB0YWxraW5nCi0gICAgICAgIC8vIGFib3V0IGEgbG9hZC4KLSAgICAgICAgbV9qaXQu
bG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICAKLSAgICAg
ICAgLy8gRmluYWxseSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3Jh
Z2UgdGhhdCB3ZSB3YW50ZWQgdG8gZ2V0LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBh
IGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAot
ICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCi0gICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5j
ZSBhcnJheWlmaWNhdGlvbiBpcyBub3QgdXNlci12aXNpYmxlLgotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwK
LSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFz
aykpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBzdG9y
YWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgIGNhc2UgQmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsIHRlbXBH
UFIsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworCisg
ICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVu
dCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCisgICAgLy8gdGVtcG9yYXJpZXMuIE5vciB3b3VsZCBp
dCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRoZXIgd2F5IHdlJ3JlIHRhbGtpbmcKKyAg
ICAvLyBhYm91dCBhIGxvYWQuCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVj
dHVyZUdQUik7CisgICAgICAgIAorICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0
aGUga2luZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KKyAgICAvLyBO
b3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVjaywgd2hpY2ggd2ls
bCByZXN1bHQgaW4gdGhlIAorICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlvbiBjb3JyZXNwb25kaW5n
IHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4KKyAgICAvLyBUaGF0J3Mg
ZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KKyAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKSk7CisgICAgICAg
IAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIHN0b3JhZ2VSZXN1bHQodGVtcEdQUiwgbV9j
b21waWxlSW5kZXgpOwogfQogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCkBAIC0zMzk5LDYgKzM0NTAsMTYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIs
IG1fY29tcGlsZUluZGV4KTsKIH0KIAorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlS
ZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBh
cnJheU1vZGUpCit7CisgICAgaWYgKCFwdXRCeVZhbFdpbGxOZWVkRXh0cmFSZWdpc3RlcihhcnJh
eU1vZGUpKQorICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBHUFJUZW1w
b3JhcnkgcmVhbFRlbXBvcmFyeSh0aGlzKTsKKyAgICB0ZW1wb3JhcnkuYWRvcHQocmVhbFRlbXBv
cmFyeSk7CisgICAgcmV0dXJuIHRlbXBvcmFyeS5ncHIoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEdQUlRl
bXBvcmFyeTsKIGNsYXNzIEpTVmFsdWVPcGVyYW5kOwogY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7
CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAgLTExNjYsNiArMTE2NywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
b2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMTQ2OCw2ICsxNDc0LDEx
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIGludDMyX3QgYXJnMikKKyAgICB7CisgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRy
KGFyZzIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0yMTQ5LDYg
KzIxNjAsNDIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5v
ZGUmKTsKICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3Vv
dXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BS
UmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVn
LCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVn
KTsKKyAgICAKKyAgICBib29sIHB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKEFycmF5OjpN
b2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAg
ICAgIC8vIEZvciBBcnJheVN0b3JhZ2UsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBzdG9yZXMg
dG8gaG9sZXMgZXhjZXB0IGlmCisgICAgICAgIC8vIHdlJ3JlIGluIFNsb3dQdXQgbW9kZS4KKyAg
ICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CisgICAgICAgIGNhc2UgT1VU
X09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgCisgICAgICAgIC8vIEZvciBDb250aWd1b3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBm
b3IgYW55IGFjY2VzcyB0aGF0IG1heSBzdG9yZQorICAgICAgICAvLyB0byB0aGUgdGFpbC4KKyAg
ICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisg
ICAgICAgIC8vIEFsbCBwb2x5bW9ycGhpYyBtb2RlcyBuZWVkIGFuIGV4dHJhIHJlZy4KKyAgICAg
ICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5
VmFsKEdQUlRlbXBvcmFyeSYsIEFycmF5OjpNb2RlKTsKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVn
aXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFy
eSwgbm9kZS5hcnJheU1vZGUoKSk7CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVn
IHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcg
dGVtcFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3Jh
Z2VQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BS
UmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIAog
ICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdl
dEJ5VmFsT25TdHJpbmcoTm9kZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXggPSAwOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4ID0gMDsKICAg
ICBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJbmZvSW5kZXgg
PSAwOwogICAgIApAQCAtNzM4LDYgKzczOSwyMCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBp
bGUoQ29kZVB0ciogZnVuCiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1
YkluZm9zKG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXpl
KCk7ICsraSkKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5
VG9TdHViSW5mbyhtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSksIHBhdGNoQnVmZmVy
KTsKKyAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZCeVZhbEluZm9zKG1fYnlWYWxDb21waWxh
dGlvbkluZm8uc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkgeworICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJh
ZFR5cGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlW
YWxDb21waWxhdGlvbkluZm9baV0uYmFkVHlwZUp1bXApKTsKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0
aW9uSW5mb1tpXS5kb25lVGFyZ2V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1Bh
dGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9b
aV0uc2xvd1BhdGhUYXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJl
c3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0ucmV0
dXJuQWRkcmVzcyk7CisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9jay0+YnlWYWxJbmZvKGkp
ID0gQnlWYWxJbmZvKAorICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5ieXRl
Y29kZUluZGV4LAorICAgICAgICAgICAgYmFkVHlwZUp1bXAsCisgICAgICAgICAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW2ldLmFycmF5TW9kZSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihiYWRUeXBlSnVtcCwgZG9uZVRhcmdldCksCisgICAgICAgICAgICBkaWZmZXJl
bmNlQmV0d2VlbkNvZGVQdHIocmV0dXJuQWRkcmVzcywgc2xvd1BhdGhUYXJnZXQpKTsKKyAgICB9
CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7CiAgICAgICAg
IENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQsMjUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29weVRvU3R1YkluZm8oU3RydWN0dXJlU3R1
YkluZm8mIGluZm8sIExpbmtCdWZmZXIgJnBhdGNoQnVmZmVyKTsKICAgICB9OwogCisgICAgc3Ry
dWN0IEJ5VmFsQ29tcGlsYXRpb25JbmZvIHsKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8o
KSB7IH0KKyAgICAgICAgCisgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldCkK
KyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAg
LCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKKyAgICAgICAgICAgICwgYXJyYXlNb2RlKGFycmF5
TW9kZSkKKyAgICAgICAgICAgICwgZG9uZVRhcmdldChkb25lVGFyZ2V0KQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOworICAgICAgICBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZVRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoVGFyZ2V0Owor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXR1cm5BZGRyZXNzOworICAgIH07CisKICAg
ICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBob3RQYXRoT3RoZXI7CkBAIC0zNDgsNiArMzY3LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0
dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwg
cmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1v
ZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CiAKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29tcGlsZUNUSU1hY2hp
bmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1
cmUgKnRyYW1wb2xpbmVzKQogICAgICAgICB7CkBAIC0zOTcsNiArNDMwLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVj
dHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1
Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZy
YW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJl
U3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVy
ZSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hh
aW4qLCBSZXR1cm5BZGRyZXNzUHRyLCBib29sIGRpcmVjdCk7CisgICAgICAgIAorICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwg
SklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFs
SW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKICAgICAgICAgUGFzc1Jl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExh
YmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29u
c3RydWN0ID0gZmFsc2UpOwpAQCAtNDUyLDYgKzQ4OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5k
SW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSopOwogICAgICAg
ICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQg
c3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNw
ZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgSklUQXJyYXlNb2Rl
IGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIC8vIFBy
b3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRl
eGluZyB0eXBlLgorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBl
eHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuCisgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBh
bHJlYWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKKyAg
ICAgICAgLy8gY2FzZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0
IHByb2ZpbGVkLgorICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
OworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4g
cmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAgIC8vIFRoZSB2YWx1
ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5k
CisgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1
cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KKyAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNl
cy4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKIAogICAg
ICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsK
IApAQCAtODcwLDYgKzkyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2Fs
bFJlY29yZD4gbV9jYWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKICAgICAg
ICAgVmVjdG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0Nv
bXBpbGF0aW9uSW5mbzsKKyAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVj
dG9yPE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8+IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5m
bzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKQEAgLTg3OSw2ICs5MzIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0
Y2hlczsKIAogICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRl
eDsKKyAgICAgICAgdW5zaWduZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7CiAgICAgICAgIHVu
c2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9jYWxs
TGlua0luZm9JbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTksMTAgKzU1OSwy
NSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9m
aWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xl
KCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXcoQXJy
YXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJyYXlN
b2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJheU1v
ZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShB
cnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhwcm9maWxl
LCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAg
IHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC0xMTEsMTcgKzExMiw1NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwg
cmVnVDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBKSVRBcnJh
eU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250
aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKIAog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21w
aWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQor
CitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQor
CitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisgICAgbG9hZFB0cihCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDMsMTcgKzE4NCwx
MDAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIG5vdFN0
cmluZy5saW5rKHRoaXMpOwogICAgIG5vbkNlbGwubGluayh0aGlzKTsKICAgICAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIGVtcHR5IHZhbHVlCisgICAgc3dpdGNoIChjaG9vc2VBcnJheU1vZGUoY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKSkgeworICAgIGNhc2UgSklUQ29udGlndW91
czoKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
TGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNl
LCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAg
ICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3Qp
OworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
c2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQog
Cit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQor
eworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAor
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwg
Q29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5
VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9m
ZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIHBhdGNoQnVm
ZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVw
LCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwg
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsocmV0dXJuQWRkcmVzcywgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7Cit9CisK
K3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7
CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5iZWdp
bigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAg
YmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9j
ayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJl
bChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5B
ZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2Rl
TG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgi
QmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAl
cCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lLCBieVZhbEluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhy
ZXR1cm5BZGRyZXNzLCBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKTsKK30KKwogdm9pZCBKSVQ6
OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3Vs
dCwgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgRmluYWxPYmplY3RNb2Rl
IGZpbmFsT2JqZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwpA
QCAtMjI2LDcgKzM1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBw
cm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVn
ZXIocmVnVDEpOwpAQCAtMjM0LDEwICszNTgsNzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9k
ZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgewor
ICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5
U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAor
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1f
Ynl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJh
cnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykp
OworICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisg
ICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgb3V0
T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QxLCByZWdUMyk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhz
dG9yZVJlc3VsdCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAorICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZElt
bTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRy
KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIApAQCAtMjQ3LDggKzQzNCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1w
KCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUp
OwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICBlbWl0QXJyYXlQ
cm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpLCByZWdUMyk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMyk7CisgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgIGJyYW5jaDMy
KEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QxKTsKQEAgLTI1Nyw4ICs0NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKEluc3RydWN0aW9uCiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAK
ICAgICBlbmQubGluayh0aGlzKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1Qz
LCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjcwLDEzICs0NjAs
MjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gaW4gdmVjdG9yIGNoZWNrCisgICAgLy8gVGhlc2UgbmV4dCB0d28gY2hlY2tzIGhhdmUg
ZGlmZmVyZW50IG1lYW5pbmdzIGFjY29yZGluZyB0byBhcnJheSBtb2RlLgorICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgCisgICAgTGFiZWwgc2xv
d1BhdGggPSBsYWJlbCgpOwogCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlz
LCBjdGlfb3BfcHV0X2J5X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChy
ZWdUMCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIp
OwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1QyKTsKLSAgICBz
dHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxs
LmNhbGwoKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAg
bV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2luZGV4KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MTQsNiAr
MjQxNCwzMCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAg
cmV0dXJuIHJldHVyblZhbHVlOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNl
VmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChK
U1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNh
bGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIo
KSkgeworICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAg
IGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0
SW5kZXgoaSkpIHsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X3ZhbF9zdHJpbmcpKTsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUp
LT5nZXRJbmRleChjYWxsRnJhbWUsIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNl
VmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7CisgICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3Jp
cHQpKQorICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1l
SW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElk
ZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1l
KS0+dmFsdWUoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1l
LCBwcm9wZXJ0eSk7fQorfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CkBAIC0yNDIzLDM1ICsyNDQ3LDM3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1Zh
bHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1
ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlw
dC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
YXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlw
dCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
KCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAgICAgdWlu
dDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0cmluZyhi
YXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAg
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfc3Ry
aW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
KCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgaWYg
KGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAg
Ly8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICBBU1NF
UlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOworICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgICAgIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ3R5cGUoaW5kZXhp
bmdUeXBlKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9k
ZSkKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJO
X0FERFJFU1MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJ
T04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KKyAg
ICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBz
dWJzY3JpcHQsIFNUVUJfUkVUUlVOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQorewor
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChpc05hbWUo
c3Vic2NyaXB0KSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2Fs
bEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0
ZU5hbWUoKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7
Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIAorICAgIEpTVmFsdWUgcmVzdWx0
ID0gZ2V0QnlWYWwoYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUUlVOX0FERFJFU1MpOwor
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAgICAgCkBAIC0yNTAyLDE3ICsyNTI4LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3N0YXRp
YyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1l
Lmdsb2JhbERhdGE7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1
ZSgpOwotCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAg
dWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpIHsKQEAgLTI1MzMsNiArMjU1MCw1MSBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFt
ZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKICAgICAgICAgfQogICAgIH0KK30KKworREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJh
bWUuZ2xvYmFsRGF0YTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sx
XS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1Zh
bHVlKCk7CisKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50
MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2Rl
KCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgICAgIEJ5VmFsSW5mbyYg
YnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+YnlWYWxJbmZvKGJ5dGVjb2RlT2Zm
c2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkg
eworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvcklu
ZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBi
eVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFs
KCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFs
SW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1
ZSk7CisKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOworfQorCitERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBz
dGFja0ZyYW1lLmNhbGxGcmFtZTsKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFj
a0ZyYW1lLmdsb2JhbERhdGE7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUu
YXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFy
Z3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0u
anNWYWx1ZSgpOworICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJz
Y3JpcHQsIHZhbHVlKTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxMjk2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3MCw2ICszNzAsNyBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0
cmluZ19mYWlsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29k
ZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOworICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRf
YnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAg
RW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVC
IGN0aV9vcF9pbihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNv
ZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW5zdGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKQEAgLTQ0Niw2ICs0NDcsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5
X2luZGV4KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CisgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1
dF9nZXR0ZXJfc2V0dGVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAg
IHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2Zm
X2FjdGl2YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTgsNyArMTAx
OCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9z
dHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0MiwgdDEsIHQwKQogICAgIGJ0aXog
dDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIGJ0aXogdDIsIEhhc0FycmF5
U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRpeiB0MiwgKEhhc0NvbnRpZ3Vv
dXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSwgLm9wR2V0QXJy
YXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDEKICAgICBsb2FkcCA2NFtQ
QiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwCkBA
IC0xMTQ3LDE0ICsxMTQ3LDI0IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxvYWRwIDMy
W1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDEpCiAgICAgbG9hZGlz
IDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BHZXRC
eVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDMsIHQxLCAub3BHZXRC
eVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BHZXRCeVZhbE5vdENv
bnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZGlz
IDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4XSwgdDIKKyAgICBqbXAgLm9w
R2V0QnlWYWxEb25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBI
YXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cK
ICAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjpt
X3ZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywg
OF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0Mgog
ICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3Rv
cmVwIHQyLCBbY2ZyLCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZh
bHVlUHJvZmlsZSh0MiwgdDApCkBAIC0xMjI2LDI5ICsxMjM2LDU1IEBAIF9sbGludF9vcF9wdXRf
YnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRw
IDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRp
eiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIs
IFBDLCA4XSwgdDAKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQ
dXRCeVZhbFNsb3cpCi0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZUludDMyKHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxv
YWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQ
dXRCeVZhbFNsb3cKLSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwg
Lm9wUHV0QnlWYWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRb
UEIsIFBDLCA4XSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBi
dGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAg
ICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1
YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRC
eVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIK
KyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEp
CisgICAgc3RvcmVwIHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5
VmFsQ29udGlndW91c091dE9mQm91bmRzOgorICAgIGJpYSB0MywgLXNpemVvZiBJbmRleGluZ0hl
YWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xv
dworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgaWYgVkFMVUVfUFJPRklM
RVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAgICAgc3RvcmViIDEsIEFy
cmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQKKyAgICBhZGRpIDEsIHQz
LCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlWYWxDb250aWd1b3VzU3Rv
cmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0Fy
cmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZh
bFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9wUHV0
QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3Vs
dDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3RvcmVwIHQxLCBBcnJheVN0
b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6
bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6
Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0g
ICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAg
ICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2Zp
bGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCi0gICAgYWRkaSAxLCBBcnJheVN0b3Jh
Z2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
dG9yZVJlc3VsdAorICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0
MF0sIHQxCisgICAgYWRkaSAxLCB0MQorICAgIGJpZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cK
KyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KKyAg
ICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJs
aWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAgICAgYWRk
aSAxLCB0MiwgdDEKICAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCi0gICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVS
ZXN1bHQKKyAgICBqbXAgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogCiAub3BQ
dXRCeVZhbFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHV0X2J5X3Zh
bCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjMsOCAr
NjMsOSBAQCBlbmQKIAogIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVz
LgogY29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0NvbnRpZ3VvdXMgPSAyCiBjb25zdCBIYXNB
cnJheVN0b3JhZ2UgPSA4Ci1jb25zdCBBbGxBcnJheVR5cGVzID0gMTUKK2NvbnN0IEhhc1Nsb3dQ
dXRBcnJheVN0b3JhZ2UgPSAxNgogCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlw
ZSA9IDUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShy
ZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdz
IGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9m
IGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNo
YXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQor
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCk7IH0KQEAgLTcwLDkgKzc5LDE2IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50
MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5n
dGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4
aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rv
ckxlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5n
dGgodmFsdWUpOyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRl
eGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFy
cmF5U3RvcmFnZT4oKTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygp
IHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9CiAg
ICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0
dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CiAg
ICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKIAogaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVy
T2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgIEFTU0VSVChudW1iZXJPZlNsb3RzIDw9IGluZGV4aW5nSGVhZGVy
KCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IEl0IHdv
dWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFzIGEgbG9vcCBzaW5jZSAoMSkg
d2Uga25vdyBpbiB3aGljaApAQCAtMTYzLDcgKzE2Myw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6dW5zaGlmdChTdHIKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OwogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgogICAgIG1l
bW1vdmUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxNyBAQCBpbmxpbmUgc2l6ZV90IEluZGV4
aW5nSGVhZGVyOjpwcmVDYXBhY2l0CiAKIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlm
IChMSUtFTFkoIWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpCisg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHZlY3Rvckxlbmd0aCgpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIH0KIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAgdHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKIAogLy8gRmxhZ3MgZm9yIHRlc3Rp
bmcgdGhlIHByZXNlbmNlIG9mIGNhcGFiaWxpdGllcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgSGFzQ29udGlndW91cyAgICAgICAgICAgID0gMjsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgSGFzQXJyYXlTdG9yYWdlICAgICAgICAgID0gODsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSAgID0gMTY7CiAKQEAgLTQyLDkgKzQzLDExIEBAIHN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWQKIAogLy8gTGlzdCBvZiBhY2Nl
cHRhYmxlIGFycmF5IHR5cGVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAg
ICAgICAgICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9u
QXJyYXlXaXRoQ29udGlndW91cyAgICAgICAgICA9IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgPSBIYXNBcnJh
eVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UgPSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBBcnJheUNsYXNzICAgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsgLy8gSSdk
IHdhbnQgdG8gY2FsbCB0aGlzICJBcnJheSIgYnV0IHRoaXMgd291bGQgbGVhZCB0byBkaXNhc3Ry
b3VzIG5hbWVzcGFjZSBwb2xsdXRpb24uCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5
V2l0aENvbnRpZ3VvdXMgICAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQ29udGlndW91czsKIHN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgICAgICAgICA9
IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzU2xvd1B1dEFycmF5
U3RvcmFnZTsKIApAQCAtNTIsNiArNTUsMTAgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBB
cnJheVdpdGhTbG93UAogICAgIE5vbkFycmF5OiAgICAgICAgICAgICAgICAgICAgXAogICAgIGNh
c2UgQXJyYXlDbGFzcwogCisjZGVmaW5lIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTIFwK
KyAgICBOb25BcnJheVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlX
aXRoQ29udGlndW91cworCiAjZGVmaW5lIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUyBcCiAgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCkBAIC03Niw2ICs4Mywx
MSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kCiAgICAgcmV0dXJu
IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHR5cGUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFz
Q29udGlndW91cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHJldHVybiAhKGlu
ZGV4aW5nVHlwZSAmIEhhc0NvbnRpZ3VvdXMpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaGFz
QXJyYXlTdG9yYWdlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiB7CiAgICAgcmV0dXJuICEh
KGluZGV4aW5nVHlwZSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdl
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2
aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsMTYgQEAgSlNWYWx1ZSBKU0FycmF5Ojpw
b3AoRXhlY1N0YXRlKiBleGVjKQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czog
eworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aC0tKQorICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKGxlbmd0aCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xl
bmd0aF0uZ2V0KCk7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgCkBAIC00NTgsNiArNDY4LDI1IEBA
IHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAg
ICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICAgICAgbWV0
aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsK
KyAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxl
bmd0aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRl
cyhleGVjLCBsZW5ndGgsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
ICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgdW5zaWdu
ZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgICAgIGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQ
dXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0aCwgdmFsdWUsIHRydWUpKSB7CkBAIC02MDAs
NiArNjI5LDE5IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKICAg
ICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBB
cnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIGlmICghbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS07KSB7CisgICAgICAgICAg
ICBpZiAoIW1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uaXNOdW1iZXIoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHFzb3J0KG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSwgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29y
dGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC02MjksNiArNjcxLDcgQEAgdm9pZCBK
U0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgICAgICAvLyBzaWRlLWVmZmVj
dCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgogICAg
ICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwogICAgICAgICAKKyAgICAgICAgYXR0
ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0
YSwgc3RvcmFnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtNjM3LDg2
ICs2ODAsMTExIEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKICAg
ICB9CiB9CiAKLXZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCit0ZW1wbGF0ZTxJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZl
Y3RvcihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0
aCkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwotICAgIAotICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNz
OgorICAgIGlmICghcmVsZXZhbnRMZW5ndGgpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAv
LyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2
ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAg
IC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2lj
ZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Cisg
ICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYg
c29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KKyAg
ICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1h
a2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KICAgICAgICAgCi0gICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwotICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAvLyBDb252ZXJ0aW5nIEph
dmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQg
b25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgICAgICAvLyBUaGlzIGlz
IGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBh
cmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgICAgICAvLyBi
dWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9i
amVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgICAgICAv
LyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2lu
ZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KLSAgICAgICAgCi0gICAgICAgIFZlY3Rv
cjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwot
ICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBWZWN0
b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsK
KyAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEhlYXA6
OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CiAgICAgICAgIAotICAgICAgICBi
b29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICB2YWx1ZXNbaV0u
Zmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlz
U29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOwotICAgICAgICB9
CisgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gYmVnaW5baV0uZ2V0KCk7CisgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQo
KSk7CisgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICBpc1NvcnRpbmdQ
cmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmlt
aXRpdmUoKTsKKyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2lu
ZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2
ZW4gYWZ0ZXIKLSAgICAgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24u
CisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0
cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgLy8gYSB0b1N0cmluZyBj
YWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCiAgICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAg
dmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVj
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZDsgaSsrKQorICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RG
U3RyaW5nSW5saW5lKGV4ZWMpOwogICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29y
dFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29y
aXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0
aGVyCi0gICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAvLyBGSVhNRTogU2luY2Ugd2Ug
c29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEg
cmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgIC8vIHRoYW4gTyhOIGxv
ZyBOKS4KICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgICAgIGlmIChpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFs
dWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJG
b3JRU29ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVn
aW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0
cmluZ1BhaXJGb3JRU29ydCk7Ci0jZWxzZQotICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxp
YnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgICAg
ICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBp
biBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIGlmIChpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMpCiAgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1
ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZv
clFTb3J0KTsKKyAgICBlbHNlCisgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFs
dWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJG
b3JRU29ydCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlv
biBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCisgICAgLy8gRUNNQVNjcmlwdC0y
NjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dz
ZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFs
dWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJG
b3JRU29ydCk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24g
Y2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKKyAgICAv
LyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0
dWFsIHZhbHVlcy4KKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQXJyYXlX
aXRoQ29udGlndW91czoKKyAgICAgICAgZW5zdXJlQ29udGlndW91c0xlbmd0aChyZWxldmFudExl
bmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHRvU3Ry
aW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0
b3JhZ2UsCi0gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmln
bmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsKLSAgICAgICAgICAgIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgaWYg
KHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpIHsKKyAgICAgICAgICAg
IGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVsZXZhbnRMZW5ndGgp
OwogICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQpCi0gICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpIDwgcmVsZXZh
bnRMZW5ndGgpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgocmVsZXZhbnRMZW5ndGgp
OworICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgYmVnaW5baV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9w
VGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAK
KyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJy
YXlDbGFzczoKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgY2FzZSBBcnJheVdpdGhDb250
aWd1b3VzOiB7CisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91
cz4oCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkp
OworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0
aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3IsIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCk7CisKKyAgICAgICAgYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNB
cnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODEwLDYgKzg3OCw3OCBAQCB2b2lkIEpTQXJyYXk6
OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21w
YXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1h
eGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFy
bHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQu
CisgICAgICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKKyAgICAgICAg
aWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGlmICghbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3Rv
ckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4z
MSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgICAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsK
KyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsK
KyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7
CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChl
eGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBm
dW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBi
ZSBtb2RpZmllZAorICAgICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdy
ZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVt
RGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAg
IAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZh
bHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9u
ZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7ICsrbnVtRGVmaW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2
ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAg
ICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAr
K251bURlZmluZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkID09IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlcy5zaXplKCkgPT0gbnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHRo
ZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJz
dHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOworICAgICAgICBpdGVy
LnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bURlZmluZWQgJiYgaSA8IG1fYnV0dGVybGZ5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAg
ICArK2l0ZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFB1dCB1bmRlZmluZWQg
dmFsdWVzIGJhY2sgaW4uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
ewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIApAQCAtOTI5LDYgKzEwNjksMTIgQEAgdm9pZCBKU0FycmF5OjpmaWxs
QXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAg
ICBhcmdzLmFwcGVuZChtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC05NjAsNiArMTEwNiwxMiBAQCB2b2lkIEpTQXJy
YXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyArK2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
ICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzog
ewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
c3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gIW1hcCB8fCAh
bWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRl
bXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgc29ydENvbXBh
Y3RlZFZlY3RvcihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFu
dExlbmd0aCk7CiAKICAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBi
b29sIHdyaXRhYmxlKTsKIApAQCAtMTA2LDYgKzEwOSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7CiAgICAgfTsK
IAorICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAg
IEluZGV4aW5nSGVhZGVyIGhlYWRlcjsKKyAgICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aChz
dGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBoZWFkZXIuc2V0UHVi
bGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAg
ICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIGhlYWRlciwgaGVhZGVyLnZlY3Rvckxl
bmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgfQorCiAgICAgaW5saW5lIEJ1
dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKQEAgLTEyMSw3ICsxMzMsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgp
CiAgICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFy
cmF5V2l0aENvbnRpZ3VvdXMpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVDb250
aWd1b3VzQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAg
ICAgICBBU1NFUlQoIWluaXRpYWxMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZQorICAgICAgICAgICAgICAgICAgIHx8IChpbml0aWFsTGVuZ3RoICYmIHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAg
ICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgfQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMTUzLDI2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAg
ICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAw
KTsKLSAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVy
Rm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFn
ZS0+bV9pbmRleEJpYXMgPSAwOwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigp
OwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsK
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAg
ICAgCisgICAgICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUs
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKHRlbXAsIDAsIDApOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgodmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGluaXRpYWxMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVt
cDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVj
dG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAw
KTsKKyAgICAgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hl
YWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgICAgICAgICAgc3RvcmFnZS0+bV9z
cGFyc2VNYXAuY2xlYXIoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IgPSBpbml0aWFsTGVuZ3RoOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEu
aGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAg
ICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjk2
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpOwogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFBy
b3RvdHlwZS5nZXQoKSkpKTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOwor
ICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3Rv
dHlwZS5nZXQoKSwgQXJyYXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVX
aXRoQXJyYXlTdG9yYWdlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUu
Z2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JT
bG93UHV0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0
cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5
cGUuZ2V0KCkpKTsKIApAQCAtNDA3LDYgKzQwOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omhh
dmVBQmFkVGltZShKU0dsb2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxv
Y2F0aW9ucyB0aGF0IGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8g
dGhpcyBvYmplY3Qgbm93IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAg
bV9hcnJheVN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZv
clNsb3dQdXQuZ2V0KCkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CiAg
ICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQg
c3RvcmFnZSBzd2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFn
ZS4KQEAgLTQ4Miw2ICs0ODQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVNjb3BlU3RydWN0
dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1bWVudHNTdHJ1Y3R1
cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJh
eVN0b3JhZ2UpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0
dXJlRm9yU2xvd1B1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYm9vbGVh
bk9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2Fs
bGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyNiw2ICsxMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2FycmF5U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1
Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4K
KyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJh
eVN0b3JhZ2U7IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQg
YXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsKICAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CkBA
IC0yNjEsNyArMjYyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogbmFt
ZVNjb3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX2FyZ3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFy
cmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZS5nZXQoKTsgfQor
ICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdldCgpOyB9CiAgICAg
ICAgIHZvaWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1
Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlT
dG9yYWdlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyB9CiAg
ICAgICAgIFN0cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNh
bGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrQ29u
c3RydWN0b3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1
bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0
dXJlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCArMTMxLDM5IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBh
cHByb3ByaWF0ZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjdXJyZW50VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
dXJyZW50U291cmNlOworICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAg
ICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAg
ICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAg
ICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRT
b3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpOyBjb3VudC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
VmFsdWUoJnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3I7CisgICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMg
cmlnaHQuIFdoeSBpc24ndCB0aGlzIHB1YmxpY0xlbmd0aCgpPwogICAgICAgICAgICAgICAgIGlm
IChuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxl
IChjb3VudC0tKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291
cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAg
ICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkg
PSBuZXdCdXR0ZXJmbHk7CkBAIC0xNTgsNiArMTczLDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAKICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkg
aWYgYXBwcm9wcmlhdGUuCiAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyhidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQpAQCAtMjM0LDYgKzI1MiwxMyBAQCBi
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
IH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzog
ewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpA
QCAtMzUxLDYgKzM3NiwyMSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAg
ICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPCBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW3Byb3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFs
dWUpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgocHJvcGVy
dHlOYW1lICsgMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA8IG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTM2MSwxNSArNDAxLDE4
IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltwcm9wZXJ0
eU5hbWVdOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAg
ICAgICAgCisgICAgICAgIEpTVmFsdWUgb2xkID0gdmFsdWVTbG90LmdldCgpOworICAgICAgICB2
YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAg
ICAgICAKICAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMg
bmVjZXNzYXJ5LgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgewogICAgICAg
ICAgICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsgMTsKICAgICAgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChsZW5ndGgpOwogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgIH0gZWxzZSBpZiAo
IW9sZCkgewogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAg
ICAgICAKLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmpl
Y3QsIHZhbHVlKTsKKyAgICAgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0Nv
bnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdG9yYWdlKTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTQ0Myw2ICs0ODYsMTEgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5l
ZmZpY2llbnQsIGFzIGl0IHdpbGwgcGVyZm9ybSB0d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9w
dGltaXplCisgICAgICAgIC8vIHRoaXMgY2FzZSBpZiB3ZSBldmVyIGNhcmVkLgorICAgICAgICBl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhn
bG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAg
ICAgICAgYnJlYWs7CkBAIC00NjUsNiArNTEzLDIzIEBAIHZvaWQgSlNPYmplY3Q6Om5vdGlmeVBy
ZXNlbmNlT2ZJbmRleGVkQWMKICAgICBnbG9iYWxPYmplY3QoKS0+aGF2ZUFCYWRUaW1lKGdsb2Jh
bERhdGEpOwogfQogCitXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTT2JqZWN0OjpjcmVhdGVJbml0
aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsYm9hbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRU
eXBlKSk7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7
CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxl
bmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBu
ZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVyZmx5
KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCkKIHsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKTsKQEAgLTQ4MCw3ICs1NDUsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3Vs
dC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7
Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZElu
ZGV4aW5nVHJhbnNpdGlvbigpKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CkBAIC00OTAsMTYgKzU1NSwxMjMgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgp
Cit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0
dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwg
MCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5lZWRlZExl
bmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxl
bmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPnNldExlbmd0aChwdWJsaWNMZW5n
dGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgbmV3U3RvcmFn
ZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBwdWJsaWNMZW5ndGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICBuZXdTdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIG5ld1N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgbWVtY3B5KAorICAgICAgICBuZXdT
dG9yYWdlLT5tX3ZlY3RvciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgcHVibGljTGVuZ3Ro
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1
dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3U3RvcmFnZTsKK30KKworQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQor
eworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRp
b24oKSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdl
VG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQoreworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgQVNTRVJUKCFzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0KKyAgICAg
ICAgQnV0dGVyZmx5OmZyb21Qb2ludGVyKG1fYnV0dGVyZmx5LT5wb2ludGVyKCkgKyBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIAorICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAg
ICAKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwdWJsaWNMZW5ndGgpOworICAg
IG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgIAor
ICAgIC8vIFNoaWZ0IHRoZSBuYW1lZCBwcm9wZXJ0aWVzIG92ZXIsIGlmIHRoZXJlIGFyZSBzb21l
LgorICAgIHNpemVfdCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgp
OworICAgIGlmIChwcm9wZXJ0eVNpemUpIHsKKyAgICAgICAgbWVtbW92ZSgKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAg
ICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9Cisg
ICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9Db250aWd1b3VzKTsK
KyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUp
OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
aWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBzdHJ1Y3R1cmUoKS0+bmVl
ZHNTbG93UHV0SW5kZXhpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
Z2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICAg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgICAg
IHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAg
ICAgICAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgaWYgKFVO
TElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCiAgICAgICAgICAgICByZXR1cm4gZW5z
dXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2Jh
bERhdGEpOwogICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxE
YXRhKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworQnV0
dGVyZmx5KiBKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBpZiAoVU5MSUtF
TFkoc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIGlmIChV
TkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGVu
c3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9i
YWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERh
dGEsIDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQpAQCAtNTA3LDYgKzY3OSwxMCBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZp
Y2llbnQsIGlmIHdlIGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxE
YXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKQEAgLTUyNiw2ICs3
MDIsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBK
U09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0
b3JhZ2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAg
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3Rv
cmFnZSk7CkBAIC01NjksOCArNzUwLDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpT
R2xvYmFsRGF0YQogICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3
aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEs
IG5ld1N0cnVjdHVyZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpOwogfQogCiBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzA0LDYgKzg4NCwx
MiBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2FzZSBB
TExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBUaGVy
ZSBpcyBhbiBleHRyZW1lbHkgb2J2aW91cyBjYXNlIHRoYXQgd2UgY291bGQgaGFuZGxlIGhlcmUg
KGRlbGV0aW5nIHRoZSBsYXN0IGVsZW1lbnQpCisgICAgICAgIC8vIGJ1dCBJIGRvbid0IGZlZWwg
bGlrZSB3cml0aW5nIHRlc3RzIGZvciBpdCwgc28gSSdsbCBwdW50IGl0LgorICAgICAgICBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAg
IC8vIEZhbGwgdGhyb3VnaC4KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtODc3LDYgKzEw
NjMsMTIgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVj
dC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTEzMzgsNiArMTUz
MCw1NyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgdmFs
dWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6
OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VS
VChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VS
VCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICAKKyAgICAvLyBGb3IgdXMgdG8gZ2V0
IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3Ro
LCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4K
KyAgICBBU1NFUlQoaSA+IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSB8fCBpID49IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgaWYgKGkgPT0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpICYmIGkgPCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFT
U0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIC8vIFRoaXMg
aXMgdGhlIG9uZSBjYXNlIHdlIGNhbiBoYW5kbGUuIEFuZCB3ZSBoYW5kbGUgaXQgYnkgZ3Jvd2lu
ZyB0aGUgY29udGlndW91cworICAgICAgICAvLyBzdG9yYWdlLgorICAgICAgICB1bnNpZ25lZCBu
ZXdWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbigKKyAgICAgICAgICAgIHRpbWVzVGhyZWVQbHVzT25l
RGl2aWRlZEJ5VHdvKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSksCisgICAgICAgICAgICBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAg
ICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAg
ICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAg
ICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgIEFTU0VSVChp
IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5n
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlKTsKK30KKwordm9pZCBKU09i
amVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91
c1RvQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsK
KyAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICBpZiAoaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihpLCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpICYmIGkgPCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBB
bGxvY2F0ZUFycmF5U3RvcmFnZSwKKyAgICAgICAgICAgIGdldE5ld1ZlY3Rvckxlbmd0aChtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSwgaSAr
IDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7CisgICAgU3BhcnNlQXJheVZhbHVlTWFwKiBtYXAgPSBh
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgIG1hcC0+cHV0RW50cnkoZXhl
YywgdGhpcywgaSwgdmFsdWUsIGZhbHNlKTsKK30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTM1MSw2ICsxNTk0LDEwIEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJv
dywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KGdsb2JhbERhdGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlm
ICghaSAmJiAhc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAg
ICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAg
ICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkgewogICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzYy
LDYgKzE2MDksMTEgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbgog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3RvckxFbmd0aENv
bnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOgogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICAv
LyBObyBvd24gcHJvcGVydHkgcHJlc2VudCBpbiB0aGUgdmVjdG9yLCBidXQgdGhlcmUgbWlnaHQg
YmUgaW4gdGhlIHNwYXJzZSBtYXAhCkBAIC0xMzg0LDggKzE2MzYsMTAgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5k
ZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3Vs
ZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2
ZWN0b3IuCisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpKTsKKyAgICBBU1NFUlQoYXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNT
RVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNT
RVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKIApAQCAtMTQ2OSw2ICsxNzIzLDEwIEBAIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8
IGF0dHJpYnV0ZXMpCiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2Rl
LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
Z2xvYmFsRGF0YSkpOworICAgICAgICBpZiAoIWkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRp
YWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKQogICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKICAgICAgICAgCkBAIC0xNDc3LDYgKzE3
MzUsMTUgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OiB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBt
b2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAg
ICAgfQorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhv
dXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMTQ5
OSwxMiArMTc2Niw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YK
ICAgICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAg
aW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9y
OgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0
aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFs
IG92ZXJmbG93LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRl
c2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsK
ICAgICB9CiAKICAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpA
QCAtMTUyNCw5ICsxNzg2LDEwIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6Omdl
dE5ld1YKICAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JM
ZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAg
ICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAg
ICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAg
IGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1NzQsNiArMTgzNywyMiBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgodW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkpOworICAgIAorICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgp
IHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisg
ICAgICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbGVuZ3RoICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgo
bGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSA8IGxlbmd0aCkKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgp
OworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTYwMiw2ICsxODgxLDEzIEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
Z2V0KCksIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNjEsNiAr
MTYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBA
IC0yMDcsNiArMjA5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0
OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0
OgpAQCAtMjY3LDYgKzI3Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpCisgICAgICAgICAgICAg
ICAgICAgICYmIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTI4NSw2ICsyOTQsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDw9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKQorICAgICAgICAgICAgICAgICAgICAmJiBpIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjk2LDE1
ICszMDgsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAg
ICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAg
ICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA8PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAg
ICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID09IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9
IHguZ2V0KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Cisg
ICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9y
YWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwg
c3RvcmFnZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKQEAgLTMzMSw2ICszNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPmluU3BhcnNlTW9kZSgpOwpAQCAtNTI4LDYgKzU1NiwxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gZm9vLT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKC4u
Lik7CiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclBy
b3RvdHlwZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgCisgICAgICAgIC8vIFJl
dHVybnMgMCBpZiBjb250aWd1b3VzIHN0b3JhZ2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIg
YmVjYXVzZQorICAgICAgICAvLyBpbmRleGluZyBzaG91bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ug
d2UncmUgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
ZW5zdXJlQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93
KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNl
CiAgICAgICAgIC8vIHRoaXMgaWYgeW91J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0
IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhlCiAgICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0
ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdlLCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdApAQCAtNTQwLDYg
KzU3OCw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJh
eVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBC
dXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKExJS0VMWShoYXNJbmRleGVkUHJvcGVydGllcyhz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVJbmRleGVk
U3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEF0dGVtcHQgdG8gY29udmVydCB0byBjb250aWd1b3VzIGluZGV4aW5nIHN0b3JhZ2UuIFJldHVy
bnMgdHJ1ZSBpZiBpdCB3YXMgZG9uZSwKKyAgICAgICAgLy8gb3IgZmFsc2UgaWYgaXQgYmFpbGVk
IG91dCBmb3IgYW55IHJlYXNvbi4gQWxzbyByZXR1cm5zIHRydWUgaWYgdGhlIGFycmF5IHdhcyBh
bHJlYWR5CisgICAgICAgIC8vIGNvbnRpZ3VvdXMuCisgICAgICAgIGJvb2wgYXR0ZW1wdFRvQ29u
dmVydFRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBjcmVh
dGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEs
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBz
aXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCkBAIC02MDIsMTEgKzY3NSwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEm
KTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjcmVhdGVJbml0aWFsQ29udGlndW91
cyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2Uq
IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgQXJyYXlT
dG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBib29sIGRlZmluZU93bk5v
bkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKICAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOwogCiAg
ICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
bmV3TGVuZ3RoKTsKQEAgLTYxNyw3ICs2OTUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoSlNHbG9iYWxEYXRhJik7CiAg
ICAgICAgIAogICAgICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUo
RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2ts
eSB0byBzdWNjZWVkIGFuZCB5b3UncmUgc3VyZSB0aGF0CisgICAgICAgIC8vIHRoZSBhcnJheSBp
cyBjb250aWd1b3VzLgorICAgICAgICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgodW5zaWdu
ZWQgbGVuZ3RoKTsKIAorICAgICAgICBib29sIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VU
b0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQoIXNob3VsZFVzZVNs
b3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBpZiAoc3Rv
cmFnZS0+bGVuZ3RoKCkgIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VN
YXApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGF0
dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERh
dGEsIHN0b3JhZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkpOworICAgICAgICAgICAgLy8gT2gsIHlvdSBkaWQgdGhpcyBjb252ZXJzaW9uIGJl
Zm9yZT8gV2VsbCwgeW91IGRvbid0IGdldCB0byBkbyBpdCBhZ2Fpbi4gQmVjYXVzZQorICAgICAg
ICAgICAgLy8gdGhyYXNoaW5nIGlzIG5ldmVyIGdvb2QuCisgICAgICAgICAgICBpZiAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEhhZEFycmF5U3RvcmFnZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBPaCwgeW91J3Zl
IHVzZWQgc2hpZnQgYW5kIHVuc2hpZnQ/IENoYW5jZXMgYXJlIHlvdSdsbCB1c2UgaXQgYWdhaW4s
IGFuZCB3ZSdsbCBoYXZlCisgICAgICAgICAgICAvLyB0byBjb252ZXJ0IGJhY2suIE5vIGNvbnRp
Z3VvdXMgYXJyYXlzIGZvciB5b3UhCisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJp
YXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29udmVydENv
bnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAK
QEAgLTY0Miw2ICs3NTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFBy
b3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKICAgICAgICAgCisg
ICAgICAgIC8vIFRoaXMgZG91YmxlcyBhcyBwdXREaXJlY3QoKSBiZWNhdXNlIChhKSBjb250aWd1
b3VzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgbm90IGluZGV4ZWQgc2V0dGVycyBvciBpbmRleGVk
IHJlYWRvbmxpZXMsIGFuZCAoYikgdGhpcyBpcyBvbmx5IGZvciBjYXNlcyB3aGVyZSB3ZSBkb24n
dCB3YW50IHRoZSBwcm9wZXJ0eSB0byBoYXZlIGFueSBhdHRyaWJ1dGVzLgorICAgICAgICB2b2lk
IHB1dEJ5SW5kZXhXaXRob3V0QXR0cmlidXRlc1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwor
ICAgICAgICAKICAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlLCBBcnJheVN0b3JhZ2UqKTsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSk7CkBAIC02NTEsOCArNzYzLDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250aWd1b3VzU2xv
dyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3Jh
Z2VTbG93KEpTR2xvYmFsRGF0YSYpOworICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRT
dG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCisgICAgICAgIHZvaWQgY29udmVy
dENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiwgQXJyYXlT
dG9yYWdlKik7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJm
bHk7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDExICszMjMsMTcgQEAgYm9v
bCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJv
cGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkg
Y29uc3QKK2Jvb2wgU3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKQor
ICAgICAgICB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpOworfQorCitOb25Q
cm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0
aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5n
VHlwZSgpKSk7CiAgICAgCi0gICAgaWYgKGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRl
eGVkQWNjZXNzZXMoKSB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpKQorICAg
IGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZygpKQogICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93
UHV0QXJyYXlTdG9yYWdlOwogICAgIAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vz
c2VzKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3Vn
Z2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93
UHV0SW5kZXhpbmcoKSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dl
c3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVj
dC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZv
ciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8g
cHJvcGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0
aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7
CisgICAgQWxsb2NhdGVDb250aWd1b3VzLAorICAgIFN3aXRjaFRvQ29udGlndW91cywKICAgICBB
bGxvY2F0ZUFycmF5U3RvcmFnZSwKICAgICBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UsCiAg
ICAgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlLApAQCAtNTcsMTIgKzU5LDE5IEBAIGlubGlu
ZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHkKIGlubGluZSBJbmRleGluZ1R5cGUg
bmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b24gdHJhbnNpdGlvbikKIHsKICAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFs
bG9jYXRlQ29udGlndW91czoKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIChIYXNBcnJheVN0
b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkpOworICAgICAgICByZXR1cm4gb2xkVHlw
ZSB8IEhhc0NvbnRpZ3VvdXM7CisgICAgY2FzZSBTd2l0Y2hUb0NvbnRpZ3VvdXM6CisgICAgICAg
IEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgcmV0dXJuIChvbGRU
eXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCAoSGFzQ29udGlndW91cyB8IEhhZEFycmF5U3RvcmFn
ZSk7CiAgICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIG9sZFR5
cGUgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250
aWd1b3VzKSB8IEhhc0FycmF5U3RvcmFnZTsKICAgICBjYXNlIEFsbG9jYXRlU2xvd1B1dEFycmF5
U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdl
OworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAg
ICAgICBBU1NFUlQob2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgIEFTU0VSVCgh
KG9sZFR5cGUgJiBIYXNDb250aWd1b3VzKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5I
YXNBcnJheVN0b3JhZ2UpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIEFkZElu
ZGV4ZWRBY2Nlc3NvcnM6CiAgICAgICAgIHJldHVybiBvbGRUeXBlIHwgTWF5SGF2ZUluZGV4ZWRB
Y2Nlc3NvcnM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaGFzVHdvTwogICAgIHJldHVybiAh
aGFzWmVyb09yT25lQml0c1NldCh2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBUIHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKFQgdmFsdWUpCit7CisgICAgLy8g
TWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKKyAgICAvLyAgICh2YWx1ZSAqIDMgKyAxKSAv
IDI7CisgICAgLy8gb3I6CisgICAgLy8gICAodW5zaWduZWQpY2VpbCh2YWx1ZSAqIDEuNSkpOwor
ICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAg
cmV0dXJuIHZhbHVlICsgKHZhbHVlID4+IDEpICsgKHZhbHVlICYgMSk7Cit9CisKICNpZiAhQ09N
UElMRVIoTVNWQykgJiYgIUNPTVBJTEVSKFJWQ1QpICYmICFPUyhTT0xBUklTKQogdXNpbmcgc3Rk
Ojppc2Zpbml0ZTsKICNpZiAhQ09NUElMRVJfUVVJUksoR0NDMTFfR0xPQkFMX0lTSU5GX0lTTkFO
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165945</attachid>
            <date>2012-09-27 00:17:50 -0700</date>
            <delta_ts>2012-09-29 17:56:29 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>contiguous_patch_9.diff</filename>
            <type>text/plain</type>
            <size>204851</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0wOS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSgpIGlnbm9yZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
ZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcHJldmVudGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2
Myw2ICsxNjMsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0Mz
REIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8q
IERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi87IH07
CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VF
MDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTkzMyw2ICs5MzQsNyBAQAogCQkwRjc3
MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RC
MSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU3ltYm9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjQ3Miw1NiArMjQ3NCw1NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEY2Mzk0
NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEY2Mzk0NTIx
NUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovLAotCQkJCTBGNTZBMUQ0MTUwMDFD
RjIwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKLQkJCQkwRjU2QTFEMTE1MDAw
RjMxMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovLAotCQkJCTBGQjU0NjdDMTRGNUNG
RDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKLQkJCQkw
RkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
ICovLAotCQkJCTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgKi8sCi0JCQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmggKi8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVj
b2RlQ29udmVudGlvbnMuaCAqLywKLQkJCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJ
bnRDYWxsTGlua0luZm8uaCAqLywKLQkJCQkwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3Bl
cmFuZHMuaCAqLywKLQkJCQkwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAgKi8sCi0JCQkJMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCAqLywKLQkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyog
UHV0S2luZC5oICovLAorCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8u
aCAqLywKKwkJCQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAq
LywKKwkJCQkwRjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJ
CQkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKIAkJ
CQkwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLywKLQkJCQkw
RjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5
MzMyOTYxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5
NzE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovLAotCQkJCTBG
OTMzMjk4MTRDQTdEQzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICovLAotCQkJ
CTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKLQkJCQkw
RjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAotCQkJCTBGRjQy
NzZFMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCAqLywKLQkJCQkw
RkY0Mjc2RjE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5oICovLAotCQkJ
CTBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLywKIAkJCQkwRjBC
ODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQu
aCAqLywKLQkJCQkwRjBCODNCNjE0QkNGOERGMDA4ODVCNEYgLyogR2xvYmFsUmVzb2x2ZUluZm8u
aCAqLywKLQkJCQkwRjBCODNCMjE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJbmZv
LmNwcCAqLywKLQkJCQkwRjBCODNCMzE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJ
bmZvLmggKi8sCi0JCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5j
cHAgKi8sCi0JCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICov
LAotCQkJCUZFQjYzQUEyMTU5QjlEQTMwMDg5MzJBNiAvKiBDb21tZW50LmggKi8sCi0JCQkJMEYw
QjgzQUMxNEJDRjYwMjAwODg1QjRGIC8qIExpbmVJbmZvLmggKi8sCi0JCQkJMEYwQjgzQUExNEJD
RjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCAqLywKLQkJCQkwRjBCODNBODE0
QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywKLQkJCQkwRjBCODNBNTE0QkNGNTA0
MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQk5NjlBMDc5MDBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQk5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEgLyogQ29k
ZUJsb2NrLmggKi8sCiAJCQkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCAqLywKKwkJCQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKKwkJ
CQlGRUI2M0FBMjE1OUI5REEzMDA4OTMyQTYgLyogQ29tbWVudC5oICovLAogCQkJCTBGNDI2QTRB
MTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCiAJCQkJMEZCQzBBRTQxNDk2QzdD
MTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLywKIAkJCQkwRkJDMEFFNTE0OTZDN0Mx
MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLywKIAkJCQk5NjlBMDc5MjBFRDFEM0FFMDBG
MUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovLAorCQkJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJC
MSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKKwkJCQkwRjU2QTFEMTE1MDAwRjMxMDAyOTky
QjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovLAorCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0
RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggKi8sCisJCQkJMEY5MzMyOTUxNENBN0RDMTAwODVG
M0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjND
NiAvKiBHZXRCeUlkU3RhdHVzLmggKi8sCisJCQkJMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8q
IEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCisJCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8q
IEhhbmRsZXJJbmZvLmggKi8sCiAJCQkJOTY5QTA3OTMwRUQxRDNBRTAwRjFGNjgxIC8qIEluc3Ry
dWN0aW9uLmggKi8sCiAJCQkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5j
cHAgKi8sCiAJCQkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovLAor
CQkJCTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgKi8sCisJCQkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlLmggKi8sCisJCQkJMEYwQjgzQUMxNEJDRjYwMjAwODg1QjRGIC8qIExpbmVJbmZvLmgg
Ki8sCisJCQkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8sCisJCQkJMEYwQjgzQjIxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5j
cHAgKi8sCisJCQkJMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5m
by5oICovLAorCQkJCTBGOTMzMjk3MTRDQTdEQzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0
YXR1cy5jcHAgKi8sCisJCQkJMEY5MzMyOTgxNENBN0RDMTAwODVGM0M2IC8qIE1ldGhvZENhbGxM
aW5rU3RhdHVzLmggKi8sCisJCQkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovLAorCQkJCTBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJOTY5QTA3OTQwRUQx
RDNBRTAwRjFGNjgxIC8qIE9wY29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFG
NjgxIC8qIE9wY29kZS5oICovLAotCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVj
dWxhdGVkVHlwZS5jcHAgKi8sCi0JCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFNwZWN1
bGF0ZWRUeXBlLmggKi8sCisJCQkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRz
LmggKi8sCisJCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuY3BwICovLAorCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmggKi8sCisJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggKi8sCisJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAq
LywKKwkJCQkwRkY0Mjc2RTE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5j
cHAgKi8sCisJCQkJMEZGNDI3NkYxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0
dXMuaCAqLywKIAkJCQkxNDI5RDg4MzBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNw
cCAqLywKIAkJCQkxNDI5RDg4NDBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmggKi8s
CisJCQkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCAqLywK
KwkJCQkwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCAqLywKKwkJ
CQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8sCiAJCQkJMEY3
NjZEMzYxNUFFNEExQTAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwICovLAogCQkJCTBGNzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50LmggKi8sCiAJCQkJQkNDRjBEMEIwRUYwQjhBNTAwNDEzQzhGIC8qIFN0
cnVjdHVyZVN0dWJJbmZvLmNwcCAqLywKQEAgLTI5NDksNiArMjk1Miw3IEBACiAJCQkJMEZCN0Yz
OUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0Yz
OUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTY0LDcgKzU2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1f
anVtcHMuYXBwZW5kKGp1bXApOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGFw
cGVuZChKdW1wTGlzdCYgb3RoZXIpCisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IEp1bXBMaXN0
JiBvdGhlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQob3RoZXIubV9q
dW1wcy5iZWdpbigpLCBvdGhlci5tX2p1bXBzLnNpemUoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSwxMSBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChqdW1wKCkpOwogICAgIH0KKworICAg
IFBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFJlc3VsdENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAoYnJhbmNoVGVzdDMyKGNvbmQsIHJl
ZywgbWFzaykpOworICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBqdW1wKExhYmVsIHRhcmdldCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeVZhbEluZm9faAorI2RlZmluZSBCeVZhbEluZm9f
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5j
bHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVk
ZSAiSklUU3R1YlJvdXRpbmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gSklUQXJyYXlN
b2RlIHsgSklUQ29udGlndW91cywgSklUQXJyYXlTdG9yYWdlIH07CisKK2lubGluZSBib29sIGlz
T3B0aW1pemFibGVJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5k
ZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChpbmRl
eGluZ1R5cGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICByZXR1cm4gSklUQ29udGlndW91czsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gSklUQ29udGlndW91
czsKKyAgICB9Cit9CisKK3N0cnVjdCBCeVZhbEluZm8geworICAgIEJ5VmFsSW5mbygpIHsgfQor
ICAgIAorICAgIEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25K
dW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBpbnQxNl90IGJhZFR5cGVK
dW1wVG9Eb25lLCBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAgICAgICA6IGJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBl
SnVtcCkKKyAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAsIGJhZFR5cGVK
dW1wVG9Eb25lKGJhZFR5cGVKdW1wVG9Eb25lKQorICAgICAgICAsIHJldHVybkFkZHJlc3NUb1Ns
b3dQYXRoKHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1w
OworICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7IC8vIFRoZSBhcnJheSBtb2RlIHRoYXQgd2Fz
IGJha2VkIGludG8gdGhlIGlubGluZSBKSVQgY29kZS4KKyAgICBpbnQxNl90IGJhZFR5cGVKdW1w
VG9Eb25lOworICAgIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGg7CisgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKK307CisKK2lubGluZSB1bnNpZ25lZCBnZXRC
eVZhbEluZm9CeXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKK3sKKyAgICByZXR1cm4gaW5m
by0+Ynl0ZWNvZGVJbmRleDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCisjZW5kaWYgLy8gQnlWYWxJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJBcnJheVBy
b2ZpbGUuaCIKKyNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZl
bnRpb25zLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKQEAgLTIwOSw2ICsyMTAsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRTdHViKFN0cnVj
dHVyZVN0dWJJbmZvJik7CisgICAgICAgIAorICAgICAgICBCeVZhbEluZm8mIGdldEJ5VmFsSW5m
byh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KihiaW5hcnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZCwgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJ
bmRleD4obV9ieVZhbEluZm9zLmJlZ2luKCksIG1fYnlWYWxJbmZvcy5zaXplKCksIGJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgfQogCiAgICAgICAgIENhbGxMaW5rSW5mbyYgZ2V0Q2FsbExpbmtJ
bmZvKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewpAQCAtNjEwLDYg
KzYxNiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXROdW1iZXJPZlN0cnVj
dHVyZVN0dWJJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX3N0cnVjdHVyZVN0dWJJbmZvcy5ncm93KHNp
emUpOyB9CiAgICAgICAgIHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQogICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3RydWN0dXJlU3R1YkluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX3N0cnVj
dHVyZVN0dWJJbmZvc1tpbmRleF07IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0TnVtYmVy
T2ZCeVZhbEluZm9zKHNpemVfdCBzaXplKSB7IG1fYnlWYWxJbmZvcy5ncm93KHNpemUpOyB9Cisg
ICAgICAgIHNpemVfdCBudW1iZXJPZkJ5VmFsSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX2J5VmFs
SW5mb3Muc2l6ZSgpOyB9CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvKHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV9ieVZhbEluZm9zW2luZGV4XTsgfQogCiAgICAgICAgIHZvaWQgYWRkR2xv
YmFsUmVzb2x2ZUluZm8odW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uKQogICAgICAg
ICB7CkBAIC0xMjg5LDYgKzEyOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2lmIEVO
QUJMRShKSVQpCiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHJ1Y3R1cmVT
dHViSW5mb3M7CisgICAgICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKICAgICAg
ICAgVmVjdG9yPEdsb2JhbFJlc29sdmVJbmZvPiBtX2dsb2JhbFJlc29sdmVJbmZvczsKICAgICAg
ICAgVmVjdG9yPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBWZWN0b3I8
TWV0aG9kQ2FsbExpbmtJbmZvPiBtX21ldGhvZENhbGxMaW5rSW5mb3M7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEy
OTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg1OSwxMiArODU5LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VP
VVNfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAg
Y2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAg
ICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKQEAgLTkwOCw2ICs5MTIsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVj
RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC05MjQsMTEgKzkzMSwxNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgogICAgICAgICBj
YXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFSUkFZX1NU
T1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NU
T1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RF
UzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEzNjcsNyArMTM4MCw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19N
T0RFUzogLy8gVGhlc2Ugb25seSBnZXQgYSBDaGVja0FycmF5IGZvciBHZXRBcnJheUxlbmd0aAog
ICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGZpbHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJp
Z2h0IG5vdy4gV2UgbWF5IHdhbnQgdG8gYWRkCiAgICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcg
b2YgYXJyYXkgbW9kZSBzcGVjdWxhdGlvbnMsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4K
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKQEAg
LTE0MTAsOSArMTQyNSwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnk6IHsKICAgICAgICAgc3dpdGNoIChub2RlLmFy
cmF5TW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9S
QUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFy
KCk7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDE0IEBAIEFycmF5OjpN
b2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHAKICAgICAgICAgcmV0dXJuIEFycmF5OjpV
bnByb2ZpbGVkOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KToKICAgICAgICAgaWYg
KGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpKQotICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdl
OyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRvIGdvIHRvIHNsb3cgcHV0IG1vZGUs
IG9yIG5vdC4gVGhpcyBpcyBhIGRlY2VudCBndWVzcy4KKyAgICAgICAgICAgIHJldHVybiBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtu
b3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1dCBtb2RlIG9yIG5vdC4gV2UncmUgZ3Vlc3Npbmcg
dGhhdCB3ZSBkb24ndCBuZWVkIHNsb3cgcHV0LgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKKyAg
ICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChw
cm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWwgOiBBcnJh
eTo6Q29udGlndW91cyk7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91
cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVU
b0hvbGUoKSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwgOiBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJh
eTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/
IEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6QXJyYXlTdG9yYWdlKTsKICAgICBj
YXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKQEAgLTU2
LDYgKzYyLDIwIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHAKICAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAg
ICAgIHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOwor
ICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6Q29u
dGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IHJldHVybiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91
cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJu
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBj
YXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29u
dGlndW91cyk6CisgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxl
LT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXM7CisgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOwor
ICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgor
ICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJj
ZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9D
b250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVk
OwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAm
JiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7CkBAIC0xNDQsNiArMTY0LDIyIEBAIGJv
b2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CiAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7
CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6
Q29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJu
IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAg
ICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpICYgSGFzQ29udGlndW91cyk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFp
bDoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAg
ICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQor
ICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5pbmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpCisgICAgICAgICAgICAmJiAodmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNB
cnJheSk7CisKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgpAQCAtMTcwLDcgKzIwNiw4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0
VmFsdWUmIHYKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZSkpCiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAot
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKQEAgLTIy
NSw2ICsyNjIsMjQgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAog
ICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAg
ICAgICByZXR1cm4gIlN0cmluZyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAg
ICAgcmV0dXJuICJDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWls
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNUb1RhaWwiOworICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHJldHVy
biAiQXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIjsK
KyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENv
bnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcyI7CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1
cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOgpA
QCAtMjQ5LDEwICszMDQsMjAgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2Rl
IG1vZAogICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSI7CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kczoKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgcmV0
dXJuICJCbGFua1RvQ29udGlndW91cyI7CiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3Rv
cmFnZToKICAgICAgICAgcmV0dXJuICJCbGFua1RvQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFy
cmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJCbGFua1Rv
U2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJCbGFua1RvQ29udGlndW91c09yQXJyYXlT
dG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
ICAgIHJldHVybiAiQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlX
aXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShy
ZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNSBAQCBlbnVtIE1vZGUgewogICAgIFN0
cmluZywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdl
IHdoZXJlIHRoZSBjaGVjayBpcyBub24gc2lkZS1lZmZlY3RpbmcuCisgICAgQ29udGlndW91cywK
KyAgICBDb250aWd1b3VzVG9UYWlsLAorICAgIENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBB
cnJheVdpdGhDb250aWd1b3VzLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwsCisgICAg
QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91cywKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwsCisgICAgUG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMsCiAgICAgQXJyYXlTdG9yYWdlLAog
ICAgIEFycmF5U3RvcmFnZVRvSG9sZSwKICAgICBTbG93UHV0QXJyYXlTdG9yYWdlLApAQCAtNjgs
OCArNzcsMTYgQEAgZW51bSBNb2RlIHsKICAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzLAogICAgIAogICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRleGVk
IHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlzIHNpZGUtZWZmZWN0aW5nLgorICAgIEJsYW5rVG9D
b250aWd1b3VzLAogICAgIEJsYW5rVG9BcnJheVN0b3JhZ2UsCiAgICAgQmxhbmtUb1Nsb3dQdXRB
cnJheVN0b3JhZ2UsCisgICAgQmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICAK
KyAgICAvLyBNb2RlcyB0aGF0IGluZGljYXRlIHBvbHltb3JwaGljIGFycmF5IHN0b3JhZ2UuIFRo
ZXNlIGRvbid0IGJlbmVmaXQgZnJvbQorICAgIC8vIGFueSBjaGVja2luZyBvciBzdG9yYWdlIENT
RS4KKyAgICBDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlXaXRoQ29udGlndW91
c09yQXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlT
dG9yYWdlLAogICAgIAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCkBAIC04OSw2ICsx
MDYsMzIgQEAgZW51bSBNb2RlIHsKIC8vIGhhdmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIgaW4g
dGhlbS4KIAogLy8gRmlyc3Q6IGhlbHBlcnMgZm9yIG5vbi1zaWRlLWVmZmVjdGluZyBjaGVja3Mu
CisjZGVmaW5lIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENv
bnRpZ3VvdXM6ICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlfV0lUSF9DT05USUdV
T1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQUxMX0NPTlRJR1VP
VVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PTl9BUlJBWV9D
T05USUdVT1VTX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBB
UlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMKKyNkZWZpbmUgQ09OVElHVU9VU19UT19UQUlM
X01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3Vz
VG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFy
cmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwKKyNkZWZpbmUgT1VUX09GX0JP
VU5EU19DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpD
b250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcwogI2Rl
ZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAg
ICAgICAgICAgXApAQCAtMTA2LDMzICsxNDksNDggQEAgZW51bSBNb2RlIHsKICNkZWZpbmUgQUxM
X0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE5P
Tl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpB
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQogI2RlZmluZSBBUlJB
WV9TVE9SQUdFX1RPX0hPTEVfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAg
XAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlCi0j
ZGVmaW5lIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5
U3RvcmFnZQogI2RlZmluZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
U2xvd1B1dEFycmF5U3RvcmFnZQogI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0Vf
TU9ERVMgICAgICAgICAgICAgICAgICBcCi0gICAgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgIFwKICAgICBjYXNlIEFy
cmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzCiAKIC8vIE5leHQ6
IGhlbHBlcnMgZm9yIHNpZGUtZWZmZWN0aW5nIGNoZWNrcy4KLSNkZWZpbmUgRUZGRUNURlVMX05P
Tl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTIFwKLSAgICBBcnJheTo6QmxhbmtUb0FycmF5U3Rv
cmFnZTogICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQ29udGlndW91
cworI2RlZmluZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAg
ICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZQot
I2RlZmluZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgXAorI2RlZmlu
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCiAg
ICAgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTCi0jZGVmaW5lIFNMT1df
UFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICBcCisjZGVmaW5lIFNMT1dfUFVUX0VG
RkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgIFwKICAgICBBcnJheTo6Qmxh
bmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UKKyNkZWZpbmUgUE9MWU1PUlBISUNfRUZGRUNURlVMX01P
REVTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQ29udGlndW91
c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBQT0xZTU9SUEhJQ19FRkZF
Q1RGVUxfTU9ERVMKKworLy8gRmluYWxseTogaGVscGVycyBmb3IgcG9seW1vcnBoaWMgYXJyYXkg
YWNjZXNzZXMuCisjZGVmaW5lIFBPTFlNT1JQSElDX01PREVTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZTogICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UKKyNkZWZpbmUgQUxMX1BPTFlNT1JQSElDX01PREVT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFBPTFlNT1JQSElDX0VGRkVDVEZV
TF9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBQT0xZTU9SUEhJ
Q19NT0RFUwogCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiwgQXJyYXk6
OkFjdGlvbiwgYm9vbCBtYWtlU2FmZSk7CiAKQEAgLTE0NSw4ICsyMDMsMTAgQEAgY29uc3QgY2hh
ciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIGlubGluZSBib29sIG1vZGVVc2VzQnV0dGVy
Zmx5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTU2LDcgKzIxNiw5IEBAIGlubGluZSBib29sIG1vZGVVc2VzQnV0dGVyZmx5KEFycmF5
OjpNb2QKIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQog
ewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VP
VVNfTU9ERVM6CiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjYs
NiArMjI4LDkgQEAgaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcgogaW5s
aW5lIGJvb2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVT
OgorICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgIGNhc2UgQVJSQVlfU1RP
UkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0xODQsMTggKzI0OSw1
NSBAQCBpbmxpbmUgYm9vbCBpc1Nsb3dQdXRBY2Nlc3MoQXJyYXk6Ok1vZGUgCiAgICAgfQogfQog
CitpbmxpbmUgYm9vbCBtYXlTdG9yZVRvVGFpbChBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7Cisg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RF
UzoKKyAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19N
T0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIGJvb2wgbWF5U3RvcmVUb0hvbGUoQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CiAgICAgY2FzZSBBUlJB
WV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NU
T1JBR0VfTU9ERVM6CisgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX1BP
TFlNT1JQSElDX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBtb2RlSXNQb2x5bW9y
cGhpYyhBcnJheTo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
QUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBwb2x5bW9y
cGhpY0luY2x1ZGVzQ29udGlndW91cyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNT
RVJUX1VOVVNFRChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAg
IHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlT
dG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGFycmF5
TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewog
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CkBAIC0yMDQsNiArMzA2LDcgQEAgaW5saW5lIGJvb2wg
Y2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAg
ICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQ5LDcgKzM1MiwxMSBAQCBpbmxp
bmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vCiAgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2Vu
ZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVT
OgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFy
cmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjU5
LDcgKzM2Niw4IEBAIGlubGluZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW8KIGlu
bGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKEFycmF5OjpNb2RlIG1vZGUpCiB7
CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1P
UlBISUNfTU9ERVM6CiAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgogICAgIGNhc2UgQXJyYXk6
OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgpAQCAtMjczLDcgKzM4MSw3
IEBAIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKEEKIGlubGluZSBib29s
IGlzRWZmZWN0ZnVsKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0g
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExf
RUZGRUNURlVMX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NzEsNiArMTU3MSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28K
ICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChB
cnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMSkpKTsKQEAgLTE1OTQsNiArMTU5Niw4IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgogICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
bm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHItPmNv
ZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCksIGxlbmd0aE5lZWRzU3RvcmFnZSwg
bm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5j
aGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hv
dWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzNywxNyArMTM3LDE3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7CisgICAgICAgICAgICBibGVz
c0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIDIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDEp
OworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNo
aWxkMigpLCAxKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFsdWVU
b0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CisgICAgICAgICAgICBibGVzc0FycmF5T3Bl
cmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgICAgIApAQCAt
Mzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VD
aGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9
IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgTm9kZUluZGV4IGluZGV4LCBi
b29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNo
b3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtb2RlSXNTcGVjaWZp
YyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKIAog
ICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgTm9kZSBh
cnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsK
KyAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBOb05vZGUpOworICAgICAgICAgICAgbV9ncmFw
aC5yZWYoaW5kZXgpOworICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9y
aWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBpbmRleCk7CiAgICAgICAgICAgICBhcnJh
eWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNlZCBhcyBhIGJ1dHRlcmZseS4KICAg
ICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdpY2UgYmVjYXVzZSBpdCdzIG11c3Qt
Z2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlpZnlJbmRleCA9IG1fZ3JhcGgu
c2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGFk
ZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8o
YXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElk
eCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCB1
bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAgICAgewogICAgICAgICBpZiAobV9ncmFwaC5tX2Zp
eHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
OwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHItPmFycmF5TW9kZSgpID09IEFycmF5OjpG
b3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAgICAgICAgIE5vZGUgZm9yY2VFeGl0
KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICBmb3JjZUV4
aXQucmVmKCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggZm9yY2VFeGl0SW5kZXggPSBtX2dyYXBo
LnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGZvcmNlRXhpdEluZGV4KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFtb2RlSXNT
cGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUoKSkpCisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHIt
PmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCkpOwotICAgICAg
ICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICBkZWZhdWx0OiB7
CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJy
YXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmlnaW4sIGJhc2UuaW5kZXgoKSwgaW5kZXguaW5kZXgo
KSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4SW50
RWRnZShFZGdlJiBlZGdlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAg
ICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2Ug
UE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlW
YWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDksNiArMTMwOSwxNCBAQCBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5z
dXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIAorICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMoZ2xv
YmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsxMzI1
LDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGlu
dDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEs
IGV4ZWMpOworCisgICAgaWYgKGluZGV4KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdl
KGdsb2JhbERhdGEpKTsKK30KKwogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9u
SW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUq
LCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
KCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBp
bnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3Bl
cmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaKShF
eGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiAoKkpfREZHT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2Fs
bEZyYW1lKiwgaW50MzJfdCk7CkBAIC0xMTAsNiArMTEwLDcgQEAgdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04g
KCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYgY2hh
ciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBE
RkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6
ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShF
eGVjU3RhdGUqLCBzaXplX3QpOwogCkBAIC0xOTIsNyArMTkzLDkgQEAgY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lO
VEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09i
amVjdCopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCos
IHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
Kik7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5
U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwogCiAvLyBUaGlzIG1ldGhv
ZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExv
Y2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUg
Y2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksNiArMjEwOSwxMTAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5
VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcs
IEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgCisgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHRSZWcpOworICAgIAorICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJl
ZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHRSZWcpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWcpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9k
ZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBH
UFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5
TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBpZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkp
IHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0lu
Qm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIHNsb3dDYXNlcyk7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wUmVn
KTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAg
ICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisgICAgfQorCisgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgIAorICAgIGlmIChpc0luQm91bmRz
QWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QoKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiBub2Rl
LCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2
YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0g
bm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRz
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUp
KQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOworCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGlu
ZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIGlm
ICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHVuY291
bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJ
VAorICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0
aGVyZSBpcyBubyBuZWVkIGZvciBleGl0CisgICAgICAgIC8vIHByb2ZpbGluZy4KKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpOworICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkp
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQg
dG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAorICAgICAgICAgICAg
Ly8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0
aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcg
YSBiYWQgdGltZS4KKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251
bVZhbHVlc0luVmVjdG9yKSksIHRlbXBSZWcpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0lu
VmVjdG9yKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3Jp
dGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1w
UmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygm
bV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4K
KyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAKKyAgICByZXR1cm4g
c2xvd0Nhc2VzOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7CkBAIC0yNTk1LDYgKzI2OTksNTAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JP
VU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElH
VU9VU19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJl
ZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUNvbnRpZ3Vv
dXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0
UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOwpAQCAtMjYxNSw2ICsyNzYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yNjI3LDIx
ICsyNzc2LDY1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRz
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0K
KyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGhvbGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1
bHQuZ3ByKCkpOwotCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAg
ICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJv
dWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFN0cnVjdHVyZTo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGlj
SW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2Vz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJv
dWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2Rl
LmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVn
LCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKICAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bEFycmF5SW50LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHBy
b3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgpAQCAtMjczNSw4ICsyOTI4LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewot
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICBjYXNlIEFMTF9DT05USUdV
T1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzog
ewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBAIC0yNzU2LDU5ICsyOTQ5
LDc2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZh
bHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJh
eUJvdW5kcyk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBo
b2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAgICAgICAgaWYgKCFtYXlTdG9y
ZVRvSG9sZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50
YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQK
LSAgICAgICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3Jl
LiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAgICAgICAgICAgLy8gcHJvZmls
aW5nLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSkpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlN
b2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4g
SWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQK
LSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5
IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQotICAgICAgICAg
ICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAgICAgICAgICAgICAg
ICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dp
bmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlS
ZWcgPSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZSk7CisKKyAg
ICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAg
ICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9Cisg
ICAgICAgICAgICAgICAgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCgKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0
ZW1wb3JhcnlSZWcpOworCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgaWYg
KEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VS
ZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
Y3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFs
QWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5
LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFy
eVJlZyA9IHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKwog
ICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0K
KyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJl
ZywgdGVtcG9yYXJ5UmVnKTsKIAotICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRo
ZSBhcnJheS4KLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwot
Ci0gICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChiZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKQotICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGlzSG9sZVZhbHVlKTsKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2Vz
LmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLApAQCAtMjgyMCw2ICszMDMwLDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Cisg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBv
cmFyeVJlZyA9IHRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBvcmFyeVJl
Zyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcG9yYXJ5UmVnLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcG9yYXJ5UmVnKTsKKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0Nv
bnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250
aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZh
bHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChw
b2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBm
YWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9y
YWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9y
YWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
UmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChm
YWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9u
ZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5
UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBub1Jlc3VsdChtX2Nv
bXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1l
bnRzOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwog
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yOTczLDI2ICszMjMz
LDUzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
KSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQ
dXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUg
Yml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0
aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUg
Yml6YXJyZSBsZW5ndGhzLgorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSk7Ci0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAotICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAg
ICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3Rv
cmFnZUxlbmd0aEdQUiwKLSAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZh
bHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIGpz
VmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBO
b1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIs
IGJhc2VHUFIpKTsKKyAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VM
ZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtMzAwMiw0MSArMzI4OSw3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFn
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBcnJheVBvcCBpbiBjb250aWd1
b3VzIG1vZGUgaGFzIG5vIGNoYW5jZSBvZiBzaWRlIGVmZmVjdHMuIFdlIHNob3VsZCB0YWtlCisg
ICAgICAgICAgICAvLyBhZHZhbnRhZ2Ugb2YgdGhpcywgc29tZWhvdy4KKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCB1bmRlZmluZWRDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIpLCB2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVk
Q2FzZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVu
Z3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7Ci0gICAgICAgIHNldFVuZGVmaW5lZENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VM
ZW5ndGhHUFIpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmlu
ZWRDYXNlczsKKyAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKICAgICAg
ICAgCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5n
dGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0
b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAKLSAgICAgICAgc2V0VW5kZWZpbmVk
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZh
bHVlR1BSKSk7CisgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCi0g
ICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSk7Ci0gICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAotICAgICAg
ICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlzLAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSks
IHZhbHVlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENh
c2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwogICAgICAg
ICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2
YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CiAKLSAgICAg
ICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMzIxMCw4ICszNTI2LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHNpemVHUFIgPSBzaXplLmdwcigpOwog
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3Vs
dC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBzaXplR1BSKTsKLSAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90RW1wdHkgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IHNpemVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIG5vdEVt
cHR5LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emUsIHJlc3VsdEdQUiwgcmVzdWx0R1BSLCBzaXplR1BSKTsKKyAgICAgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDYgKzM1MiwyOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUmIG5vCiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIFBPTFlN
T1JQSElDX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0
ZW1wR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHR1cm5lZCBpbnRvIGEgc2lu
Z2xlIGJyYW5jaC4gQnV0IHdlIGN1cnJlbnRseSBoYXZlIG5vIGV2aWRlbmNlCisgICAgICAgIC8v
IHRoYXQgZG9pbmcgc28gd291bGQgYmUgcHJvZml0YWJsZSwgbm9yIGRvIEkgZmVlbCBjb21mb3J0
YWJsZSB3aXRoIHRoZSBwcmVzZW50IHRlc3QKKyAgICAgICAgLy8gY292ZXJhZ2UgZm9yIHRoaXMg
Y29kZSBwYXRoLgorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigKKyAg
ICAgICAgICAgICAgICAgICAgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJy
YXlNb2RlKCkpID8gSGFzQ29udGlndW91cyA6IDApCisgICAgICAgICAgICAgICAgICAgIHwgKHBv
bHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkgPyBIYXNBcnJh
eVN0b3JhZ2UgOiAwKSkpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3VtZW50czo6c19pbmZvOwogICAgICAg
ICBicmVhazsKQEAgLTM5MCw3MiArNDEzLDk4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5
aWZ5KE5vZGUmIG5vZGUKICAgICBBU1NFUlQoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAKKyAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2s7
CiAgICAgCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBFRkZFQ1RG
VUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0cnVjdHVyZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAg
ICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91
czoKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAgICAg
ICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAg
IGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFy
cmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBI
YXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
R1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKKyAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOworICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIo
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgCi0gICAgICAgIC8vIFdlIGNhbiBza2lw
IGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCi0g
ICAgICAgIEluZGV4aW5nVHlwZSBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9Ci0gICAgICAgICAg
ICBpc1Nsb3dQdXRBY2Nlc3Mobm9kZS5hcnJheU1vZGUoKSkgPyAoSGFzQXJyYXlTdG9yYWdlIHwg
SGFzU2xvd1B1dEFycmF5U3RvcmFnZSkgOiBIYXNBcnJheVN0b3JhZ2U7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVN
YXNrKSk7CisgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJl
YWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2Fz
ZSA9IG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9h
ZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIG1faml0LmxvYWRQdHIoCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQp
OworICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIC8vIE5leHQg
Y2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2Vz
LiBJZiBpdCBkb2VzLAotICAgICAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykp
KTsKKyAgICAvLyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQg
aW5kZXhlZCBhY2Nlc3Nlcy4gSWYgaXQgZG9lcywKKyAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24n
dCB3b3JrLgorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIE5vdyBjYWxsIG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCi0g
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIC8vIE5vdyBjYWxs
IG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCisgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnModGVtcEdQUik7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgY2Fz
ZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW5zdXJlQ29udGlndW91cywgdGVtcEdQUiwgYmFzZVJlZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6Qmxh
bmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RW5zdXJlQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnKTsKLSAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKLQotICAgICAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJl
bG9hZCB0aGUgc3RydWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUK
LSAgICAgICAgLy8gdGVtcG9yYXJpZXMuIE5vciB3b3VsZCBpdCBiZSB1c2VmdWwgZm9yIGl0IHRv
IGRvIHNvLiBFaXRoZXIgd2F5IHdlJ3JlIHRhbGtpbmcKLSAgICAgICAgLy8gYWJvdXQgYSBsb2Fk
LgotICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7
Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtp
bmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCi0gICAgICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGlzIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxs
IHJlc3VsdCBpbiB0aGUgCi0gICAgICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlvbiBjb3JyZXNwb25k
aW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4KLSAgICAgICAgLy8g
VGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCi0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2ly
ZWRJbmRleGluZ1R5cGVNYXNrKSkpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIHN0b3JhZ2VSZXN1bHQodGVtcEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICBicmVhazsKLSAgICB9CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZToKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1
b3VzT3JBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIENSQVNIKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHRlbXBHUFIpOworCisgICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhl
IHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCisgICAgLy8g
dGVtcG9yYXJpZXMuIE5vciB3b3VsZCBpdCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRo
ZXIgd2F5IHdlJ3JlIHRhbGtpbmcKKyAgICAvLyBhYm91dCBhIGxvYWQuCisgICAgbV9qaXQubG9h
ZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgIC8vIEZpbmFs
bHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUga2luZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ug
d2FudGVkIHRvIGdldC4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVj
dWxhdGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAorICAgIC8vIGJ5dGVjb2Rl
IG9wZXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVl
eGVjdXRlZC4KKyAgICAvLyBUaGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90
IHVzZXItdmlzaWJsZS4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4
aW5nVHlwZU1hc2spKSk7CisgICAgICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIHN0
b3JhZ2VSZXN1bHQodGVtcEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQogCiBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0zMzk5LDYgKzM0
NDgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHN0
b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYg
dGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgaWYgKCFwdXRCeVZhbFdp
bGxOZWVkRXh0cmFSZWdpc3RlcihhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gSW52YWxpZEdQ
UlJlZzsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVhbFRlbXBvcmFyeSh0aGlzKTsKKyAgICB0
ZW1wb3JhcnkuYWRvcHQocmVhbFRlbXBvcmFyeSk7CisgICAgcmV0dXJuIHRlbXBvcmFyeS5ncHIo
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEy
OTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKK2NsYXNzIEdQUlRlbXBvcmFyeTsKIGNsYXNzIEpTVmFsdWVPcGVyYW5kOwog
Y2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAgLTExNjYs
NiArMTE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25f
RU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVj
dCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6
ZSkpOwpAQCAtMTIxOCwxMSArMTIyNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOwpAQCAtMTQ2OCw2ICsxNDc5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIGludDMyX3QgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0
aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXpl
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwg
VHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNTMxLDExICsxNTQ3LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsK
ICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOwpAQCAtMjE0OSw2ICsyMTcwLDQyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVn
LCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVn
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5
VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3Rv
cmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7CisgICAgCisgICAgYm9vbCBwdXRCeVZhbFdpbGxO
ZWVkRXh0cmFSZWdpc3RlcihBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICAvLyBGb3IgQXJyYXlTdG9yYWdlLCB3ZSBuZWVk
IGFuIGV4dHJhIHJlZyBmb3Igc3RvcmVzIHRvIGhvbGVzIGV4Y2VwdCBpZgorICAgICAgICAvLyB3
ZSdyZSBpbiBTbG93UHV0IG1vZGUuCisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xF
X01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
KyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBGb3IgQ29udGlndW91
cywgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIGFueSBhY2Nlc3MgdGhhdCBtYXkgc3RvcmUKKyAg
ICAgICAgLy8gdG8gdGhlIHRhaWwuCisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01P
REVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAg
ICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBBbGwgcG9seW1vcnBoaWMgbW9kZXMg
bmVlZCBhbiBleHRyYSByZWcuCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHUFJSZWcg
dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmLCBBcnJheTo6TW9kZSk7
CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0
ZW1wb3JhcnksIE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVn
aXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUuYXJyYXlNb2RlKCkpOworICAgIH0KKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2Rl
JiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcs
IEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVn
LCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcs
IEdQUlJlZyB0ZW1wUmVnKTsKKyAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5v
ZGUmKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUmKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsK
IAogICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0gMDsKKyAgICBtX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleCA9IDA7CiAgICAgbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4ID0gMDsK
ICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKICAgICAKQEAgLTczOCw2ICs3MzksMjAgQEAg
SklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIG1fY29kZUJsb2Nr
LT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRp
b25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlB
Y2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9baV0uY29weVRvU3R1YkluZm8obV9jb2RlQmxvY2stPnN0cnVjdHVy
ZVN0dWJJbmZvKGkpLCBwYXRjaEJ1ZmZlcik7CisgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9m
QnlWYWxJbmZvcyhtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0
Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJhZFR5cGVKdW1w
KSk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uZG9uZVRhcmdldCk7CisgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLnNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uQ2FsbCByZXR1cm5BZGRyZXNzID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW2ldLnJldHVybkFkZHJlc3MpOworICAgICAgICAKKyAgICAgICAg
bV9jb2RlQmxvY2stPmJ5VmFsSW5mbyhpKSA9IEJ5VmFsSW5mbygKKyAgICAgICAgICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIGJhZFR5cGVK
dW1wLAorICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5hcnJheU1vZGUsCisg
ICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoYmFkVHlwZUp1bXAsIGRvbmVUYXJn
ZXQpLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHJldHVybkFkZHJlc3Ms
IHNsb3dQYXRoVGFyZ2V0KSk7CisgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNh
bGxMaW5rSW5mb3MobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlu
a0luZm9zKCk7ICsraSkgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9j
ay0+Y2FsbExpbmtJbmZvKGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjQsNiArMjY0LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNv
cHlUb1N0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvLCBMaW5rQnVmZmVyICZwYXRjaEJ1
ZmZlcik7CiAgICAgfTsKIAorICAgIHN0cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5mbyB7CisgICAg
ICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKCkgeyB9CisgICAgICAgIAorICAgICAgICBCeVZhbENv
bXBpbGF0aW9uSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCisgICAg
ICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgICAgICAsIGRvbmVUYXJnZXQo
ZG9uZVRhcmdldCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBiYWRUeXBlSnVtcDsKKyAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBzbG93UGF0aFRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgcmV0
dXJuQWRkcmVzczsKKyAgICB9OworCiAgICAgc3RydWN0IFN0cnVjdHVyZVN0dWJDb21waWxhdGlv
bkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdp
bjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVyOwpAQCAtMzQ4LDYg
KzM2NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zm
c2V0ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1
cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9j
ayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyB2b2lkIGNvbXBpbGVQdXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAg
ICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRl
Y29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKICAgICAgICAgewpAQCAt
Mzk3LDYgKzQzMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyosIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCosIGludCwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3Qg
Y291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJl
Q2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIsIENhbGxG
cmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3Ry
dWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBj
YWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciwgYm9vbCBkaXJl
Y3QpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFs
SW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJh
eU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcHJp
dmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiwgVHJhbXBvbGlu
ZVN0cnVjdHVyZSopOwogICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwo
SlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKQEAgLTQ1Miw2ICs0ODgs
MjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNo
LCBBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9y
Qnl0ZWNvZGVJbmRleChSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKKyAgICAg
ICAgCisgICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKik7
CisgICAgICAgIAorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBpbiBy
ZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZXhpbmcgdHlwZS4KKyAgICAgICAgLy8gUHJvcGVydHkg
aXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLgor
ICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4gUmV0dXJucyB0aGUgc2xv
dyBjYXNlcy4gRmFsbC10aHJvdWdoCisgICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0IGlu
IHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KKyAgICAgICAgSnVtcExpc3QgZW1p
dENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
OworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5
IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0
eXBlLgorICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFBy
b3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAorICAgICAgICAvLyB6ZXJvLWV4dGVuZGVkLiBCYXNl
IGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuCisgICAgICAg
IC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1
b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAg
ICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSk7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlC
ZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKQEAgLTg3MCw2ICs5MjIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAgIFZlY3Rv
cjxMYWJlbD4gbV9sYWJlbHM7CiAgICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlv
bkluZm8+IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3RvcjxC
eVZhbENvbXBpbGF0aW9uSW5mbz4gbV9ieVZhbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVj
dG9yPFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8+IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21w
aWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvPiBt
X21ldGhvZENhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1f
am1wVGFibGU7CkBAIC04NzksNiArOTMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgdW5zaWduZWQgbV9wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fYnlWYWxJbnN0
cnVjdGlvbkluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXg7
CiAgICAgICAgIHVuc2lnbmVkIG1fY2FsbExpbmtJbmZvSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjk2OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTU5LDEwICs1NTksMjUgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQ
cm9maWxpbmdTaXRlRgogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVTdG9yZVRv
SG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewotICAgIGlmICgh
Y2FuQmVPcHRpbWl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAorI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikgICAgCiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5UHJvZmlsZSogcHJvZmlsZSwgSW5kZXhpbmdUeXBl
IGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIHJldHVybiAh
IShwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSAmIChhc0FycmF5TW9kZXMoTm9uQXJyYXkg
fCBjYXBhYmlsaXR5KSB8IGFzQXJyYXlNb2RlcyhBcnJheUNsYXNzIHwgY2FwYWJpbGl0eSkpKTsK
KyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBKSVRBcnJheU1v
ZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQoreworICAgIGlm
IChhcnJheVByb2ZpbGVTYXcocHJvZmlsZSwgSGFzQXJyYXlTdG9yYWdlKSkKKyAgICAgICAgcmV0
dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDYgKzk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAg
IHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5z
aWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWdu
ZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpA
QCAtMTExLDE3ICsxMTIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVj
dGlvbgogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKIAotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAotICAgIGxvYWRQdHIoQmFzZUlu
ZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QwKSk7CisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJv
ZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGFkZFNs
b3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAg
TGFiZWwgZG9uZSA9IGxhYmVsKCk7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJh
ZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1
b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxv
YWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7Cisg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
KworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAKKyAgICByZXR1cm4g
c2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtMTQzLDE3ICsxODQsMTAwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKEluc3RydWMKICAgICBub3RTdHJpbmcubGluayh0aGlzKTsKICAgICBub25DZWxsLmxp
bmsodGhpcyk7CiAgICAgCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3Ro
IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgIHN3aXRj
aCAoY2hvb3NlQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSkp
IHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gdmVjdG9yIGxlbmd0aCBjaGVjaworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNo
ZWNrCisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAK
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSwgcmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHByb3BlcnR5LCByZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIENhbGwg
Y2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRk
cmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIAogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKIH0KIAordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8t
PmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNh
c2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFn
ZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRo
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJl
c3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbElu
Zm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9u
ZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlf
dmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgIG1f
Y29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxf
Z2VuZXJpYykpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250
aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJy
YXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVy
LmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1Bh
dGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAg
CisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisg
ICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ss
IHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKSk7
Cit9CisKIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklEIHNjcmF0Y2gs
IEZpbmFsT2JqZWN0TW9kZSBmaW5hbE9iamVjdE1vZGUpCiB7CiAgICAgQVNTRVJUKHNpemVvZihK
U1ZhbHVlKSA9PSA4KTsKQEAgLTIyNiw3ICszNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uCiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTIzNCwxMCArMzU4LDczIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihy
ZWdUMSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcmVnVDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisg
ICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAK
KyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlw
ZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENv
bXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CisK
KyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Cit9CisKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQg
dmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAK
KyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoSGFzQ29udGlndW91cykpOworICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdU
MywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZSwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAKKyAg
ICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAK
KyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7CisgICAgc3RvcmUzMihy
ZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExp
c3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAg
SnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwg
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwog
CkBAIC0yNDcsOCArNDM0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24KICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMp
OwotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBB
ZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0lu
VmVjdG9yKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHBy
b2ZpbGUpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSksIHJlZ1QzKTsKKyAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMywgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpKTsKKyAg
ICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwg
QWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKQEAg
LTI1Nyw4ICs0NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9u
CiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBlbmQubGluayh0
aGlzKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMs
IFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
KyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjcwLDEzICs0NjAsMjEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVy
LCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBi
YXNlIG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW4gdmVjdG9y
IGNoZWNrCisgICAgLy8gVGhlc2UgbmV4dCB0d28gY2hlY2tzIGhhdmUgZGlmZmVyZW50IG1lYW5p
bmdzIGFjY29yZGluZyB0byBhcnJheSBtb2RlLgorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgp
OwogCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlzLCBjdGlfb3BfcHV0X2J5
X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAgc3R1
YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIpOwogICAgIHN0dWJQdXRC
eVZhbENhbGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1QyKTsKLSAgICBzdHViUHV0QnlWYWxDYWxs
LmNhbGwoKTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKworICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRo
VGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0
aW9uSW5kZXgrKzsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2luZGV4KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MTQsNiArMjQxNCwzMCBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkg
JiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9
IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJp
bmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1
aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5n
KGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAg
ICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcp
KTsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxs
RnJhbWUsIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxG
cmFtZSwgaSk7CisgICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAgICAgICBy
ZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJz
Y3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVy
dHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZy
YW1lKSk7CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Cit9
CisKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsKQog
ewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTI0MjMsMzUgKzI0
NDcsMzcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1Zh
bHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgCi0gICAg
aWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7
Ci0gICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdl
dE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZy
YW1lKSkpIHsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2Jq
ZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9w
dGltaXplLgorICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0
ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNl
dCk7CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+YnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRl
eGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAg
ICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlN
b2RlKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5
VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJOX0FERFJFU1Mp
OworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50
MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAg
ICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJp
bmcpKTsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+
Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAg
fQotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsK
LSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxO
YW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Ci0gICAgfQorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0
LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJn
c1sxXS5qc1ZhbHVlKCk7CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxs
RnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogICAgIApAQCAtMjUwMiwyMyArMjUyOCwxNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQorc3RhdGljIHZv
aWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1Zh
bHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKTsKLSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1Zh
bHVlKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7
Ci0KICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50
MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CiAgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCi0g
ICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGNhbGxGcmFtZSwg
aSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAg
ICAgfSBlbHNlCkBAIC0yNTI4LDExICsyNTQ1LDU0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGpzQ2Fz
dDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpLCB2YWx1
ZSwgc2xvdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
LSAgICAgICAgaWYgKCFzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBEb24n
dCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KKyAgICAg
ICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSk7CiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZh
bHVlLCBzbG90KTsKICAgICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKKworICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAg
ICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAg
QVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5ieVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAg
ICAgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAgICBp
ZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAg
ICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGlu
ZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJh
eU1vZGUpCisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JF
VFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1
dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKKworICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUo
c3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNW
YWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsK
KyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1
ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNiArMzcw
LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dl
dF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5l
cmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1Zh
bHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW4o
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRfU1RV
QiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRleChTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9v
cF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9T
VFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9u
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBfbGxp
bnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3Qz
XSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5
LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5v
cEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXogdDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJy
YXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xv
dwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZHAgNjRbUEIsIFBDLCA4XSwg
dDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAtMTE0NywxNCAr
MTE0NywyNCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCAzMltQQiwgUEMsIDhd
LCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQxKQogICAgIGxvYWRpcyAyNFtQQiwgUEMs
IDhdLCB0MwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQog
ICAgIHN4aTJwIHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQz
CisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCisK
KyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjpt
X3B1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpcyA4W1BCLCBQQywg
OF0sIHQwCisgICAgbG9hZHAgW3QzLCB0MSwgOF0sIHQyCisgICAgam1wIC5vcEdldEJ5VmFsRG9u
ZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9y
YWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEg
dDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5n
dGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAogICAg
IGxvYWRwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6IHQy
LCAub3BHZXRCeVZhbFNsb3cKKworLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcCB0MiwgW2Nm
ciwgdDAsIDhdCiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4XSwgdDAKICAgICB2YWx1ZVByb2ZpbGUo
dDIsIHQwKQpAQCAtMTIyNiwyOSArMTIzNiw1NSBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAg
ICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAgICBsb2FkcCAzMltQQiwgUEMs
IDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQwKQotICAgIGJ0aXogdDIsIEhhc0Fy
cmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9hZGlzIDE2W1BCLCBQQywgOF0sIHQw
Ci0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MiwgLm9wUHV0QnlWYWxTbG93
KQotICAgIHN4aTJwIHQyLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwg
dDMsIC5vcFB1dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0MywgdDMKICAgICBsb2FkcCBKU09iamVj
dDo6bV9idXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVh
ZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93
Ci0gICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0sIC5vcFB1dEJ5VmFs
RW1wdHkKLS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9hZGlzIDI0W1BCLCBQQywgOF0s
IHQzCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MywgdDEpCisgICAgYnRpeiB0MiwgSGFz
Q29udGlndW91cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisgICAgCisgICAgYmlhZXEgdDMs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kcworLm9wUHV0QnlWYWxDb250aWd1
b3VzU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCisgICAgd3JpdGVCYXJyaWVyKHQxKQorICAgIHN0b3Jl
cCB0MSwgW3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQorCisub3BQdXRCeVZhbENvbnRpZ3Vv
dXNPdXRPZkJvdW5kczoKKyAgICBiaWEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBiaWFl
cSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BST0ZJTEVSCisgICAgICAg
IGxvYWRwIDMyW1BCLCBQQywgOF0sIHQyCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6
Om1fbWF5U3RvcmVUb0hvbGVbdDJdCisgICAgZW5kCisgICAgYWRkaSAxLCB0MywgdDIKKyAgICBz
dG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJs
aWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0CisK
Ky5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2Us
IC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAg
YnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0sIC5vcFB1dEJ5VmFsQXJyYXlT
dG9yYWdlRW1wdHkKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9h
ZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEp
CiAgICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3Zl
Y3Rvclt0MCwgdDIsIDhdCisgICAgc3RvcmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3Qw
LCB0MywgOF0KICAgICBkaXNwYXRjaCg1KQogCi0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0QnlW
YWxBcnJheVN0b3JhZ2VFbXB0eToKICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBzdG9y
ZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QzXQorICAgICAgICBsb2FkcCAz
MltQQiwgUEMsIDhdLCB0MQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0
b3JlVG9Ib2xlW3QxXQogICAgIGVuZAotICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZh
bHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQK
KyAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdLCB0MQorICAg
IGFkZGkgMSwgdDEKKyAgICBiaWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgc3RvcmVp
IHQxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCisgICAgYmliIHQyLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQx
CiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAg
am1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93
OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAgZW5k
CiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0IElz
QXJyYXkgPSAxCitjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9yYWdl
ID0gOAotY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlID0gMTYKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTI5
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNl
KSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOwogICAgIH0KICAgICAKKyAg
ICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5vdCBqdXN0IGJlY2F1c2UgaXQncyBoYW5keSwgYnV0
IHRvIHJlbWluZCB5b3UgdGhhdAorICAgIC8vIHRoZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJmbGll
cyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICBzdGF0aWMgQnV0dGVyZmx5
KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxCdXR0ZXJmbHkqPihwdHIpOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBwb2ludGVy
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7IH0KKyAgICAKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIo
KSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhp
bmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CkBA
IC03MCw5ICs3OSwyMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4
aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0K
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBw
cm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0
eVN0b3JhZ2UoKTsgfQorICAgIAorICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJu
IGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgpOyB9CisgICAgdWludDMyX3QgdmVjdG9y
TGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0KKyAg
ICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigp
LT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodWlu
dDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVlKTsg
fQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXlsb2Fk
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0b3Jh
Z2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+
KCk7IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVybiBp
bmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+ID4oKTsgfQorICAgIAorICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGZyb21Db250aWd1b3VzKFdyaXRlQmFycmllcjxVbmtub3duPiogY29u
dGlndW91cykKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZs
eSo+KGNvbnRpZ3VvdXMpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KICAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0
b3JhZ2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNp
emVBcnJheQogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRl
eGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0Fy
cmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKG51bWJl
ck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRl
IHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCkBAIC0xNjMsNyArMTYz
LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bnVtYmVyT2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGlu
IHVuc2hpZnQoKSwgYWJvdmUuCiAgICAgbWVtbW92ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQy
LDE3IEBAIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXQKIAogaW5saW5l
IHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAg
ICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBy
ZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFBy
b3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICByZXR1cm4gMDsK
LSAgICAKLSAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdU
eXBlOwogCiAvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVz
Lgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAx
Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNDb250aWd1b3VzICAgICAgICAgICAgPSAy
Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4
Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlICAgPSAx
NjsKIApAQCAtNDIsOSArNDMsMTEgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZl
SW5kZXhlZAogCiAvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgID0g
SGFzQ29udGlndW91czsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlICAgICAgICA9IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSA9IEhhc1Nsb3dQdXRBcnJheVN0
b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5Q2xhc3MgICAgICAgICAgICAg
ICAgICAgICAgPSBJc0FycmF5OyAvLyBJJ2Qgd2FudCB0byBjYWxsIHRoaXMgIkFycmF5IiBidXQg
dGhpcyB3b3VsZCBsZWFkIHRvIGRpc2FzdHJvdXMgbmFtZXNwYWNlIHBvbGx1dGlvbi4KK3N0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoQ29udGlndW91cyAgICAgICAgICAgICA9IElz
QXJyYXkgfCBIYXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2UgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKIHN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSAgICA9
IElzQXJyYXkgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogCkBAIC01Miw2ICs1NSwxMCBAQCBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQCiAgICAgTm9uQXJyYXk6ICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheUNsYXNzCiAKKyNkZWZpbmUgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVMgXAorICAgIE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6ICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzCisKICNkZWZpbmUgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTIFwKICAgICBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UKQEAgLTc2LDYgKzgzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlcihJbmQKICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXModHlwZSk7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNDb250aWd1b3VzKEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUpCit7CisgICAgcmV0dXJuICEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9
CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkKIHsKICAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFn
ZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDYgKzQw
MiwxNiBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgY2FzZSBB
cnJheUNsYXNzOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3Ro
LS0pCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAg
IG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAKQEAgLTQ1OCw2ICs0NjgsMjUgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJy
YXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVu
Z3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZ
X0lOREVYKSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4
ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
Q29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZTogewogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAg
ICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3Ro
LCB2YWx1ZSwgdHJ1ZSkpIHsKQEAgLTYwMCw2ICs2MjksMTkgQEAgdm9pZCBKU0FycmF5Ojpzb3J0
TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAg
aWYgKCFtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBh
cmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcXNvcnQobV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNG
b3JRU29ydCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
QEAgLTYyOSw2ICs2NzEsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVx
dWFsIHByaW1pdGl2ZSB2YWx1ZXMuCiAgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBz
aXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29y
dCk7CiAgICAgICAgIAorICAgICAgICBhdHRlbXB0VG9Db252ZXJ0Q29udGlndW91c0FycmF5U3Rv
cmFnZVRvQ29udGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCksIHN0b3JhZ2UpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTYzNyw4NiArNjgwLDExMiBAQCB2b2lkIEpTQXJy
YXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogfQogCi12b2lkIEpTQXJyYXk6
OnNvcnQoRXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZT4KK3ZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIFdy
aXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKQogewot
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7Ci0gICAgCi0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAg
aWYgKCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIENvbnZlcnRp
bmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBk
byBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgLy8gVGhpcyBp
cyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21w
YXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKKyAgICAvLyBidWZm
ZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVj
dHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgIC8vIHJhbmRv
bSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBh
cmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgogICAgICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAg
IGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewotICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2
YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZy
b250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRl
cmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhv
dWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVz
aWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZl
IGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgICAgIC8vIHJhbmRvbSBv
ciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUg
ZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlU3Ry
aW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIGlm
ICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0
cmluZ1BhaXI+IHZhbHVlcyhyZWxldmFudExlbmd0aCk7CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4o
KSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNv
cnRWZWN0b3IoJnZhbHVlcyk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVj
dG9yKCZ2YWx1ZXMpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVW
YWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5k
ZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAg
ICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMg
JiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICAgICAgfQorICAgIGJvb2wgaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgpOwor
ICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNbaV0u
Zmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgfQogICAgICAg
ICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2Fs
bCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAgICAgIC8vIGEg
dG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1
ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9u
LgogICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1
ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKQorICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0g
dmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBIZWFwOjpoZWFwKHRo
aXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmlu
ZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBU
aGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAg
ICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0
aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhl
cgorICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQp
Ci0gICAgICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgICAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3Ry
aW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0jZWxzZQotICAgICAgICAv
LyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBh
IHN0YWJsZSBzb3J0LgotICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5
IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJs
ZSBzb3J0LgorICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCiAgICAgICAgIHFzb3J0
KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBlbHNlCisgICAgICAgIG1lcmdlc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBUaGUg
cXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQu
CisgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBi
dXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJZiB0
aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2
ZWN0b3Igc3RvcmFnZSwKKyAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUg
b3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSkgeworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgZW5zdXJlQ29udGln
dW91c0xlbmd0aChnbG9iYWxEYXRhLCByZWxldmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwog
ICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhl
IGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCi0gICAgICAgIC8vIGluY3Jl
YXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFs
dWVzLgotICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpIHsKLSAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCkgPCByZWxldmFudExlbmd0aCkgeworICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFudExlbmd0aCk7CisgICAgICAgICAgICBiZWdpbiA9
IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RvcmFn
ZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBz
dG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAg
aWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKQorICAgICAgICAg
ICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChyZWxldmFudExlbmd0aCk7CisgICAgICAgIGJy
ZWFrOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2
YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJlZ2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6
CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBv
cFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czog
eworICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAg
ICAgICAgICAgZXhlYywgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhD
b250aWd1b3VzPigKKyAgICAgICAgICAgIGV4ZWMsIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpOworCisgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1
b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFnZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODEwLDYgKzg3OSw3OCBAQCB2
b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgY2FzZSBBcnJheUNs
YXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2Vk
IGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAg
ICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2Fs
bGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJh
eSBpcyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkg
PD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
KTsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVZMVHJlZTxBVkxU
cmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVu
b3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBl
eGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBh
cmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUg
PSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEg
PSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3JvdyhtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENh
bGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNv
bXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXks
IHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdo
dCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2ln
bmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIg
dGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9u
ZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAg
Zm9yICg7IG51bURlZmluZWQgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsrbnVtRGVm
aW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURl
ZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICB0cmVlLmluc2VydChu
dW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1EZWZpbmVkICsgbnVtVW5k
ZWZpbmVkID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPT0gbnVtRGVmaW5lZCk7
CisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFn
ZS4KKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+
OjpJdGVyYXRvciBpdGVyOworICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7Cisg
ICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQgJiYgaSA8IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFB1dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7ICsraSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0VW5k
ZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtOTI5LDYg
KzEwNzAsMTIgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNs
YXNzOgogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBhcmdzLmFwcGVuZChtX2J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBA
IC05NjAsNiArMTEwNywxMiBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3Rh
dGUqCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAg
IGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBjYWxs
RnJhbWUtPnNldEFyZ3VtZW50KGksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHVuc2lnbmVkIGkg
PSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7
CiAgICAgICAgICAgICByZXR1cm4gIW1hcCB8fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGU+CisgICAgICAgIHZvaWQgc29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqLCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0aCk7CiAKICAg
ICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsK
IApAQCAtMTA2LDYgKzEwOSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQg
Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7CiAgICAgfTsKIAorICAgIGlubGluZSBC
dXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIEluZGV4aW5nSGVhZGVy
IGhlYWRlcjsKKyAgICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aChzdGQ6Om1heChsZW5ndGgs
IEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBoZWFkZXIuc2V0UHVibGljTGVuZ3RoKGxlbmd0
aCk7CisgICAgICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAgIGdsb2Jh
bERhdGEsIDAsIDAsIHRydWUsIGhlYWRlciwgaGVhZGVyLnZlY3Rvckxlbmd0aCgpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSk7CisgICAgfQorCiAgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRl
QXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQogICAgIHsKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6
OmNyZWF0ZSgKQEAgLTEyMSw3ICsxMzMsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxp
bmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEs
IGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseTsKKyAgICAgICAg
aWYgKExJS0VMWShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENvbnRpZ3Vv
dXMpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQoIWlu
aXRpYWxMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQorICAg
ICAgICAgICAgICAgICAgIHx8IChpbml0aWFsTGVuZ3RoICYmIHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0ZXJmbHkg
PSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAg
ICAgfQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMTUzLDI2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCogdGVtcDsK
LSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5n
dGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAgICAgKmJ1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlh
bExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMg
PSAwOwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAgICAgICAg
ICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAs
IDApOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0
ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAg
ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGlu
aXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+
bV9pbmRleEJpYXMgPSAwOworICAgICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVu
Z3RoOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMSw3ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHBy
b3RvCiAgICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwog
CiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpT
QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQ
cm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1fYXJyYXlTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJy
YXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0
aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKIApA
QCAtNDA3LDYgKzQwOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZShKU0ds
b2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxvY2F0aW9ucyB0aGF0IGxv
YWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8gdGhpcyBvYmplY3Qgbm93
IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAgbV9hcnJheVN0cnVjdHVy
ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkp
OworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CiAgICAgCiAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQgc3RvcmFnZSBzd2l0Y2gg
dG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFnZS4KQEAgLTQ4Miw2ICs0
ODQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVNjb3BlU3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1bWVudHNTdHJ1Y3R1cmUpOwogICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCk7
CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYm9vbGVhbk9iamVjdFN0cnVjdHVy
ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGJhY2tDb25zdHJ1Y3Rv
clN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9u
YW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJn
dW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5
U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0
IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KKyAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IC8vIFRo
aXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBk
ZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CkBAIC0yNjEsNyArMjYyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogbmFtZVNjb3BlU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAg
U3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJy
YXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdldCgpOyB9CiAgICAgICAgIHZvaWQqIGFkZHJl
c3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmU7IH0KKyAgICAg
ICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgeyByZXR1
cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyB9CiAgICAgICAgIFN0cnVjdHVy
ZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9vbGVhbk9iamVj
dFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrQ29uc3RydWN0
b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCArMTMxLDM5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFy
Z2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOwor
ICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0
ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgY3VycmVudFNv
dXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGNvdW50ID0g
bmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJl
bnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBj
b3VudC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRT
b3VyY2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAg
ICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCk7IC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuIFdoeSBpc24n
dCB0aGlzIHB1YmxpY0xlbmd0aCgpPwogICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsK
KyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50
VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7
CkBAIC0xNTgsNiArMTczLDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcgogICAgICAgICAKICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUu
CiAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwKQpAQCAtMjM0LDYgKzI1MiwxNCBAQCBib29sIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVj
dC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgfQorICAgICAgICAKICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCkBAIC0zNTEsNiArMzc3LDIyIEBA
IHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgQVNTRVJUKGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkgPD0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwcm9wZXJ0eU5hbWUgKyAxKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlO
YW1lIDwgYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKSkgeworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVydHlOYW1lXS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewog
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CkBAIC0zNjEsMTUgKzQwMywxOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgICAgIAorICAgICAgICBKU1ZhbHVl
IG9sZCA9IHZhbHVlU2xvdC5nZXQoKTsKKyAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFVwZGF0
ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KICAgICAgICAgaWYg
KHByb3BlcnR5TmFtZSA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnR5
TmFtZSArIDE7CiAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlm
ICghdmFsdWVTbG90KQorICAgICAgICB9IGVsc2UgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlU2xv
dC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5hdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGV4
ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFnZSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCkBAIC00NDMsNiArNDg4LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmVudGVyRGljdGlvbmFyeUkKIHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50LCBh
cyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNvbnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQorICAg
ICAgICAvLyB0aGlzIGNhc2UgaWYgd2UgZXZlciBjYXJlZC4KKyAgICAgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFr
OwpAQCAtNDY1LDYgKzUxNSwyMyBAQCB2b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5k
ZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZShnbG9iYWxEYXRhKTsKIH0K
IAorV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3Vv
dXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgSW5k
ZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNT
RVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOworICAg
IEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgIEFTU0VS
VCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2Us
IDAsCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgpOworICAg
IG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5
LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRh
LCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+
Y29udGlndW91cygpOworfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKTsKQEAgLTQ4MCw3ICs1NDcsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwog
ICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4
QmlhcyA9IDA7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1
Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAg
ICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00OTAsMTYgKzU1NywxMjAgQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVk
ZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXpl
ID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xv
YmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KG5lZWRlZExlbmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAgICAgICAgbmV3QnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBwcm9wZXJ0eVNpemUg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0
b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNl
dFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPnNldExlbmd0aChw
dWJsaWNMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAg
bmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBwdWJsaWNMZW5ndGg7CisgICAgbWVtY3B5KAorICAgICAgICBuZXdTdG9yYWdl
LT5tX3ZlY3RvciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgcHVibGljTGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZs
eSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3U3RvcmFnZTsKK30KKworQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAg
IHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9u
KCkpOworfQorCit2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRv
Q29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0b3JhZ2UsIHN0b3JhZ2UgPT0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKKyAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVCghc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9CisgICAgICAgIEJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIobV9idXR0ZXJmbHktPnBvaW50ZXIo
KSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGlj
TGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpOworICAgIAorICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKHB1YmxpY0xl
bmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgCisgICAgLy8gU2hpZnQgdGhlIG5hbWVkIHByb3BlcnRpZXMgb3ZlciwgaWYgdGhl
cmUgYXJlIHNvbWUuCisgICAgc2l6ZV90IHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVTaXplKCk7CisgICAgaWYgKHByb3BlcnR5U2l6ZSkgeworICAgICAgICBtZW1tb3ZlKAor
ICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6
ZSwKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
U2l6ZSwKKyAgICAgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hUb0Nv
bnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5l
d1N0cnVjdHVyZSk7Cit9CisKK1dyaXRlQmFycmllcjxVbmtub3duPiogSlNPYmplY3Q6OmVuc3Vy
ZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgp
IHx8IHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0
YSwgMCk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewog
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3Vs
ZEJlU3BhcnNlKCkpOworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJ
bmRleGluZygpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSkKICAg
ICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFs
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAg
ICBDUkFTSCgpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0OjplbnN1cmVJbmRleGVkU3RvcmFn
ZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmco
KSkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxE
YXRhKS0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJl
U3BhcnNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKS0+YnV0dGVyZmx5KCk7Cisg
ICAgICAgIHJldHVybiBCdXR0ZXJmbHk6OmZyb21Db250aWd1b3VzKGNyZWF0ZUluaXRpYWxDb250
aWd1b3VzKGdsb2JhbERhdGEsIDApKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KQEAgLTUw
Nyw2ICs2NzgsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQog
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1h
ZGUgd2F5IG1vcmUgZWZmaWNpZW50LCBpZiB3ZSBjYXJlZC4KKyAgICAgICAgcmV0dXJuIGVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2Jh
bERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAg
ICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAg
ICAgCkBAIC01MjYsNiArNzAxLDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFy
cmF5U3RvcmEKIHZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2Nh
dGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogewogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hU
b1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwpAQCAtNTY5LDggKzc0OSw3IEBAIHZvaWQgSlNPYmplY3Q6
OnNldFByb3RvdHlwZShKU0dsb2JhbERhdGEKICAgICBpZiAoc2hvdWxkVXNlU2xvd1B1dChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwg
bmV3U3RydWN0dXJlLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAgIHNldFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgIHN3aXRjaFRvU2xvd1B1dEFycmF5
U3RvcmFnZShnbG9iYWxEYXRhKTsKIH0KIAogYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0
aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkK
QEAgLTcwNCw2ICs4ODMsMTIgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQwogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgLy8gVGhlcmUgaXMgYW4gZXh0cmVtZWx5IG9idmlvdXMgY2FzZSB0aGF0IHdlIGNv
dWxkIGhhbmRsZSBoZXJlIChkZWxldGluZyB0aGUgbGFzdCBlbGVtZW50KQorICAgICAgICAvLyBi
dXQgSSBkb24ndCBmZWVsIGxpa2Ugd3JpdGluZyB0ZXN0cyBmb3IgaXQsIHNvIEknbGwgcHVudCBp
dC4KKyAgICAgICAgdGhpc09iamVjdC0+Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAgICAgIAog
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAKQEAgLTg3Nyw2ICsxMDYyLDEyIEBAIHZvaWQgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9iamVjdC0+bV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTEzMzgsNiArMTUyOSw1NyBAQCB2b2lkIEpTT2JqZWN0
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNw
YXJzZSgpKTsKKyAgICAKKyAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUsIHRoZSBpbmRleCBpcyBl
aXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBncmVhdGVyIHRoYW4KKyAg
ICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KKyAgICBBU1NFUlQoaSA+IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSB8fCBpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgaWYgKGkgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpICYmIGkgPCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9uZSBjYXNlIHdlIGNh
biBoYW5kbGUuIEFuZCB3ZSBoYW5kbGUgaXQgYnkgZ3Jvd2luZyB0aGUgY29udGlndW91cworICAg
ICAgICAvLyBzdG9yYWdlLgorICAgICAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBzdGQ6
Om1pbigKKyAgICAgICAgICAgIHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSksCisgICAgICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQo
CisgICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCisgICAgICAgICAgICBuZXdW
ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgbV9idXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICBtX2J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUpOworfQorCit2b2lkIEpTT2JqZWN0
OjpwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAg
IEFTU0VSVChpc0V4dGVuc2libGUoKSk7CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIGlmIChpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgJiYgaSA8IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIEFsbG9j
YXRlQXJyYXlTdG9yYWdlLAorICAgICAgICAgICAgZ2V0TmV3VmVjdG9yTGVuZ3RoKG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpLCBpICsgMSkp
OworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IrKzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2Jh
bERhdGEpOworICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIGZhbHNlKTsK
K30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7
CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAt
MTM1MSw2ICsxNTkzLDEwIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW4KICAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGlmICghaSAmJiAhc3RydWN0dXJlKCktPm5lZWRz
U2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3Vz
KGdsb2JhbERhdGEsIDEpWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewogICAgICAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwg
dmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzYyLDYgKzE2MDgsMTEgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhl
eGVjLCBpLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICAvLyBObyBvd24gcHJvcGVydHkgcHJlc2VudCBp
biB0aGUgdmVjdG9yLCBidXQgdGhlcmUgbWlnaHQgYmUgaW4gdGhlIHNwYXJzZSBtYXAhCkBAIC0x
Mzg0LDggKzE2MzUsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSog
c3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhhc0FycmF5
U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoYXJyYXlT
dG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsK
IApAQCAtMTQ2OSw2ICsxNzIyLDEwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG8KICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAgICAgICBp
ZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCiAgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAo
IWkpIHsKKyAgICAgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDEp
WzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkg
fHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAs
IDApKTsKICAgICAgICAgCkBAIC0xNDc3LDYgKzE3MzQsMTUgQEAgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAg
IGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywg
bW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMTQ5OSwxMiArMTc2NSw3IEBAIEFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICghY3VycmVudFZlY3Rv
ckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0
aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5
IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0
aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExl
bmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlz
IGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJl
ZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVlUGx1c09u
ZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoaW5jcmVh
c2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUyNCw5ICsxNzg1LDEwIEBAIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9yTGVuZ3Ro
ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0go
KTsKQEAgLTE1NzQsNiArMTgzNiwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxl
bmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNv
bnRpZ3VvdXNMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkg
eworICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAg
ICAgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCisgICAgICAgICAgICBsZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChs
ZW5ndGgpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
IDwgbGVuZ3RoKQorICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7
Cit9CisKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQogewogICAg
IEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CkBAIC0xNjAyLDYgKzE4ODAsMTMgQEAgYm9vbCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIGNhc2UgQUxMX0JMQU5LX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgaWYgKGkgPj0gb2JqZWN0
LT5tX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPm1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uZ2V0KCksIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjk2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDgsNiArMTQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC0xNjEsNiArMTYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0yMDcsNiArMjA5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAg
ICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAg
ICAgICAgICBkZWZhdWx0OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAg
ICAgICAgICBkZWZhdWx0OgpAQCAtMjY3LDYgKzI3Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
CisgICAgICAgICAgICAgICAgICAgICYmIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgICAgIHJldHVybiBpIDwg
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTI4NSw2ICsy
OTQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDw9
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKQorICAgICAgICAgICAgICAgICAgICAmJiBpIDwg
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMjk2LDE1ICszMDgsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8PSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID09IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3Vv
dXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzgsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKQEAgLTMzMSw2ICszNTgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOwpAQCAtNTI4LDYgKzU1NiwxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gZm9vLT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRC
eUluZGV4T25Ib2xlKC4uLik7CiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJ
bmRleE9uSG9sZUZvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAg
CisgICAgICAgIC8vIFJldHVybnMgMCBpZiBjb250aWd1b3VzIHN0b3JhZ2UgY2Fubm90IGJlIGNy
ZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQorICAgICAgICAvLyBpbmRleGluZyBzaG91bGQgYmUgc3Bh
cnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGVuc3Vy
ZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJy
YXkgc3RvcmFnZS4gVXNlCiAgICAgICAgIC8vIHRoaXMgaWYgeW91J3JlIGFib3V0IHRvIHBlcmZv
cm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhlCiAgICAgICAgIC8vIG9iamVj
dCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdlLCBpZiBpdCBkaWRuJ3QgaGF2
ZSBpdApAQCAtNTQwLDYgKzU3OCw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKExJS0VMWShoYXNJbmRl
eGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIEF0dGVtcHQgdG8gY29udmVydCB0byBjb250aWd1b3VzIGluZGV4aW5n
IHN0b3JhZ2UuIFJldHVybnMgdHJ1ZSBpZiBpdCB3YXMgZG9uZSwKKyAgICAgICAgLy8gb3IgZmFs
c2UgaWYgaXQgYmFpbGVkIG91dCBmb3IgYW55IHJlYXNvbi4gQWxzbyByZXR1cm5zIHRydWUgaWYg
dGhlIGFycmF5IHdhcyBhbHJlYWR5CisgICAgICAgIC8vIGNvbnRpZ3VvdXMuCisgICAgICAgIGJv
b2wgYXR0ZW1wdFRvQ29udmVydFRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1
b3VzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgIAog
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCkBAIC02MDIsMTEgKzY3
NSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjcmVhdGVJ
bml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAg
ICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAK
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBi
b29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAorICAgICAgICB2b2lk
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKICAgICAgICAgdm9p
ZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5
U3RvcmFnZSopOwogCiAgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKQEAgLTYxNyw3ICs2OTUsMzggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoSlNH
bG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1
dEJ5SW5kZXhPbkhvbGUoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50
IHNldEluZGV4UXVpY2tseSB0byBzdWNjZWVkIGFuZCB5b3UncmUgc3VyZSB0aGF0CisgICAgICAg
IC8vIHRoZSBhcnJheSBpcyBjb250aWd1b3VzLgorICAgICAgICB2b2lkIGVuc3VyZUNvbnRpZ3Vv
dXNMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKIAorICAgICAgICBib29s
IGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIXNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgIT0gc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9y
YWdlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgQVNTRVJUKCFzaG91bGRV
c2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgLy8g
T2gsIHlvdSBkaWQgdGhpcyBjb252ZXJzaW9uIGJlZm9yZT8gV2VsbCwgeW91IGRvbid0IGdldCB0
byBkbyBpdCBhZ2Fpbi4gQmVjYXVzZQorICAgICAgICAgICAgLy8gdGhyYXNoaW5nIGlzIG5ldmVy
IGdvb2QuCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoKSAmIEhhZEFycmF5U3RvcmFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAvLyBPaCwgeW91J3ZlIHVzZWQgc2hpZnQgYW5kIHVuc2hpZnQ/IENo
YW5jZXMgYXJlIHlvdSdsbCB1c2UgaXQgYWdhaW4sIGFuZCB3ZSdsbCBoYXZlCisgICAgICAgICAg
ICAvLyB0byBjb252ZXJ0IGJhY2suIE5vIGNvbnRpZ3VvdXMgYXJyYXlzIGZvciB5b3UhCisgICAg
ICAgICAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRp
Z3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKQEAgLTY0Miw2ICs3NTEsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhl
Y1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5
RGVzY3JpcHRvciYgb2xkKTsKICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZG91YmxlcyBhcyBw
dXREaXJlY3QoKSBiZWNhdXNlIChhKSBjb250aWd1b3VzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUg
bm90IGluZGV4ZWQgc2V0dGVycyBvciBpbmRleGVkIHJlYWRvbmxpZXMsIGFuZCAoYikgdGhpcyBp
cyBvbmx5IGZvciBjYXNlcyB3aGVyZSB3ZSBkb24ndCB3YW50IHRoZSBwcm9wZXJ0eSB0byBoYXZl
IGFueSBhdHRyaWJ1dGVzLgorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhXaXRob3V0QXR0cmlidXRl
c1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOworICAgICAgICAKICAgICAgICAgdm9pZCBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5k
ZXhNb2RlLCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9k
ZSk7CkBAIC02NTEsOCArNzYzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBlbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOworICAg
ICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmKTsK
ICAgICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydENvbnRpZ3Vv
dXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7
CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CiAgICAg
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDExICszMjMsMTcgQEAgYm9vbCBTdHJ1Y3R1
cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJvcGVydHlUcmFu
c2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jv
b2wgU3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKQorICAgICAgICB8
fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpOworfQorCitOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSk7
CiAgICAgCi0gICAgaWYgKGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNz
ZXMoKSB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpKQorICAgIGlmIChuZWVk
c1Nsb3dQdXRJbmRleGluZygpKQogICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlT
dG9yYWdlOwogICAgIAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjk2OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUyLDcgKzE1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAg
ICAgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29u
c3Q7CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5k
ZXhpbmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhp
bmcoKSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5
U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsg
fQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZp
c2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1
dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGll
cy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRo
ZSBrZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxs
b2NhdGVDb250aWd1b3VzLAorICAgIFN3aXRjaFRvQ29udGlndW91cywKICAgICBBbGxvY2F0ZUFy
cmF5U3RvcmFnZSwKICAgICBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UsCiAgICAgU3dpdGNo
VG9TbG93UHV0QXJyYXlTdG9yYWdlLApAQCAtNTcsMTIgKzU5LDE5IEBAIGlubGluZSB1bnNpZ25l
ZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHkKIGlubGluZSBJbmRleGluZ1R5cGUgbmV3SW5kZXhp
bmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNp
dGlvbikKIHsKICAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9jYXRlQ29u
dGlndW91czoKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIChIYXNBcnJheVN0b3JhZ2UgfCBI
YXNTbG93UHV0QXJyYXlTdG9yYWdlKSkpOworICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0Nv
bnRpZ3VvdXM7CisgICAgY2FzZSBTd2l0Y2hUb0NvbnRpZ3VvdXM6CisgICAgICAgIEFTU0VSVChv
bGRUeXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhh
c0FycmF5U3RvcmFnZSkgfCAoSGFzQ29udGlndW91cyB8IEhhZEFycmF5U3RvcmFnZSk7CiAgICAg
Y2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNB
cnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250aWd1b3VzKSB8
IEhhc0FycmF5U3RvcmFnZTsKICAgICBjYXNlIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToK
LSAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAg
ICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlOwogICAgIGNhc2UgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NF
UlQob2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgIEFTU0VSVCghKG9sZFR5cGUg
JiBIYXNDb250aWd1b3VzKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNBcnJheVN0
b3JhZ2UpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIEFkZEluZGV4ZWRBY2Nl
c3NvcnM6CiAgICAgICAgIHJldHVybiBvbGRUeXBlIHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvV1RGL3d0
Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTYgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaGFzVHdvTwogICAgIHJldHVybiAhaGFzWmVyb09y
T25lQml0c1NldCh2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIHRp
bWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKFQgdmFsdWUpCit7CisgICAgLy8gTWF0aGVtYXRp
Y2FsbHkgZXF1aXZhbGVudCB0bzoKKyAgICAvLyAgICh2YWx1ZSAqIDMgKyAxKSAvIDI7CisgICAg
Ly8gb3I6CisgICAgLy8gICAodW5zaWduZWQpY2VpbCh2YWx1ZSAqIDEuNSkpOworICAgIC8vIFRo
aXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgcmV0dXJuIHZh
bHVlICsgKHZhbHVlID4+IDEpICsgKHZhbHVlICYgMSk7Cit9CisKICNpZiAhQ09NUElMRVIoTVNW
QykgJiYgIUNPTVBJTEVSKFJWQ1QpICYmICFPUyhTT0xBUklTKQogdXNpbmcgc3RkOjppc2Zpbml0
ZTsKICNpZiAhQ09NUElMRVJfUVVJUksoR0NDMTFfR0xPQkFMX0lTSU5GX0lTTkFOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166374</attachid>
            <date>2012-09-29 17:56:29 -0700</date>
            <delta_ts>2012-09-29 23:14:27 -0700</delta_ts>
            <desc>sunspider runs</desc>
            <filename>contiguous_patch_10.diff</filename>
            <type>text/plain</type>
            <size>226848</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0wOS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSgpIGlnbm9yZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
ZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcHJldmVudGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDcgQEAKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENENEM0MTVGNkI2QkIw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8q
IExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjEz
RTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAv
KiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNjAxNUQx
NTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNjAxNUExNTYx
OThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9
OwogCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTYzLDYgKzE2NCw3IEBACiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0QzE0QzNDRDQzMDA3
QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYwMjAwMDQ3MkE5IC8qIERGR0J5dGVDb2Rl
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIg
LyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsg
fTsKIAkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3
RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdE
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9OwpAQCAtODQ1LDYgKzg0Nyw3IEBACiAJCTBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQzQ1
ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1v
blNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5
OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdD
IC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkzMyw2ICs5MzYsNyBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNh
bXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0
MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBh
dGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEwMiw3ICsyMTA2
LDYgQEAKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlw
ZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAotCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5
Q2FsbGJhY2suaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0
dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVy
LmggKi8sCkBAIC0yMTEwLDYgKzIxMTMsNyBAQAogCQkJCTkzM0EzNDlBMDM4QUU3QzYwMDg2MzVD
RSAvKiBJZGVudGlmaWVyLmggKi8sCiAJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVyLmggKi8sCiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAv
KiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKQEAgLTIyNjcsNiArMjI3MSw3IEBACiAJCQkJMTRC
RkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLAogCQkJCTE0MjBCRTdBMTBB
QTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAw
OTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0
NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1l
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0NzIsNTYgKzI0NzcsNTcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
aCAqLywKLQkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5j
cHAgKi8sCi0JCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIu
aCAqLywKLQkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKLQkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAotCQkJCTBGQjU0Njc2MTRGNTlB
RDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAogCQkJCTBGMjFDMjdF
MTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8sCi0JCQkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCi0JCQkJMEYyQkRD
MkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5
RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKKwkJCQkwRjgwMjNFOTE2MTM4
MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCisJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1
QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCisJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlk
U3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTcxNENBN0RDMTAwODVGM0M2IC8qIE1ldGhvZENhbGxM
aW5rU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5ODE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9k
Q2FsbExpbmtTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuaCAqLywKLQkJCQkwRkY0Mjc2RTE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUds
b2JhbFN0YXR1cy5jcHAgKi8sCi0JCQkJMEZGNDI3NkYxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29s
dmVHbG9iYWxTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggKi8sCiAJCQkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi8sCi0JCQkJMEYwQjgzQjYxNEJDRjhERjAwODg1
QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCi0JCQkJMEYwQjgzQjIxNEJDRjg1RTAwODg1
QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5jcHAgKi8sCi0JCQkJMEYwQjgzQjMxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovLAotCQkJCTBGMEI4M0FFMTRCQ0Y3MTQw
MDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAotCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywKLQkJCQlGRUI2M0FBMjE1OUI5REEzMDA4OTMyQTYg
LyogQ29tbWVudC5oICovLAotCQkJCTBGMEI4M0FDMTRCQ0Y2MDIwMDg4NUI0RiAvKiBMaW5lSW5m
by5oICovLAotCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJ
bmZvLmggKi8sCi0JCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmgg
Ki8sCi0JCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCiAJCQkJ
OTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi8sCiAJCQkJOTY5QTA3
OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGQkQ3RTY3MTQ0Nzk5
OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8sCisJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1
QjRGIC8qIENvZGVUeXBlLmggKi8sCisJCQkJRkVCNjNBQTIxNTlCOURBMzAwODkzMkE2IC8qIENv
bW1lbnQuaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovLAogCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAg
Ki8sCiAJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8s
CiAJCQkJOTY5QTA3OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKKwkJ
CQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCisJ
CQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKKwkJ
CQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLAor
CQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJ
CQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovLAorCQkJCTBG
MEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oICovLAorCQkJCTBG
MEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAogCQkJCTk2OUEwNzkz
MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCUJDRkQ4QzkwMEVFQjJF
RTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovLAogCQkJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuaCAqLywKKwkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAorCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAorCQkJCTBGMEI4M0FDMTRCQ0Y2
MDIwMDg4NUI0RiAvKiBMaW5lSW5mby5oICovLAorCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1
NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAorCQkJCTBGMEI4M0IyMTRCQ0Y4NUUwMDg4NUI0
RiAvKiBNZXRob2RDYWxsTGlua0luZm8uY3BwICovLAorCQkJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4
NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAqLywKKwkJCQkwRjkzMzI5NzE0Q0E3REMxMDA4
NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk4MTRDQTdE
QzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICovLAorCQkJCTBGQjU0NjdDMTRG
NUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKKwkJ
CQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oICovLAogCQkJCTk2OUEwNzk0MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwICovLAog
CQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKLQkJCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovLAotCQkJCTBGRDgyRTRG
MTQxREFFQTEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oICovLAorCQkJCTBGMkJEQzJCMTUx
RkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAorCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKKwkJCQkwRjlGQzhDMDE0RTFC
NUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAorCQkJCTBGOTMzMjk5
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAorCQkJCTBGOUZDOEMxMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCisJCQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZG
IC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwICovLAorCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRD
QjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggKi8sCiAJCQkJMTQyOUQ4ODMwRUQyMUMzRDAw
Qjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgKi8sCiAJCQkJMTQyOUQ4ODQwRUQyMUMzRDAwQjg5
NjE5IC8qIFNhbXBsaW5nVG9vbC5oICovLAorCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAv
KiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8sCisJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8q
IFNwZWN1bGF0ZWRUeXBlLmggKi8sCisJCQkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0
cnVjdHVyZVNldC5oICovLAogCQkJCTBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRjc2NkQzNzE1QUU0QTFBMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oICovLAogCQkJCUJDQ0Yw
RDBCMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgKi8sCkBAIC0yOTQ5
LDYgKzI5NTUsNyBAQAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgwMjNFQTE2MTM4
MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zNTU0LDYgKzM1NjEsNyBA
QAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhp
bmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikKKyAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2p1bXBzLmFw
cGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1fanVtcHMuc2l6ZSgpKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAoKSk7
CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hU
ZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1bXAo
TGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisjZGVm
aW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5
cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsKKwor
aW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRB
cnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJy
YXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAgQnlW
YWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
CisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJhZFR5
cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAg
ICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkp1
bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5
IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGludDE2
X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0
aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworaW5saW5l
IHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZvKQorewor
ICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgpAQCAtMjA5LDYgKzIxMCwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBy
ZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFsSW5m
byYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRCeVZh
bEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNp
emUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAg
ICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNl
dE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1
YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1
YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9zLmdy
b3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0IHsg
cmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbElu
Zm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAgICAg
ICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZh
bEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTksMTcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01P
REVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMyw5IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkxNSw2ICs5MjMsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBQdXRCeVZhbDoK
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAg
ICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBz
d2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsKQEAgLTkyNCwxMSArOTMzLDE4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
ICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzODMsOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1P
UlBISUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlM
ZW5ndGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmlu
Z2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRy
YWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0
LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBB
cnJheTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAg
ICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5
U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1
dCBtb2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBk
b24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1
ZXNzaW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5
OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1h
eVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZl
ID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6
CkBAIC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxl
KiBwCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Up
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJy
YXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgor
ICAgICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7
CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAh
cHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVu
ZGVjaWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwy
MiBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9m
Qm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSAmIElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChB
YnN0cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAg
ICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CkBAIC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9k
ZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091
dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1Rv
VGFpbCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAg
ICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRv
SG9sZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJh
eTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAg
ICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAi
QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAi
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsK
ICAgICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRp
Z3VvdXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMs
CisgICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
LAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAor
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3Rv
cmFnZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwK
QEAgLTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwg
aW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBC
bGFua1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2Us
CisgICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9y
YWdlLiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3Rv
cmFnZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAt
ODksNiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3Jh
Z2UiIGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3Rpbmcg
Y2hlY2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJv
dW5kczogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhf
Q09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9D
T05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGln
dW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNf
VE9fVEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29u
dGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9V
VF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMKICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVm
aW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCisjZGVmaW5lIElO
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZp
bmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRv
SG9sZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JB
R0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwogCiAv
LyBOZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIEVGRkVD
VEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgIFwK
KyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAg
ICAgXAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUwotI2RlZmlu
ZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAorI2RlZmluZSBTTE9X
X1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICBcCiAgICAgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfRUZGRUNURlVMX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBI
SUNfRUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhlbHBlcnMgZm9yIHBvbHltb3JwaGlj
IGFycmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9QT0xZTU9SUEhJ
Q19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19F
RkZFQ1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9M
WU1PUlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSos
IEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNl
c0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZs
eShBcnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUg
YXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQog
ewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFS
UkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4
ICsyNDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAg
IH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
KQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RB
SUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1P
UlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNh
c2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgbW9kZUlz
UG9seW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wg
cG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRl
c0FycmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNF
RChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0
cnVlOworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtMjA0LDYgKzMwNiw3IEBAIGlubGlu
ZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OSw3ICszNTIsMTEg
QEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzoKICAgICBj
YXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKQEAgLTI3Myw3
ICszODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBCiBpbmxp
bmUgYm9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTcxLDYgKzE1NzEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRv
R3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0xNTk0LDYgKzE1OTYsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDkgKzM1OSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBw
cm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZh
bC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgot
ICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rp
bmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSAr
MTIxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAg
IGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0u
cHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFn
ZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4
KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVk
c1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwg
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9Ob2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5v
ZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEz
NywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNo
aWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIDMpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAg
ICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2Rl
IGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wg
KCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRl
eCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFn
ZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQobW9k
ZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihh
cnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAg
ICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUp
LCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlp
ZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAg
ICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2UgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0
ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2Ug
aXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCArNDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9y
YWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRn
ZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQogICAgIHsKICAgICAgICAgaWYgKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9
PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2Rl
IGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAgICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4
ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUgKzQzMywyNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRl
eCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
ICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9m
aWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgp
KTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5v
ZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGlu
ZGV4LmluZGV4KCkpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5jaGls
ZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFn
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQogICAgIH0KICAgICAKICAgICB2
b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2FzZSBB
cnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9E
RVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBj
YXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAg
ICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgp
ID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2LDcgQEAgdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49
IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0
c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5
SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
dHJ1ZSk7CisgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC01NzMsOSArNTcxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwg
ZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgot
ICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAg
ICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBhcnJheS0+cHV0
QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEzMDksNiArMTMwNSwx
NCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3Vy
ZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qp
CiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpA
QCAtMTMxNyw2ICsxMzIxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJl
QXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworCisgICAgaWYgKGluZGV4KQorICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3Vy
ZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91YmxlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4g
Zm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3Qp
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRp
b25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lk
Kiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50
MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0xMTAsNiArMTEwLDcgQEAgdHlw
ZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPUykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9O
ICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwog
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3Rh
dGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBAIC0xOTIsNyArMTkzLDkgQEAg
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3Qg
bmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShF
eGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KTsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0Kik7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwog
CiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBr
ZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBm
cm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMg
YWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNo
ZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7IAogICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJ
c0FycmF5KSkpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250aWd1
b3VzKSkpOwogICAgICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksMTAgKzIxMDksMTE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9CiB9CiAKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNH
ZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdl
UmVnLCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIAor
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVnKTsKKyAgICAK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBH
UFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQor
eworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgcmVzdWx0UmVnKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoaG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KE5vZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJl
ZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBh
cnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgaWYgKCFtYXlTdG9yZVRvVGFpbChhcnJheU1v
ZGUpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
aXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAg
ICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVt
cFJlZyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisK
KyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LnN0b3Jl
UHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAKKyAgICBpZiAoaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYg
bm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJS
ZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9k
ZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlN
b2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdy
aXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAg
ICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB1
bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGlu
ZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4g
U28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcuCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1v
ZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2Fu
dGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKKyAgICAgICAg
ICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2lu
Y2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2
aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9udW1WYWx1ZXNJblZlY3RvcikpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGVtcFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkp
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlJ3Jl
IHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywg
dGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICBub3RIb2xlVmFsdWUubGluaygmbV9qaXQp
OworICAgIH0KKyAgICAgICAgICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJy
YXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgCisgICAgcmV0
dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCisgICAgCiAgICAgc3dpdGNo
IChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyht
X2NvbXBpbGVJbmRleCk7CkBAIC0yNTk1LDYgKzI2OTksNTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsK
KyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDT05USUdVT1VT
X1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01P
REVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAg
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVn
ID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5
SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpA
QCAtMjYxNSw2ICsyNzYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yNjI3LDIxICsyNzc2LDY1IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBj
b21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0
b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNf
TU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpOwotCisgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhv
bGUpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBy
ZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3Vz
KG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlz
U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAocG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgewor
ICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3Rv
cmFnZSkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3Rv
cmFnZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1
bHRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5p
c1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKICAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAogICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxl
SW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgpAQCAtMjczNSw4ICsyOTI4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzogeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgorICAgICAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogewogICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZh
bHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBAIC0yNzU2LDU5ICsyOTQ5LDc2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNj
ZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0KLSAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1l
bnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGlzSG9sZVZhbHVlOwotICAgICAgICAgICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdl
IHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKLSAgICAgICAgICAgICAgICAv
LyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBu
ZWVkIGZvciBleGl0Ci0gICAgICAgICAgICAgICAgLy8gcHJvZmlsaW5nLgotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSkpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAg
ICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9w
dGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKLSAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5j
ZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJl
YWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAgICAgICAgICAgICAgICAgICBpc0hvbGVWYWx1ZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5W
ZWN0b3IpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRV
cGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgcHJvcGVydHlSZWcpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdp
c3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVDb250
aWd1b3VzUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3Bl
cnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKworICAgICAgICAg
ICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAg
dmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIGNoaWxkMyk7CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigp
OworICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJy
aWVyRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBj
aGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBj
aGlsZDQpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
CisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeVJl
Z2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFy
cmF5U3RvcmFnZVB1dEJ5VmFsKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZyk7CisKICAgICAg
ICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKICAgICAgICAg
ICAgIHZhbHVlLnVzZSgpOwogICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKLQotICAgICAgICAg
ICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KLSAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotCi0gICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNB
Y2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChiZXlvbmRB
cnJheUJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1v
ZGUpKQotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGlzSG9sZVZhbHVlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHkoKSkgewogICAg
ICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCkBA
IC0yODIwLDYgKzMwMzAsNjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgQVNTRVJUKG5vZGUu
b3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSB0ZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9y
YXJ5LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRv
bmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOwor
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcG9yYXJ5UmVnKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
OChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wb3JhcnlSZWcsIFN0cnVjdHVyZTo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCB0ZW1wb3JhcnlSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3Jw
aGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNh
c2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxU
aHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wb3Jh
cnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChu
b2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFy
eVJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVk
ZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gg
PSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBvcmFyeVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJl
ZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0
KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOworCisgICAgICAgICAgICBiYXNlLnVzZSgpOwor
ICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKwor
ICAgICAgICAgICAgLy8gRklYTUU6IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdy
ZSBpbiBzdHJpY3QgbW9kZSBzaG91bGQgYmUgbWFkZQorICAgICAgICAgICAgLy8gYmFzZWQgb24g
dGhlIGlubGluZSBjYWxsIGZyYW1lLCBub3QgdGhlIG1hY2hpbmUgY29kZSBibG9jay4KKyAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJv
dW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHBy
b3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGls
ZDMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yOTczLDI2
ICszMjQwLDUzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
QXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgIC8vIFJlZnVzZSB0byBo
YW5kbGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7Cisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBo
YW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAotICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3Vs
dCwgc3RvcmFnZUxlbmd0aEdQUiwKLSAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQ
dXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0
b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApAQCAtMzAwMiw0MSArMzI5Niw3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7
CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBcnJheVBvcCBpbiBj
b250aWd1b3VzIG1vZGUgaGFzIG5vIGNoYW5jZSBvZiBzaWRlIGVmZmVjdHMuIFdlIHNob3VsZCB0
YWtlCisgICAgICAgICAgICAvLyBhZHZhbnRhZ2Ugb2YgdGhpcywgc29tZWhvdy4KKyAgICAgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCB1bmRlZmluZWRDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIpLCB2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5k
ZWZpbmVkQ2FzZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBH
UFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7Ci0gICAgICAgIHNldFVuZGVmaW5l
ZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0
b3JhZ2VMZW5ndGhHUFIpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRV
bmRlZmluZWRDYXNlczsKKyAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAKLSAgICAgICAgc2V0VW5k
ZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAg
ICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7Ci0gICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgCi0g
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAot
ICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlzLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAgICAgICAgIHNldFVuZGVm
aW5lZENhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwog
ICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5
UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CiAK
LSAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMzIxMCw4ICszNTMzLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHNpemVHUFIgPSBzaXplLmdw
cigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUs
IHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBzaXplR1BSKTsK
LSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0cnVj
dHVyZUdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIoc2l6ZUdQUik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdEVtcHR5ID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBzaXplR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIG5vdEVtcHR5Lmxp
bmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkpLCBzdHJ1Y3R1cmVHUFIpOworICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6ZUdQUik7CisgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
NSw2ICszMTUsNDEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwog
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNT
dHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElH
VU9VU19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAg
bV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7
CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1w
R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQ
UiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICAv
LyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJhbmNoLiBCdXQgd2Ug
Y3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBkb2luZyBzbyB3b3Vs
ZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdpdGggdGhlIHByZXNl
bnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBhdGguCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1w
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CisgICAg
ICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTM1
Miw2ICszODcsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwog
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0
dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlk
ZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBk
byBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNv
dmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAg
ICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAgIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29u
dGlndW91cyhub2RlLmFycmF5TW9kZSgpKSA/IEhhc0NvbnRpZ3VvdXMgOiAwKQorICAgICAgICAg
ICAgICAgICAgICB8IChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlN
b2RlKCkpID8gSGFzQXJyYXlTdG9yYWdlIDogMCkpKSk7CisgICAgICAgIAorICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6
OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CkBAIC0zOTAsNzIgKzQ0OCw5OCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgQVNTRVJUKCFtb2RlQWxyZWFkeUNo
ZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7
CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgCisgICAgSW5kZXhpbmdUeXBlIGRlc2lyZWRJ
bmRleGluZ1R5cGVNYXNrOwogICAgIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewot
ICAgIGNhc2UgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigp
OwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgY2FzZSBBcnJheTo6
QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFz
Q29udGlndW91czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5
U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNBcnJheVN0b3Jh
Z2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlT
dG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFn
ZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRl
eGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91cyB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5n
cHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIAotICAgICAg
ICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgbV9q
aXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIAotICAgICAg
ICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBh
cnJheSBzdG9yYWdlLgotICAgICAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1h
c2sgPQotICAgICAgICAgICAgaXNTbG93UHV0QWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpID8gKEhh
c0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpIDogSGFzQXJyYXlTdG9yYWdl
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRl
c3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNp
cmVkSW5kZXhpbmdUeXBlTWFzaykpOworICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVz
IG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQ
UiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKICAgICAgICAgCi0g
ICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICBt
X2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIHNsb3dD
YXNlLmxpbmsoJm1faml0KTsKKyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAot
ICAgICAgICAvLyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQg
aW5kZXhlZCBhY2Nlc3Nlcy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUg
d29uJ3Qgd29yay4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8pKSk7CisgICAgLy8gTmV4dCBjaGVjayB0aGF0IHRoZSBvYmplY3QgZG9l
cyBub3QgaW50ZXJjZXB0IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0IGRvZXMsCisgICAgLy8gdGhl
biB0aGlzIG1vZGUgd29uJ3Qgd29yay4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8pKSk7CiAgICAgICAgIAotICAgICAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBh
cnJheSBzdG9yYWdlLgotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsK
KyAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgorICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VSZWcpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZyk7Ci0g
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7Ci0KLSAgICAgICAgLy8gQWxh
cywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBzcGlsbGlu
ZyBkb2VzIG5vdCBzYXZlCi0gICAgICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUg
dXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCi0gICAgICAg
IC8vIGFib3V0IGEgbG9hZC4KLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICAKLSAgICAgICAgLy8gRmluYWxseSwgY2hlY2sgdGhh
dCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQgdG8gZ2V0
LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBj
aGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAotICAgICAgICAvLyBieXRlY29kZSBvcGVy
YXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0
ZWQuCi0gICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3Qg
dXNlci12aXNpYmxlLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpKTsKLSAgICAgICAgCi0gICAgICAg
IGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNhc2UgQXJyYXk6OkJsYW5r
VG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZyk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOwogICAgICAgICBicmVhazsKICAgICB9Cisg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKworICAgIC8vIEFsYXMsIHdlIG5l
ZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBu
b3Qgc2F2ZQorICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBp
dCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCisgICAgLy8gYWJvdXQgYSBsb2Fk
LgorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAg
ICAKKyAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkg
c3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMg
YSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwgcmVzdWx0IGluIHRoZSAK
KyAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZp
Y2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCisgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5
aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAg
ICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDgoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSkpOworICAgICAgICAKKyAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0K
IAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4
KQpAQCAtMzIwNSwxMiArMzI4OSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0
eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgCisgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKKyAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgcmVzdWx0UmVnKTsK
ICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAg
ICAgICAKQEAgLTMzOTksNiArMzQ5NCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxlSW5k
ZXgpOwogfQogCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0
QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sK
KyAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkpCisgICAg
ICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZWFsVGVt
cG9yYXJ5KHRoaXMpOworICAgIHRlbXBvcmFyeS5hZG9wdChyZWFsVGVtcG9yYXJ5KTsKKyAgICBy
ZXR1cm4gdGVtcG9yYXJ5LmdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR1BSVGVtcG9yYXJ5OwogY2xh
c3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1
bGF0aXZlSklUOwpAQCAtMTE2Niw2ICsxMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
b2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9s
ZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMjE4LDExICsxMjI0LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwor
ICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZv
aWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0
cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNDY4LDYgKzE0NzksMTEgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
VHJ1c3RlZEltbVB0cihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgaW50MzJfdCBhcmcyKQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJn
MikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTE1MzEsMTEgKzE1
NDcsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZv
aWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0
cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0yMTQ5LDYgKzIxNzAsNDIgQEAg
cHVibGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsK
ICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChO
b2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21w
aWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyAgICAKKyAg
ICBib29sIHB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIC8vIEZvciBB
cnJheVN0b3JhZ2UsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBzdG9yZXMgdG8gaG9sZXMgZXhj
ZXB0IGlmCisgICAgICAgIC8vIHdlJ3JlIGluIFNsb3dQdXQgbW9kZS4KKyAgICAgICAgY2FzZSBB
UlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAg
ICAgIC8vIEZvciBDb250aWd1b3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3IgYW55IGFjY2Vz
cyB0aGF0IG1heSBzdG9yZQorICAgICAgICAvLyB0byB0aGUgdGFpbC4KKyAgICAgICAgY2FzZSBD
T05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05U
SUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RF
UzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEFs
bCBwb2x5bW9ycGhpYyBtb2RlcyBuZWVkIGFuIGV4dHJhIHJlZy4KKyAgICAgICAgY2FzZSBBTExf
UE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBv
cmFyeSYsIEFycmF5OjpNb2RlKTsKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRC
eVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJh
eU1vZGUoKSk7CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29u
dGlndW91c1B1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVn
LCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChO
b2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIAogICAgIHZvaWQgY29t
cGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJp
bmcoTm9kZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwMCw2ICs0MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpOwogCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXggPSAwOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4ID0gMDsKICAgICBtX2dsb2JhbFJl
c29sdmVJbmZvSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogICAgIApA
QCAtNzM4LDYgKzczOSwyMCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciog
ZnVuCiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJv
cGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkKICAg
ICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHViSW5mbyht
X2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSksIHBhdGNoQnVmZmVyKTsKKyAgICBtX2Nv
ZGVCbG9jay0+c2V0TnVtYmVyT2ZCeVZhbEluZm9zKG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6
ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ieVZhbENvbXBpbGF0aW9uSW5m
by5zaXplKCk7ICsraSkgeworICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wID0g
Q29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlv
bkluZm9baV0uYmFkVHlwZUp1bXApKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZVRh
cmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5k
b25lVGFyZ2V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhUYXJnZXQgPSBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uc2xvd1BhdGhU
YXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0ucmV0dXJuQWRkcmVzcyk7
CisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9jay0+YnlWYWxJbmZvKGkpID0gQnlWYWxJbmZv
KAorICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4LAor
ICAgICAgICAgICAgYmFkVHlwZUp1bXAsCisgICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW2ldLmFycmF5TW9kZSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihi
YWRUeXBlSnVtcCwgZG9uZVRhcmdldCksCisgICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIocmV0dXJuQWRkcmVzcywgc2xvd1BhdGhUYXJnZXQpKTsKKyAgICB9CiAgICAgbV9jb2Rl
QmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGls
YXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJs
b2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQsMjUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgY29weVRvU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIGluZm8s
IExpbmtCdWZmZXIgJnBhdGNoQnVmZmVyKTsKICAgICB9OwogCisgICAgc3RydWN0IEJ5VmFsQ29t
cGlsYXRpb25JbmZvIHsKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oKSB7IH0KKyAgICAg
ICAgCisgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldCkKKyAgICAgICAgICAg
IDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgLCBiYWRUeXBlSnVt
cChiYWRUeXBlSnVtcCkKKyAgICAgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAg
ICAgICAgICwgZG9uZVRhcmdldChkb25lVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOworICAgICAgICBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoVGFyZ2V0OworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCByZXR1cm5BZGRyZXNzOworICAgIH07CisKICAgICBzdHJ1Y3QgU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQ
YXRoT3RoZXI7CkBAIC0zNDgsNiArMzY3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRT
dHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVz
cywgZGlyZWN0KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgY29t
cGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQo
Z2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0
ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21w
aWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1
cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5l
cyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xp
bmVzKQogICAgICAgICB7CkBAIC0zOTcsNiArNDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZv
KiwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBTdHJ1
Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKik7CiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qLCBT
dHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0
dXJuQWRkcmVzc1B0ciwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5B
ZGRyZXNzUHRyLCBib29sIGRpcmVjdCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2Rl
KTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVy
bkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0ds
b2JhbERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFs
c2UpOwpAQCAtNDUyLDYgKzQ4OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBl
LCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5k
SW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
OwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFy
cmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5
TW9kZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGlu
IHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRleGluZyB0eXBlLgor
ICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4gQmFz
ZSBpcyBjZWxsIGNoZWNrZWQuCisgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2Zp
bGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKKyAgICAgICAgLy8gY2Fz
ZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2ZpbGVkLgor
ICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICAK
KyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1Qy
IGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBp
cyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCisgICAgICAgIC8v
IHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFk
eSBwcm9maWxlZC4KKyAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KKyAgICAgICAg
SnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKIAogICAgICAgICBlbnVtIEZp
bmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApAQCAtODcwLDYg
KzkyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9j
YWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKICAgICAgICAgVmVjdG9yPFBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
bzsKKyAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPE1ldGhvZENh
bGxDb21waWxhdGlvbkluZm8+IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAg
VmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKQEAgLTg3OSw2ICs5MzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAg
ICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKyAgICAgICAg
dW5zaWduZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fZ2xv
YmFsUmVzb2x2ZUluZm9JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9jYWxsTGlua0luZm9JbmRl
eDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsMjMgKzQ0NSwyMiBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3Ro
LCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0
ZXJJRCBzdG9yYWdlUHRyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3Rv
cmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihpbml0aWFsTGVuZ3RoKSk7CisgICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IHN0ZDo6
bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2Ug
PSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBpbml0aWFsTGVuZ3RoICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSk7CisKKyAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CiAKICAgICAvLyBX
ZSBhbGxvY2F0ZSB0aGUgYmFja2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdl
IGNvbGxlY3Rpb24gCiAgICAgLy8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlh
bGl6YXRpb24uCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRl
IHRoZSBjZWxsIGZvciB0aGUgYXJyYXkuCi0gICAgbG9hZFB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOwogICAgIGVtaXRB
bGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNBcnJheSwgZmFsc2U+KHNjcmF0Y2gsIGNlbGxSZXN1bHQs
IHN0b3JhZ2VQdHIpOwogCi0gICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbyBpbiB0
aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9y
YWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJ
bW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFs
dWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCks
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFw
T2Zmc2V0KCkpKTsKKyAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBp
bmRleGluZyBoZWFkZXIuCisgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3Jh
Z2VSZXN1bHQsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIHN0b3Jl
MzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3bHkgYWxs
b2NhdGVkIEFycmF5U3RvcmFnZS4KICAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNz
KGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtNDcwLDEyICs0
NjksMTIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lz
dGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3Jl
UHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOworICAgICAg
ICBzdG9yZVB0cihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwogI2Vsc2UKICAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHN0b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3Rv
cmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICogaSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIg
KyBpKSAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YodWludDMyX3QpKSwgc3RvcmFnZVB0cik7
Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFk
ZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsg
c2l6ZW9mKHVpbnQzMl90KSkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNTU5LDEwICs1NTgsMjUg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRgogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlKQogewotICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCiAgICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgp
KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5
UHJvZmlsZSogcHJvZmlsZSwgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQorICAgIHJldHVybiAhIShwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9k
ZXMoKSAmIChhc0FycmF5TW9kZXMoTm9uQXJyYXkgfCBjYXBhYmlsaXR5KSB8IGFzQXJyYXlNb2Rl
cyhBcnJheUNsYXNzIHwgY2FwYWJpbGl0eSkpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKK2lubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJy
YXlQcm9maWxlKiBwcm9maWxlKQoreworICAgIGlmIChhcnJheVByb2ZpbGVTYXcocHJvZmlsZSwg
SGFzQXJyYXlTdG9yYWdlKSkKKyAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAgICBy
ZXR1cm4gSklUQ29udGlndW91czsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEyOTY5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NjEsNyArMTY2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jX2V4cChJ
bnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKSB7Cisg
ICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpCisg
ICAgICAgIHx8IENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjgwLDggKzE2ODEsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0cnVjdAogICAgIC8vIElmIHRoZSBhbGxvY2F0
aW9uIHdvdWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFrZSB0aGUgcHJvcGVyIHN0
dWIgY2FsbCBhYm92ZSBpbiAKICAgICAvLyBlbWl0X29wX25ld19hcnJheS4KICAgICBpbnQgbGVu
Z3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3Bh
Y2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNp
emUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJuOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
V2UncmUgaGF2aW5nIGEgYmFkIHRpbWUuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3Qg
ZW5vdWdoIHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTExMSwxNyArMTEyLDYzIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVBy
b2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJl
Z1QyLCByZWdUMywgcHJvZmlsZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgp
OworICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBKdW1wIHJlc3VsdE9LID0gYnJhbmNo
VGVzdFB0cihOb25aZXJvLCByZWdUMCk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9L
LmxpbmsodGhpcyk7CisjZW5kaWYKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFk
VHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hU
ZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgbG9h
ZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKKyAgICAKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3Rv
cmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwor
CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDMsMTcgKzE5MCwxMDAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwoSW5zdHJ1YwogICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOwogICAgIG5vbkNlbGwubGlu
ayh0aGlzKTsKICAgICAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGgg
Y2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCisgICAgc3dpdGNo
IChjaG9vc2VBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKSkg
eworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hl
Y2sKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAog
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBj
YWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRy
ZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpOwogfQogCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2Fz
ZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBh
dGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52
YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25l
KSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV92
YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9j
b2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVy
VG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9n
ZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRp
Z3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIu
bGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNz
LnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAK
KyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAg
ICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZv
ciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywg
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8t
PmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsK
K30KKwogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBS
ZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgc2NyYXRjaCwg
RmluYWxPYmplY3RNb2RlIGZpbmFsT2JqZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoc2l6ZW9mKEpT
VmFsdWUpID09IDgpOwpAQCAtMjI2LDcgKzM1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMjM0LDEwICszNjQsNzMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAor
ICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBl
KTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBs
YWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29t
cGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKKwor
ICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZp
bHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKK30KKworSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAor
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgSnVtcCBvdXRPZkJvdW5k
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBs
YWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBz
dG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAK
KyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAg
ICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gz
MihBYm92ZSwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkp
KTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9m
aWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7Cisg
ICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAg
CisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisK
K0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNp
Z25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwor
ICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdl
KSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBK
dW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAK
QEAgLTI0Nyw4ICs0NDAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVj
dGlvbgogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5W
ZWN0b3IpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJv
ZmlsZSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSwgcmVnVDMpOworICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJl
Z1QzLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkpOworICAg
IHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3Jl
UmVzdWx0LCB0aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwpAQCAt
MjU3LDggKzQ1Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGVuZC5saW5rKHRo
aXMpOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCByZWdUMywg
U2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwor
ICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yNzAsMTMgKzQ2NiwyMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIs
IGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJh
c2Ugbm90IGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2ZWN0b3Ig
Y2hlY2sKKyAgICAvLyBUaGVzZSBuZXh0IHR3byBjaGVja3MgaGF2ZSBkaWZmZXJlbnQgbWVhbmlu
Z3MgYWNjb3JkaW5nIHRvIGFycmF5IG1vZGUuCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
CiAKICAgICBKSVRTdHViQ2FsbCBzdHViUHV0QnlWYWxDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlf
dmFsKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHVi
UHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1YlB1dEJ5
VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSwgcmVnVDIpOwotICAgIHN0dWJQdXRCeVZhbENhbGwu
Y2FsbCgpOworICAgIENhbGwgY2FsbCA9IHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworCisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhU
YXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleCsrOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaW5kZXgoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY1Niw3ICs4NjAsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVGb3JCeXRlY29kZUluZGV4KHJlZ1QyLCByZWdUMSwgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXgpOwogICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKElzQXJyYXkpKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICBK
dW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250aWd1b3VzKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0
IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDE0LDYgKzI0MTQsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0QnlW
YWwoCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVl
IHN1YnNjcmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChM
SUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAg
ICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Q
cm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkp
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoc3Vic2NyaXB0
LmlzVUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigp
OworICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1
ZSktPmNhbkdldEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIo
Y3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmco
YmFzZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0KKworICAgIGlmIChpc05h
bWUoc3Vic2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBq
c0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7
CisKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5n
KGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0
KGNhbGxGcmFtZSwgcHJvcGVydHkpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CkBAIC0yNDIzLDM1ICsyNDQ3LDM3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJn
c1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3Nb
MV0uanNWYWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYm
IHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBi
YXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5n
KHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsK
KyAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAg
ICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5m
byA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAt
IDEpOworICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7Cisg
ICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKKyAg
ICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JJbmRleGlu
Z1R5cGUoaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJ
bmZvLmFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8s
IFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KICAgICB9CisgICAg
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vi
c2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorICAgIAorREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWxfZ2VuZXJpYykKK3sKKyAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoc3Vic2NyaXB0
LmlzVUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigp
OwotICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1
ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAg
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBi
YXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KLQotICAg
IGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2Vs
bCgpKS0+cHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShj
YWxsRnJhbWUpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1l
LCBwcm9wZXJ0eSk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIAorICAgIEpT
VmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
U1RVQl9SRVRVUk5fQUREUkVTUyk7CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KICAgICAKQEAgLTI1MDIsMjMgKzI1Mjgs
MTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2J5X3ZhbCkKK3N0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0KLSAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBz
dGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOwotCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigp
OwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwogICAgICAgICAgICAgaWYgKG9iamVj
dC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5k
ZXhRdWlja2x5KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb2JqZWN0
LT5zZXRJbmRleFF1aWNrbHkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGksIHZhbHVlKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtMjUyOCwxMSArMjU0NSw1
NCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAgIGJh
c2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFz
Q2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSwgdmFsdWUsIHNsb3QpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2Fs
bEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgICAgIGlmICghc3RhY2tGcmFtZS5nbG9i
YWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmlu
ZyB0aHJldyBhbiBleGNlcHRpb24uCisgICAgICAgIGlmICghY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCkuZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhy
ZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgYmFzZVZhbHVl
LnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9
Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwpCit7CisgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJh
bWUuYXJnc1syXS5qc1ZhbHVlKCk7CisKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYg
c3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgor
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZz
ZXRGb3JOb25ERkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAg
ICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0QnlW
YWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0
dWJSb3V0aW5lKTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1
ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGluZ1R5
cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9
IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAgICAgICAg
aWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZVB1dEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CisKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OworfQorCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsX2dlbmVyaWMp
Cit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKworICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7CisgICAgCisgICAgcHV0QnlWYWwoY2FsbEZy
YW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJ
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDYgKzM3MCw3IEBAIGV4dGVybiAiQyIgewogICAgIEVu
Y29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVC
IGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWwo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAgRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5
X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pbnN0YW5jZW9m
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpAQCAtNDQ2LDYgKzQ0Nyw3IEBA
IGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9kaXJlY3Rf
Z2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9wdXRfYnlfaW5kZXgoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5U
RVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlf
dmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9p
ZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2dldHRlcl9zZXR0ZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2dsb2JhbF92YXJf
Y2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTAxOCw3ICsxMDE4LDcgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAg
ICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVyZVt0M10sIHQyCiAgICAgYXJyYXlQcm9maWxlKHQy
LCB0MSwgdDApCiAgICAgYnRpeiB0MiwgSXNBcnJheSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93Ci0g
ICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKKyAgICBi
dGl6IHQyLCAoSGFzQ29udGlndW91cyB8IEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJh
eVN0b3JhZ2UpLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhd
LCB0MQogICAgIGxvYWRwIDY0W1BCLCBQQywgOF0sIHQyCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1f
YnV0dGVyZmx5W3QzXSwgdDAKQEAgLTExNDcsMTQgKzExNDcsMjQgQEAgX2xsaW50X29wX2dldF9i
eV92YWw6CiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIs
IHQzLCB0MSkKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKLSAgICBidGl6IHQyLCBIYXNB
cnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJ
bnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBzeGkycCB0MSwgdDEKICAgICBsb2Fk
cCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MworICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3Vv
dXMsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cworCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5k
ZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRC
eVZhbFNsb3cKKyAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAorICAgIGxvYWRwIFt0MywgdDEs
IDhdLCB0MgorICAgIGptcCAub3BHZXRCeVZhbERvbmUKKworLm9wR2V0QnlWYWxOb3RDb250aWd1
b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CiAg
ICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkcCBBcnJheVN0b3JhZ2U6Om1fdmVj
dG9yW3QzLCB0MSwgOF0sIHQyCiAgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CisKKy5vcEdl
dEJ5VmFsRG9uZToKICAgICBzdG9yZXAgdDIsIFtjZnIsIHQwLCA4XQogICAgIGxvYWRwIDQwW1BC
LCBQQywgOF0sIHQwCiAgICAgdmFsdWVQcm9maWxlKHQyLCB0MCkKQEAgLTEyMjYsMjkgKzEyMzYs
NTUgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVy
ZVt0MV0sIHQyCiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDMKICAgICBhcnJheVByb2ZpbGUo
dDIsIHQzLCB0MCkKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xv
dwogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVJbnQzMih0MCwgdDIsIC5vcFB1dEJ5VmFsU2xvdykKLSAgICBzeGkycCB0MiwgdDIKKyAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQzLCAub3BQdXRCeVZhbFNsb3cpCisgICAg
c3hpMnAgdDMsIHQzCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKLSAg
ICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3Zl
Y3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJ0cHogQXJyYXlTdG9yYWdlOjpt
X3ZlY3Rvclt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVz
dWx0OgotICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwotICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUodDMsIHQxKQorICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcFB1dEJ5VmFsTm90
Q29udGlndW91cworICAgIAorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxDb250aWd1b3Vz
T3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0OgorICAgIGxvYWRp
cyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQor
ICAgIHdyaXRlQmFycmllcih0MSkKKyAgICBzdG9yZXAgdDEsIFt0MCwgdDMsIDhdCisgICAgZGlz
cGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgYmlhIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cK
KyAgICBpZiBWQUxVRV9QUk9GSUxFUgorICAgICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0Mgor
ICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QyXQorICAg
IGVuZAorICAgIGFkZGkgMSwgdDMsIHQyCisgICAgc3RvcmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQorICAgIGptcCAub3BQ
dXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdAorCisub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXM6
CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKKyAgICBiaWFl
cSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rv
clt0MCwgdDMsIDhdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5Cisub3BQdXRCeVZhbEFy
cmF5U3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MgorICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQogICAgIHdyaXRlQmFycmllcih0MSkKLSAg
ICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XQorICAgIHN0b3Jl
cCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdCiAgICAgZGlzcGF0Y2goNSkK
IAotLm9wUHV0QnlWYWxFbXB0eToKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHk6CiAgICAg
aWYgVkFMVUVfUFJPRklMRVIKLSAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlT
dG9yZVRvSG9sZVt0M10KKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDEKKyAgICAgICAg
c3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0MV0KICAgICBlbmQKLSAg
ICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIg
dDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5n
dGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjpt
X251bVZhbHVlc0luVmVjdG9yW3QwXSwgdDEKKyAgICBhZGRpIDEsIHQxCisgICAgYmllcSB0MSwg
LXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0
MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIHN0b3JlaSB0MSwgQXJyYXlTdG9yYWdlOjptX251bVZh
bHVlc0luVmVjdG9yW3QwXQorICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdl
U3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQogICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KLSAgICBq
bXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFn
ZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50
X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI5NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw4ICs2Myw5IEBAIGVuZAogCiAjIENvbnN0YW50IGZvciByZWFzb25p
bmcgYWJvdXQgYnV0dGVyZmxpZXMuCiBjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQ29udGln
dW91cyA9IDIKIGNvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKLWNvbnN0IEFsbEFycmF5VHlwZXMg
PSAxNQorY29uc3QgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSA9IDE2CiAKICMgVHlwZSBjb25zdGFu
dHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5
Q2FwYWNpdHkgKyAxKTsKICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaGVyZSBu
b3QganVzdCBiZWNhdXNlIGl0J3MgaGFuZHksIGJ1dCB0byByZW1pbmQgeW91IHRoYXQKKyAgICAv
LyB0aGUgd2hvbGUgcG9pbnQgb2YgYnV0dGVyZmxpZXMgaXMgdG8gZG8gZXZpbCBwb2ludGVyIGFy
aXRobWV0aWMuCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbVBvaW50ZXIoY2hhciogcHRyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4ocHRyKTsK
KyAgICB9CisgICAgCisgICAgY2hhciogcG9pbnRlcigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHRoaXMpOyB9CisgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklu
ZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdI
ZWFkZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSB7
IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRl
cjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQpAQCAtNzAsOSArNzksMjEgQEAgcHVibGljOgog
ICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgUHJvcGVydHlTdG9yYWdlIHByb3Bl
cnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgp
OyB9CiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyBy
ZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICB1
aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wdWJsaWNM
ZW5ndGgoKTsgfQorICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWlu
dDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3RoKHZhbHVlKTsg
fQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4aW5nSGVh
ZGVyKCktPnNldFZlY3Rvckxlbmd0aCh2YWx1ZSk7IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VCo+KHRoaXMpOyB9CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjb250aWd1b3VzKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmll
cjxVbmtub3duPiA+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQ29udGln
dW91cyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihjb250aWd1b3VzKTsKKyAgICB9CiAg
ICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0
dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CiAg
ICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKIAogaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVy
T2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgIEFTU0VSVChudW1iZXJPZlNsb3RzIDw9IGluZGV4aW5nSGVhZGVy
KCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IEl0IHdv
dWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFzIGEgbG9vcCBzaW5jZSAoMSkg
d2Uga25vdyBpbiB3aGljaApAQCAtMTYzLDcgKzE2Myw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6dW5zaGlmdChTdHIKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OwogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgogICAgIG1l
bW1vdmUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxNyBAQCBpbmxpbmUgc2l6ZV90IEluZGV4
aW5nSGVhZGVyOjpwcmVDYXBhY2l0CiAKIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlm
IChMSUtFTFkoIWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpCisg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHZlY3Rvckxlbmd0aCgpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIH0KIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IGNoYXIqIGluZGV4aW5nVHlwZVRvU3RyaW5nKEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzKSB7
CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuICJOb25BcnJheSI7CisgICAgY2Fz
ZSBOb25BcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIk5vbkFycmF5V2l0aENv
bnRpZ3VvdXMiOworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBy
ZXR1cm4gIk5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBOb25BcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIk5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgcmV0dXJuICJBcnJh
eUNsYXNzIjsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAi
QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZSI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CiAKIC8vIEZsYWdz
IGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAgICAgICAgICA9IDI7CiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgICA9IDE2OwogCkBAIC00Miw5ICs0
MywxMSBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkCiAKIC8vIExp
c3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
Tm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgPSBIYXNDb250aWd1b3VzOwog
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAg
ID0gSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIHN0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAgICAgICAgICAgICAgICA9IElzQXJy
YXk7IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXkiIGJ1dCB0aGlzIHdvdWxkIGxlYWQg
dG8gZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0NvbnRp
Z3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAg
ICAgICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc1Ns
b3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU1LDEwIEBAIHN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJheTogICAgICAgICAgICAgICAgICAg
IFwKICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgIFwKKyAgICBj
YXNlIEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQpAQCAt
NzYsNiArODMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0luZGV4aW5nSGVhZGVyKEluZAog
ICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBlKTsKIH0KIAorc3RhdGljIGlubGlu
ZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBy
ZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9CisKIHN0YXRpYyBpbmxp
bmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKIHsKICAg
ICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRB
cnJheVN0b3JhZ2UpKTsKQEAgLTg2LDYgKzk4LDggQEAgc3RhdGljIGlubGluZSBib29sIHNob3Vs
ZFVzZVNsb3dQdXQoSW5kZQogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciogaW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5k
ZXhpbmdUeXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCiBzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDMxOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI5Njky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzMyw2ICszMzMsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKEpTR2xvCiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogeworICAgIC8vIEZJWE1FOiB0
aGlzIHNob3VsZG4ndCBjb252ZXJ0IHRvIGFycmF5IHN0b3JhZ2UuCiAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKQEAgLTQwMiw2ICs0MDMsMTYg
QEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgIGNhc2UgQXJyYXlD
bGFzczoKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aC0tKQor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICBtX2J1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uZ2V0KCk7CisgICAgfQorICAgICAgICAKICAgICBj
YXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAg
CkBAIC00NTgsNiArNDY5LDI1IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmEKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0u
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRF
WCkgeworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBs
ZW5ndGgsIHZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRp
Z3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBsZW5ndGgsIHZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgICAgIGlm
IChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0aCwgdmFs
dWUsIHRydWUpKSB7CkBAIC02MDAsNiArNjMwLDE5IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVy
aWMoRXhlY1N0YXRlKiBleGUKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIGlmICgh
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIW1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
aXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHFzb3J0KG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNv
cnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogewogICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC02
MjksNiArNjcyLDcgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQog
ICAgICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBw
cmltaXRpdmUgdmFsdWVzLgogICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwog
ICAgICAgICAKKyAgICAgICAgYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VU
b0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdG9yYWdlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAgICAgCkBAIC02MzcsODYgKzY4MSwxMTIgQEAgdm9pZCBKU0FycmF5Ojpz
b3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIH0KIH0KIAotdm9pZCBKU0FycmF5Ojpzb3J0
KEV4ZWNTdGF0ZSogZXhlYykKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2
b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0aCkKIHsKLSAgICBB
U1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwotICAgIAotICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgorICAgIGlmICgh
cmVsZXZhbnRMZW5ndGgpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBDb252ZXJ0aW5nIEph
dmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQg
b25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgIC8vIFRoaXMgaXMgYSBj
b25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNv
biwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgLy8gYnVmZmVyLiBC
ZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhh
dmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KKyAgICAvLyByYW5kb20gb3Ig
b3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1
bmN0aW9uIGluY29uc2lzdGVudC4KICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0g
Y29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICBpZiAo
c3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgICAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVz
IHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBh
bmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxl
IGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBp
dCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMs
IHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0
b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgICAgICAvLyByYW5kb20gb3Igb3Ro
ZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0
aW9uIGluY29uc2lzdGVudC4KLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1Bh
aXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgICAgICBpZiAoIXZh
bHVlcy5iZWdpbigpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8VmFsdWVTdHJpbmdQ
YWlyPiB2YWx1ZXMocmVsZXZhbnRMZW5ndGgpOworICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsK
KyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVj
dG9yKCZ2YWx1ZXMpOworICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ID0gdHJ1ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICAgICAg
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZh
bHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgICAgIH0KKyAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2
ZVZhbHVlcyA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0
aDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBiZWdpbltpXS5nZXQoKTsKKyAgICAg
ICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdmFsdWVzW2ldLmZpcnN0
ID0gdmFsdWU7CisgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1By
aW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAgIH0KICAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9T
dHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAgICAgICAvLyBhIHRvU3Ry
aW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2lu
ZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2
ZW4gYWZ0ZXIKKyAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAg
ICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ld
LmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVl
c1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+
cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFs
dWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3
b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgICAgICAvLyB0aGFuIE8oTiBsb2cgTikuCisgICAgLy8g
RklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1p
Z2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAg
ICAvLyB0aGFuIE8oTiBsb2cgTikuCiAgICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQotICAg
ICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICAgICAgcXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZXJn
ZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotI2Vsc2UKLSAgICAgICAgLy8gRklY
TUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFi
bGUgc29ydC4KLSAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0
YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29y
dC4KKyAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQogICAgICAgICBxc29ydCh2YWx1
ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBh
cmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgZWxzZQorICAgICAgICBtZXJnZXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogVGhlIHFzb3J0
IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAg
IC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGlu
IHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCisgICAgcXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCisgICAgCisgICAgLy8gSWYgdGhlIHRv
U3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9y
IHN0b3JhZ2UsCisgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWdu
YWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNM
ZW5ndGgoZ2xvYmFsRGF0YSwgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICBicmVhazsKICAgICAg
ICAgCi0gICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgICAgICAvLyBpbmNyZWFzZSB0
aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4K
LSAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9i
YWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgICAgICBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICBpZiAoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpIDwg
cmVsZXZhbnRMZW5ndGgpIHsKKyAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICAgICAgYmVnaW4gPSBhcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0b3JhZ2UtPmxl
bmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmIChh
cnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkKKyAgICAgICAgICAgIGFy
cmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgocmVsZXZhbnRMZW5ndGgpOworICAgICAgICBicmVhazsK
ICAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IENSQVNIKCk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExl
bmd0aDsgaSsrKQorICAgICAgICBiZWdpbltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVz
W2ldLmZpcnN0KTsKKyAgICAKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKK30KKwordm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1w
U29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAg
ICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAg
ICAgIGV4ZWMsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQ29udGln
dW91cz4oCisgICAgICAgICAgICBleGVjLCBzdG9yYWdlLT5tX3ZlY3RvciwgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKTsKKworICAgICAgICBhdHRlbXB0VG9Db252ZXJ0Q29udGlndW91c0Fy
cmF5U3RvcmFnZVRvQ29udGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCksIHN0b3JhZ2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgxMCw2ICs4ODAsNzggQEAgdm9pZCBK
U0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGNhc2UgQXJyYXlDbGFzczoK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6
IHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0
aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KKyAgICAgICAgCisgICAgICAgIC8v
IFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBp
cyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMg
cGFzc2VkLgorICAgICAgICBBU1NFUlQobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7Cisg
ICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBpZiAoIW1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFi
c3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2gg
Zm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsK
KyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVu
Y3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2Fs
bFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNh
bGxEYXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0g
YWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJl
RnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUg
dmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0
IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAg
ICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBu
dW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBh
cnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBh
bmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAo
OyBudW1EZWZpbmVkIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK251bURlZmluZWQp
IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbnVt
RGVmaW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVk
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwg
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
diA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
di5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVm
aW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtRGVmaW5lZCArIG51bVVuZGVmaW5l
ZCA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID09IG51bURlZmluZWQpOworICAg
ICAgICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisg
ICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRl
cmF0b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkICYmIGkgPCBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sq
aXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyAr
K2kpCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFVuZGVmaW5l
ZCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTkyOSw2ICsxMDcx
LDEyIEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoK
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgYXJncy5hcHBlbmQobV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwpAQCAtOTYw
LDYgKzExMDgsMTIgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKgog
ICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgY2FsbEZyYW1l
LT5zZXRBcmd1bWVudChpLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICB1bnNpZ25lZCBpID0gMDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEy
OTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsNiArOTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpOwogICAg
ICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
PgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiwgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpOwogCiAgICAgICAg
IHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7CiAKQEAg
LTEwNiw2ICsxMDksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGNvbXBh
Y3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwogICAgIH07CiAKKyAgICBpbmxpbmUgQnV0dGVy
Zmx5KiBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBJbmRleGluZ0hlYWRlciBoZWFk
ZXI7CisgICAgICAgIGhlYWRlci5zZXRWZWN0b3JMZW5ndGgoc3RkOjptYXgobGVuZ3RoLCBCQVNF
X1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgaGVhZGVyLnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwor
ICAgICAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRh
LCAwLCAwLCB0cnVlLCBoZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5
QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGUoCkBAIC0xMjEsNyArMTMzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpT
QXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0
aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChM
SUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkg
eworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5
KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKCFpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKKyAgICAgICAg
ICAgICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3Jl
YXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0K
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Fy
cmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0
dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAg
ICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMzMsMTUgKzE1MywyNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAg
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSks
ICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7Ci0gICAgICAgICpidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5n
dGgsIHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsK
LSAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKLSAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9p
ZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgICAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFs
TGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID0gMDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzEsNyArMjMxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwog
ICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKIAogICAg
IG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Ci0g
ICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90
eXBlLmdldCgpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKKyAgICBtX2FycmF5U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0
aENvbnRpZ3VvdXMpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpKTsKICAgICBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlKSk7CiAgICAgbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAKQEAgLTQw
Nyw2ICs0MDgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoSlNHbG9iCiAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIEpTQXJyYXkgYWxsb2NhdGlvbnMgdGhhdCBsb2FkIHRo
ZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgZnJvbQogICAgIC8vIHRoaXMgb2JqZWN0IG5vdyBsb2Fk
IGEgc3RydWN0dXJlIHRoYXQgdXNlcyBTbG93UHV0LgogICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsKKyAg
ICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkpOwogICAgIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGFsbCBvYmplY3RzIHRoYXQgaGF2ZSBpbmRleGVkIHN0b3JhZ2Ugc3dpdGNoIHRvIHRo
ZSBzbG93IGtpbmQgb2YKICAgICAvLyBpbmRleGVkIHN0b3JhZ2UuCkBAIC00ODIsNiArNDg0LDcg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVTY29wZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fYXJndW1lbnRzU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZSk7CisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1
Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmFtZVNj
b3BlU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FyZ3VtZW50
c1N0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVj
dHVyZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBz
b29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCisgICAgICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyAvLyBUaGlzIGdl
dHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRl
IHRvIGhhdmUgYSBiYWQgdGltZS4KICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9h
cnJheVN0cnVjdHVyZUZvclNsb3dQdXQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlOwpAQCAtMjYxLDcgKzI2Miw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmUqIG5hbWVTY29wZVN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZVNjb3BlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVj
dHVyZSogYXJndW1lbnRzU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNTdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgU3RydWN0dXJlKiBh
cnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2FycmF5U3Ry
dWN0dXJlV2l0aEFycmF5U3RvcmFnZS5nZXQoKTsgfQogICAgICAgICB2b2lkKiBhZGRyZXNzT2ZB
cnJheVN0cnVjdHVyZSgpIHsgcmV0dXJuICZtX2FycmF5U3RydWN0dXJlOyB9CisgICAgICAgIHZv
aWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIHsgcmV0dXJuICZt
X2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGJv
b2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Jvb2xlYW5PYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0NvbnN0cnVjdG9yU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQpAQCAtNDY2
LDcgKzQ2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0
cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaW5pdGlhbExlbmd0aCA/IGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgOiBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
KCksIGluaXRpYWxMZW5ndGgpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1
Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCArMTMxLDM5IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNl
OworICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGFy
Z2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgY3VycmVu
dFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGNvdW50
ID0gbmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1
cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAg
ICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
OyBjb3VudC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJl
bnRTb3VyY2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJy
ZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAg
ICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCk7IC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuIFdoeSBp
c24ndCB0aGlzIHB1YmxpY0xlbmd0aCgpPwogICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJy
ZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJm
bHk7CkBAIC0xNTgsNiArMTczLDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNp
dEJ1dHRlcgogICAgICAgICAKICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlh
dGUuCiAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwKQpAQCAtMjM0LDYgKzI1MiwxNSBAQCBib29sIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09i
amVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBzbG90
LnNldFZhbHVlKGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bGVuZ3RoKCkpCkBAIC0zNTEsNiArMzc4LDIyIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseTsKKyAgICAgICAgQVNTRVJUKGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA8
IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNP
YmplY3QsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChwcm9wZXJ0eU5hbWUgKyAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lIDwgYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbcHJvcGVydHlOYW1lXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC0zNjEs
MTUgKzQwNCwxOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0
b3JbcHJvcGVydHlOYW1lXTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CiAgICAgICAgIAorICAgICAgICBKU1ZhbHVlIG9sZCA9IHZhbHVlU2xvdC5nZXQoKTsK
KyAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZh
bHVlKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0lu
VmVjdG9yIGFzIG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBsZW5ndGgp
IHsKICAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnR5TmFtZSArIDE7CiAgICAgICAgICAgICBz
dG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQorICAgICAgICB9
IGVsc2UgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5hdHRlbXB0VG9D
b252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFn
ZSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC00NDMs
NiArNDg5LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKIHZv
aWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBOT1RF
OiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50LCBhcyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNv
bnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQorICAgICAgICAvLyB0aGlzIGNhc2UgaWYgd2Ug
ZXZlciBjYXJlZC4KKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDY1LDYgKzUxNiwyMyBAQCB2
b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0
KCktPmhhdmVBQmFkVGltZShnbG9iYWxEYXRhKTsKIH0KIAorV3JpdGVCYXJyaWVyPFVua25vd24+
KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFz
SW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOworICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5l
ZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJz
ZSgpKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0Vf
VkVDVE9SX0xFTik7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+
Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9y
TGVuZ3RoKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3Vv
dXMpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVj
dHVyZSk7CisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOworfQorCiBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKICAgICBJ
bmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKQEAgLTQ4
MCw3ICs1NDgsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAg
ICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7Ci0gICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlv
bigpKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2Vz
dGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0
YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC00OTAsMTYgKzU1OCwxMTkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlh
bEFycgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9W
RUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCit7CisgICAgQVNTRVJU
KGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisgICAg
dW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
U2l6ZSgpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFj
aXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgCisg
ICAgbWVtY3B5KAorICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eVNpemUsCisgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgIAorICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKG5lZWRlZExlbmd0
aCk7CisgICAgbmV3U3RvcmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3U3Rv
cmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9
IDA7CisgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IHB1YmxpY0xlbmd0aDsK
KyAgICBtZW1jcHkoCisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yLCBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpLCBwdWJsaWNMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRC
dXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJl
dHVybiBuZXdTdG9yYWdlOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJu
IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkt
PnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6
OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEFTU0VSVF9VTlVTRUQo
c3RvcmFnZSwgc3RvcmFnZSA9PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgIEFT
U0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
QVNTRVJUKCFzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOwor
ICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0KKyAgICAgICAgQnV0dGVyZmx5Ojpm
cm9tUG9pbnRlcihtX2J1dHRlcmZseS0+cG9pbnRlcigpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KDApKTsKKyAgICAKKyAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgCisgICAgbmV3QnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgocHVibGljTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHkt
PnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgICAgICAKKyAgICAvLyBTaGlmdCB0
aGUgbmFtZWQgcHJvcGVydGllcyBvdmVyLCBpZiB0aGVyZSBhcmUgc29tZS4KKyAgICBzaXplX3Qg
cHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICBpZiAocHJv
cGVydHlTaXplKSB7CisgICAgICAgIG1lbW1vdmUoCisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICAgICAgbV9idXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICAgICAgcHJvcGVy
dHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgfQorICAgIAorICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKK30KKworV3JpdGVC
YXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGlmIChV
TkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJlKCktPm5lZWRzU2xv
d1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBj
cmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgICAgIEFT
U0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgICAgICByZXR1
cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAg
CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGlmIChVTkxJS0VM
WShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRh
KTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0J1dHRlcmZs
eSogSlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0
cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6
ZnJvbUNvbnRpZ3VvdXMoY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMCkpOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQpAQCAtNTA3LDYgKzY3OCwxMCBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZpY2llbnQsIGlm
IHdlIGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hl
bkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKQEAgLTUyNiw2ICs3MDEsMTEgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBKU09iamVjdDo6
c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsK
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7CkBA
IC01NjksOCArNzQ5LDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0
YQogICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVj
dHVyZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogfQog
CiBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzA0LDYgKzg4MywxMiBAQCBib29s
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBUaGVyZSBpcyBhbiBl
eHRyZW1lbHkgb2J2aW91cyBjYXNlIHRoYXQgd2UgY291bGQgaGFuZGxlIGhlcmUgKGRlbGV0aW5n
IHRoZSBsYXN0IGVsZW1lbnQpCisgICAgICAgIC8vIGJ1dCBJIGRvbid0IGZlZWwgbGlrZSB3cml0
aW5nIHRlc3RzIGZvciBpdCwgc28gSSdsbCBwdW50IGl0LgorICAgICAgICB0aGlzT2JqZWN0LT5j
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlz
T2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtODc3LDYg
KzEwNjIsMTIgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAg
CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgb2JqZWN0LT5tX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAt
MTMzOCw2ICsxNTI5LDU3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW4KICAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKIH0KIAordm9p
ZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0
QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7
CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIAorICAgIC8vIEZv
ciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4gdGhlIHB1
YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0
b3IgbGVuZ3RoLgorICAgIEFTU0VSVChpID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIHx8
IGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBpZiAoaSA9PSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkgJiYgaSA8IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsK
KyAgICAgICAgQVNTRVJUKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgb25lIGNhc2Ugd2UgY2FuIGhhbmRsZS4gQW5kIHdlIGhhbmRsZSBp
dCBieSBncm93aW5nIHRoZSBjb250aWd1b3VzCisgICAgICAgIC8vIHN0b3JhZ2UuCisgICAgICAg
IHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKAorICAgICAgICAgICAgdGltZXNU
aHJlZVBsdXNPbmVEaXZpZGVkQnlUd28obV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSwKKyAg
ICAgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworICAgICAgICBtX2J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
cnVlLAorICAgICAgICAgICAgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSwKKyAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworICAgICAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1Zl
Y3Rvckxlbmd0aCk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEp
OworICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHB1dEJ5SW5kZXhXaXRo
b3V0QXR0cmlidXRlc1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhXaXRob3V0QXR0cmli
dXRlc1doaWxlQ29udmVydGluZ0NvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUo
KS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsK
KyAgICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgCisgICAgaWYgKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKSAmJiBpIDwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UsCisgICAgICAg
ICAgICBnZXROZXdWZWN0b3JMZW5ndGgobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpLCBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCksIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIEFTU0VSVChpID49
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsK
KyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgbWFwLT5wdXRFbnRy
eShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgZmFsc2UpOworfQorCiB2b2lkIEpTT2JqZWN0OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzUxLDYgKzE1OTMsMTAgQEAgdm9pZCBK
U09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICAgICAgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZ2xvYmFsRGF0YSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFpICYmICFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgeworICAg
ICAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMSlbMF0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB7CiAgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTEzNjIsNiArMTYwOCwxMSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAg
ICAgIC8vIE5vIG93biBwcm9wZXJ0eSBwcmVzZW50IGluIHRoZSB2ZWN0b3IsIGJ1dCB0aGVyZSBt
aWdodCBiZSBpbiB0aGUgc3BhcnNlIG1hcCEKQEAgLTEzODQsOCArMTYzNSwxMCBAQCB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJl
Y3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogewogICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQorICAgIAogICAgIC8vIGkg
c2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJy
ZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChhcnJheVN0b3JhZ2UoKSA9PSBzdG9yYWdlKTsKICAg
ICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSB8fCBhdHRyaWJ1dGVzKTsKICAg
ICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwogCkBAIC0xNDY5LDYgKzE3MjIsMTAgQEAg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNl
KCkgfHwgYXR0cmlidXRlcykKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGlmICghaSkgeworICAgICAgICAgICAgY3JlYXRl
SW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMSlbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIGlm
ICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBj
cmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwogICAgICAgICAKQEAgLTE0Nzcs
NiArMTczNCwxNSBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAg
ICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3Nvcikp
IHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0
ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwor
ICAgICAgICB9CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3Vz
V2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBhcnJheVN0b3JhZ2UoKSk7CkBA
IC0xNDk5LDEyICsxNzY1LDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0
TmV3VgogICAgIGVsc2UgaWYgKCFjdXJyZW50VmVjdG9yTGVuZ3RoKQogICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKICAgICBl
bHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAg
Ly8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAg
Ly8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3
TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50
ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGgg
KyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7CisgICAgICAgIGlu
Y3JlYXNlZExlbmd0aCA9IHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKGRlc2lyZWRMZW5n
dGgpOwogICAgIH0KIAogICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0
aCk7CkBAIC0xNTI0LDkgKzE3ODUsMTAgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVj
dDo6Z2V0TmV3VgogICAgICAgICB2ZWN0b3JMZW5ndGggPSAwOwogICAgICAgICBsZW5ndGggPSAw
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7
Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7
CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAg
ICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTU3NCw2ICsxODM2LDIyIEBA
IGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAordm9pZCBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c0xlbmd0aChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoaGFzQ29udGln
dW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAKKyAgICBpZiAobV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKSB7CisgICAgICAgIG1fYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSwKKyAgICAgICAgICAgIGxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAg
ICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CisgICAgfQorICAgIAorICAg
IGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgIG1fYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKK30KKwogQnV0dGVyZmx5KiBKU09iamVj
dDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXpl
KTsKQEAgLTE2MDIsNiArMTg4MCwxMyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzogeworICAgICAgICBpZiAoaSA+PSBvYmplY3QtPm1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKG9iamVjdC0+bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKSwgMCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bGVuZ3RoKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPmxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTE2MSw2ICsxNjIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIwNyw2ICsy
MDksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwg
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTgs
NiArMjIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlj
a2x5KHVuc2lnbmVkIGkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNjcs
NiArMjczLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
aSA8PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkKKyAgICAgICAgICAgICAgICAgICAgJiYg
aSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOwpAQCAtMjg1LDYgKzI5NCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpCisgICAgICAgICAgICAgICAgICAgICYmIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yOTYsMTUgKzMwOCwyNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChpIDw9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7
CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQor
ICAgICAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yW2ldOwotICAgICAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsK
KyAgICAgICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW9sZCkgewogICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0
aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW1w
dFRvQ29udmVydEFycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBzdG9yYWdlKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBkZWZhdWx0OgpAQCAtMzE1LDYgKzMzOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bGVuZ3RoKCkpOwpAQCAtMzMxLDYgKzM1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAg
ICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5T
cGFyc2VNb2RlKCk7CkBAIC01MjgsNiArNTU2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBmb28tPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoLi4uKTsKICAgICAg
ICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyAwIGlm
IGNvbnRpZ3VvdXMgc3RvcmFnZSBjYW5ub3QgYmUgY3JlYXRlZCAtIGVpdGhlciBiZWNhdXNlCisg
ICAgICAgIC8vIGluZGV4aW5nIHNob3VsZCBiZSBzcGFyc2Ugb3IgYmVjYXVzZSB3ZSdyZSBoYXZp
bmcgYSBiYWQgdGltZS4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250
aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKExJS0VMWShoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3coZ2xvYmFsRGF0
YSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmpl
Y3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLiBVc2UKICAgICAgICAg
Ly8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2
ZSByZXF1aXJlZCB0aGUKICAgICAgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZl
IGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CkBAIC01NDAsNiArNTc4LDQwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZVNs
b3coZ2xvYmFsRGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIEJ1dHRlcmZseSog
ZW5zdXJlSW5kZXhlZFN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUluZGV4ZWRTdG9yYWdlU2xv
dyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdCB0
byBjb252ZXJ0IHRvIGNvbnRpZ3VvdXMgaW5kZXhpbmcgc3RvcmFnZS4gUmV0dXJucyB0cnVlIGlm
IGl0IHdhcyBkb25lLAorICAgICAgICAvLyBvciBmYWxzZSBpZiBpdCBiYWlsZWQgb3V0IGZvciBh
bnkgcmVhc29uLiBBbHNvIHJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgd2FzIGFscmVhZHkKKyAg
ICAgICAgLy8gY29udGlndW91cy4KKyAgICAgICAgYm9vbCBhdHRlbXB0VG9Db252ZXJ0VG9Db250
aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiAhIWVuc3Vy
ZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0Nv
bnRpZ3VvdXMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAg
ICAgCiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKQEAgLTYwMiwx
MSArNjc0LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEFycmF5U3RvcmFnZSogY3Jl
YXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNy
ZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CiAgICAg
ICAgIAogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAg
ICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCisgICAgICAg
IHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmli
dXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwogICAgICAg
ICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywg
QXJyYXlTdG9yYWdlKik7CiAKICAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwpAQCAtNjE3LDcgKzY5NCw0MCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29y
cyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJj
ZXB0UHV0QnlJbmRleE9uSG9sZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91
IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRvIHN1Y2NlZWQgYW5kIHlvdSdyZSBzdXJlIHRoYXQKKyAg
ICAgICAgLy8gdGhlIGFycmF5IGlzIGNvbnRpZ3VvdXMuCisgICAgICAgIHZvaWQgZW5zdXJlQ29u
dGlndW91c0xlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOwogCisgICAgICAg
IGJvb2wgYXR0ZW1wdFRvQ29udmVydEFycmF5U3RvcmFnZVRvQ29udGlndW91cyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSAhPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2Uo
KSk7CisgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0
b3JhZ2VUb0NvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgc3RvcmFnZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgYXR0ZW1wdFRvQ29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VU
b0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQoIXNob3VsZFVzZVNs
b3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQo
IXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAgIC8vIE9oLCB5b3UgZGlkIHRoaXMg
Y29udmVyc2lvbiBiZWZvcmU/IFdlbGwsIHlvdSBkb24ndCBnZXQgdG8gZG8gaXQgYWdhaW4uIEJl
Y2F1c2UKKyAgICAgICAgICAgIC8vIHRocmFzaGluZyBpcyBuZXZlciBnb29kLgorICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgJiBIYWRB
cnJheVN0b3JhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Ly8gT2gsIHlvdSd2ZSB1c2VkIHNoaWZ0IGFuZCB1bnNoaWZ0PyBDaGFuY2VzIGFyZSB5b3UnbGwg
dXNlIGl0IGFnYWluLCBhbmQgd2UnbGwgaGF2ZQorICAgICAgICAgICAgLy8gdG8gY29udmVydCBi
YWNrLiBObyBjb250aWd1b3VzIGFycmF5cyBmb3IgeW91IQorICAgICAgICAgICAgaWYgKHN0b3Jh
Z2UtPm1faW5kZXhCaWFzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEs
IHN0b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKICAgICAgICAgCkBAIC02NDIsNiArNzUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFy
cmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7
CiAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGRvdWJsZXMgYXMgcHV0RGlyZWN0KCkgYmVjYXVz
ZSAoYSkgY29udGlndW91cyBpbXBsaWVzIHRoYXQgdGhlcmUgYXJlIG5vdCBpbmRleGVkIHNldHRl
cnMgb3IgaW5kZXhlZCByZWFkb25saWVzLCBhbmQgKGIpIHRoaXMgaXMgb25seSBmb3IgY2FzZXMg
d2hlcmUgd2UgZG9uJ3Qgd2FudCB0aGUgcHJvcGVydHkgdG8gaGF2ZSBhbnkgYXR0cmlidXRlcy4K
KyAgICAgICAgdm9pZCBwdXRCeUluZGV4V2l0aG91dEF0dHJpYnV0ZXNXaGlsZUNvbnZlcnRpbmdD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKTsKKyAgICAgICAgCiAgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwogICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSwgQXJyYXlTdG9y
YWdlKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOwpAQCAtNjUxLDggKzc2
NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJl
Q29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgQnV0dGVyZmx5KiBl
bnN1cmVJbmRleGVkU3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAorICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9D
b250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChF
eGVjCiAKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNpemUgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0g
MjU2OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhp
cykKQEAgLTIxMyw5ICsyMTMsMTIgQEAgY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKSBjb25z
dAogICAgICAgICB1LmFzRG91YmxlID0gYXNEb3VibGUoKTsKICAgICAgICAgc25wcmludGYoZGVz
Y3JpcHRpb24sIHNpemUsICJEb3VibGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sx
XSwgdS5hc1R3b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYg
KGlzQ2VsbCgpKQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVw
IiwgYXNDZWxsKCkpOwotICAgIGVsc2UgaWYgKGlzVHJ1ZSgpKQorICAgIH0gZWxzZSBpZiAoaXND
ZWxsKCkpIHsKKyAgICAgICAgc25wcmludGYoCisgICAgICAgICAgICBkZXNjcmlwdGlvbiwgc2l6
ZSwgIkNlbGw6ICVwICglcDogJXMsICVzKSIsCisgICAgICAgICAgICBhc0NlbGwoKSwgYXNDZWxs
KCktPnN0cnVjdHVyZSgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5jbGFz
c05hbWUsCisgICAgICAgICAgICBpbmRleGluZ1R5cGVUb1N0cmluZyhhc0NlbGwoKS0+c3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgfSBlbHNlIGlmIChpc1RydWUoKSkKICAgICAg
ICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJUcnVlIik7CiAgICAgZWxzZSBpZiAoaXNG
YWxzZSgpKQogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkZhbHNlIik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlz
aW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMywxMSArMzIzLDE1IEBAIGJvb2wgU3RydWN0dXJlOjph
bnlPYmplY3RJbkNoYWluTWF5SW50ZXIKICAgICB9CiB9CiAKLU5vblByb3BlcnR5VHJhbnNpdGlv
biBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpIGNvbnN0Citib29sIFN0
cnVjdHVyZTo6bmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdAogewotICAgIEFTU0VSVCghaGFz
SW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAKLSAgICBpZiAoYW55T2Jq
ZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIHx8IGdsb2JhbE9iamVjdCgp
LT5pc0hhdmluZ0FCYWRUaW1lKCkpCisgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKQorICAgICAgICB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZp
bmdBQmFkVGltZSgpOworfQorCitOb25Qcm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdn
ZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobmVlZHNTbG93
UHV0SW5kZXhpbmcoKSkKICAgICAgICAgcmV0dXJuIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFn
ZTsKICAgICAKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI5NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1Miw3ICsxNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGJv
b2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0Owog
ICAgICAgICAKLSAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEluZGV4aW5n
VHJhbnNpdGlvbigpIGNvbnN0OworICAgICAgICBib29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKCkg
Y29uc3Q7CisgICAgICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3Jh
Z2VUcmFuc2l0aW9uKCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAg
ICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRh
LCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24g
MTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaQogLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1
c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCiAv
LyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5
IHNob3VsZCBiZSAwLgogZW51bSBOb25Qcm9wZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRl
Q29udGlndW91cywKKyAgICBTd2l0Y2hUb0NvbnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0
b3JhZ2UsCiAgICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZSwKQEAgLTU3LDEyICs1OSwxOSBAQCBpbmxpbmUgdW5zaWduZWQgdG9B
dHRyaWJ1dGVzKE5vblByb3BlcnR5CiBpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlw
ZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24p
CiB7CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3Vv
dXM6CisgICAgICAgIEFTU0VSVCghKG9sZFR5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xv
d1B1dEFycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1
b3VzOworICAgIGNhc2UgU3dpdGNoVG9Db250aWd1b3VzOgorICAgICAgICBBU1NFUlQob2xkVHlw
ZSAmIEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNBcnJh
eVN0b3JhZ2UpIHwgKEhhc0NvbnRpZ3VvdXMgfCBIYWRBcnJheVN0b3JhZ2UpOwogICAgIGNhc2Ug
QWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQXJyYXlT
dG9yYWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNB
cnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgIHJldHVybiBvbGRUeXBlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0
dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsK
ICAgICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgQVNTRVJUKG9s
ZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgSGFz
Q29udGlndW91cykpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQXJyYXlTdG9yYWdl
KSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBZGRJbmRleGVkQWNjZXNzb3Jz
OgogICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwpJbmRl
eDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL1dURi93dGYvTWF0
aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE2IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBib29sIGhhc1R3b08KICAgICByZXR1cm4gIWhhc1plcm9Pck9uZUJp
dHNTZXQodmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCB0aW1lc1Ro
cmVlUGx1c09uZURpdmlkZWRCeVR3byhUIHZhbHVlKQoreworICAgIC8vIE1hdGhlbWF0aWNhbGx5
IGVxdWl2YWxlbnQgdG86CisgICAgLy8gICAodmFsdWUgKiAzICsgMSkgLyAyOworICAgIC8vIG9y
OgorICAgIC8vICAgKHVuc2lnbmVkKWNlaWwodmFsdWUgKiAxLjUpKTsKKyAgICAvLyBUaGlzIGZv
cm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgIHJldHVybiB2YWx1ZSAr
ICh2YWx1ZSA+PiAxKSArICh2YWx1ZSAmIDEpOworfQorCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYm
ICFDT01QSUxFUihSVkNUKSAmJiAhT1MoU09MQVJJUykKIHVzaW5nIHN0ZDo6aXNmaW5pdGU7CiAj
aWYgIUNPTVBJTEVSX1FVSVJLKEdDQzExX0dMT0JBTF9JU0lORl9JU05BTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166379</attachid>
            <date>2012-09-29 23:14:27 -0700</date>
            <delta_ts>2012-10-04 19:46:40 -0700</delta_ts>
            <desc>it sort of works</desc>
            <filename>contiguous_patch_11.diff</filename>
            <type>text/plain</type>
            <size>230042</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0wOS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSgpIGlnbm9yZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
ZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcHJldmVudGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDcgQEAKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENENEM0MTVGNkI2QkIw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8q
IExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjEz
RTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAv
KiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNjAxNUQx
NTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNjAxNUExNTYx
OThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9
OwogCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTYzLDYgKzE2NCw3IEBACiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0QzE0QzNDRDQzMDA3
QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYwMjAwMDQ3MkE5IC8qIERGR0J5dGVDb2Rl
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIg
LyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsg
fTsKIAkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3
RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdE
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9OwpAQCAtODQ1LDYgKzg0Nyw3IEBACiAJCTBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQzQ1
ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1v
blNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5
OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdD
IC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkzMyw2ICs5MzYsNyBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNh
bXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0
MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBh
dGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEwMiw3ICsyMTA2
LDYgQEAKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlw
ZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAotCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5
Q2FsbGJhY2suaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0
dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVy
LmggKi8sCkBAIC0yMTEwLDYgKzIxMTMsNyBAQAogCQkJCTkzM0EzNDlBMDM4QUU3QzYwMDg2MzVD
RSAvKiBJZGVudGlmaWVyLmggKi8sCiAJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVyLmggKi8sCiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAv
KiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKQEAgLTIyNjcsNiArMjI3MSw3IEBACiAJCQkJMTRC
RkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLAogCQkJCTE0MjBCRTdBMTBB
QTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAw
OTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0
NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1l
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0NzIsNTYgKzI0NzcsNTcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
aCAqLywKLQkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5j
cHAgKi8sCi0JCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIu
aCAqLywKLQkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKLQkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAotCQkJCTBGQjU0Njc2MTRGNTlB
RDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAogCQkJCTBGMjFDMjdF
MTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8sCi0JCQkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCi0JCQkJMEYyQkRD
MkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5
RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKKwkJCQkwRjgwMjNFOTE2MTM4
MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCisJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1
QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCisJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlk
U3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTcxNENBN0RDMTAwODVGM0M2IC8qIE1ldGhvZENhbGxM
aW5rU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5ODE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9k
Q2FsbExpbmtTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuaCAqLywKLQkJCQkwRkY0Mjc2RTE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUds
b2JhbFN0YXR1cy5jcHAgKi8sCi0JCQkJMEZGNDI3NkYxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29s
dmVHbG9iYWxTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggKi8sCiAJCQkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi8sCi0JCQkJMEYwQjgzQjYxNEJDRjhERjAwODg1
QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCi0JCQkJMEYwQjgzQjIxNEJDRjg1RTAwODg1
QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5jcHAgKi8sCi0JCQkJMEYwQjgzQjMxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovLAotCQkJCTBGMEI4M0FFMTRCQ0Y3MTQw
MDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAotCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywKLQkJCQlGRUI2M0FBMjE1OUI5REEzMDA4OTMyQTYg
LyogQ29tbWVudC5oICovLAotCQkJCTBGMEI4M0FDMTRCQ0Y2MDIwMDg4NUI0RiAvKiBMaW5lSW5m
by5oICovLAotCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJ
bmZvLmggKi8sCi0JCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmgg
Ki8sCi0JCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCiAJCQkJ
OTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi8sCiAJCQkJOTY5QTA3
OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGQkQ3RTY3MTQ0Nzk5
OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8sCisJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1
QjRGIC8qIENvZGVUeXBlLmggKi8sCisJCQkJRkVCNjNBQTIxNTlCOURBMzAwODkzMkE2IC8qIENv
bW1lbnQuaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovLAogCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAg
Ki8sCiAJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8s
CiAJCQkJOTY5QTA3OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKKwkJ
CQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCisJ
CQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKKwkJ
CQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLAor
CQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJ
CQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovLAorCQkJCTBG
MEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oICovLAorCQkJCTBG
MEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAogCQkJCTk2OUEwNzkz
MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCUJDRkQ4QzkwMEVFQjJF
RTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovLAogCQkJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuaCAqLywKKwkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAorCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAorCQkJCTBGMEI4M0FDMTRCQ0Y2
MDIwMDg4NUI0RiAvKiBMaW5lSW5mby5oICovLAorCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1
NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAorCQkJCTBGMEI4M0IyMTRCQ0Y4NUUwMDg4NUI0
RiAvKiBNZXRob2RDYWxsTGlua0luZm8uY3BwICovLAorCQkJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4
NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAqLywKKwkJCQkwRjkzMzI5NzE0Q0E3REMxMDA4
NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk4MTRDQTdE
QzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICovLAorCQkJCTBGQjU0NjdDMTRG
NUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKKwkJ
CQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oICovLAogCQkJCTk2OUEwNzk0MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwICovLAog
CQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKLQkJCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovLAotCQkJCTBGRDgyRTRG
MTQxREFFQTEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oICovLAorCQkJCTBGMkJEQzJCMTUx
RkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAorCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKKwkJCQkwRjlGQzhDMDE0RTFC
NUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAorCQkJCTBGOTMzMjk5
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAorCQkJCTBGOUZDOEMxMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCisJCQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZG
IC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwICovLAorCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRD
QjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggKi8sCiAJCQkJMTQyOUQ4ODMwRUQyMUMzRDAw
Qjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgKi8sCiAJCQkJMTQyOUQ4ODQwRUQyMUMzRDAwQjg5
NjE5IC8qIFNhbXBsaW5nVG9vbC5oICovLAorCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAv
KiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8sCisJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8q
IFNwZWN1bGF0ZWRUeXBlLmggKi8sCisJCQkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0
cnVjdHVyZVNldC5oICovLAogCQkJCTBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRjc2NkQzNzE1QUU0QTFBMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oICovLAogCQkJCUJDQ0Yw
RDBCMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgKi8sCkBAIC0yOTQ5
LDYgKzI5NTUsNyBAQAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgwMjNFQTE2MTM4
MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zNTU0LDYgKzM1NjEsNyBA
QAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhp
bmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikKKyAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2p1bXBzLmFw
cGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1fanVtcHMuc2l6ZSgpKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAoKSk7
CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hU
ZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1bXAo
TGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisjZGVm
aW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5
cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsKKwor
aW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRB
cnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJy
YXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAgQnlW
YWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
CisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJhZFR5
cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAg
ICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkp1
bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5
IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGludDE2
X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0
aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworaW5saW5l
IHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZvKQorewor
ICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgpAQCAtMjA5LDYgKzIxMCwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBy
ZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFsSW5m
byYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRCeVZh
bEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNp
emUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAg
ICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNl
dE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1
YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1
YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9zLmdy
b3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0IHsg
cmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbElu
Zm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAgICAg
ICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZh
bEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTksMTcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01P
REVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMyw5IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkxNSw2ICs5MjMsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBQdXRCeVZhbDoK
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAg
ICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBz
d2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsKQEAgLTkyNCwxMSArOTMzLDE4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
ICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzODMsOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1P
UlBISUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlM
ZW5ndGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmlu
Z2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRy
YWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0
LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBB
cnJheTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAg
ICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5
U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1
dCBtb2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBk
b24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1
ZXNzaW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5
OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1h
eVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZl
ID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6
CkBAIC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxl
KiBwCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Up
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJy
YXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgor
ICAgICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7
CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAh
cHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVu
ZGVjaWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwy
MiBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9m
Qm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSAmIElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChB
YnN0cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAg
ICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CkBAIC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9k
ZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091
dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1Rv
VGFpbCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAg
ICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRv
SG9sZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJh
eTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAg
ICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAi
QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAi
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsK
ICAgICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRp
Z3VvdXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMs
CisgICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
LAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAor
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3Rv
cmFnZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwK
QEAgLTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwg
aW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBC
bGFua1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2Us
CisgICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9y
YWdlLiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3Rv
cmFnZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAt
ODksNiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3Jh
Z2UiIGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3Rpbmcg
Y2hlY2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJv
dW5kczogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhf
Q09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9D
T05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGln
dW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNf
VE9fVEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29u
dGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9V
VF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMKICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVm
aW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCisjZGVmaW5lIElO
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZp
bmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRv
SG9sZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JB
R0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwogCiAv
LyBOZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIEVGRkVD
VEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgIFwK
KyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAg
ICAgXAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUwotI2RlZmlu
ZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAorI2RlZmluZSBTTE9X
X1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICBcCiAgICAgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfRUZGRUNURlVMX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBI
SUNfRUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhlbHBlcnMgZm9yIHBvbHltb3JwaGlj
IGFycmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9QT0xZTU9SUEhJ
Q19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19F
RkZFQ1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9M
WU1PUlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSos
IEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNl
c0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZs
eShBcnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUg
YXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQog
ewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFS
UkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4
ICsyNDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAg
IH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
KQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RB
SUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1P
UlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNh
c2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgbW9kZUlz
UG9seW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wg
cG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRl
c0FycmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNF
RChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0
cnVlOworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtMjA0LDYgKzMwNiw3IEBAIGlubGlu
ZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OSw3ICszNTIsMTEg
QEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzoKICAgICBj
YXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKQEAgLTI3Myw3
ICszODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBCiBpbmxp
bmUgYm9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTcxLDYgKzE1NzEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRv
R3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0xNTk0LDYgKzE1OTYsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDkgKzM1OSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBw
cm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZh
bC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgot
ICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rp
bmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSAr
MTIxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAg
IGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0u
cHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFn
ZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4
KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVk
c1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwg
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9Ob2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5v
ZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEz
NywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNo
aWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIDMpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAg
ICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2Rl
IGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wg
KCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRl
eCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFn
ZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQobW9k
ZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihh
cnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAg
ICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUp
LCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlp
ZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAg
ICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2UgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0
ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2Ug
aXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCArNDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9y
YWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRn
ZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQogICAgIHsKICAgICAgICAgaWYgKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9
PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2Rl
IGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAgICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4
ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUgKzQzMywyNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRl
eCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
ICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9m
aWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgp
KTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5v
ZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGlu
ZGV4LmluZGV4VW5jaGVja2VkKCkpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9n
cmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVk
Z2Uoc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQogICAgIH0KICAg
ICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJ
R1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgog
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xP
V19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01P
REVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4g
bm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3Rpbmcg
dmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgp
KTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBh
cnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEzMDks
NiArMTMwNSwxNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2NoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERh
dGEsIGV4ZWMpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmpl
Y3QtPmVuc3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwpAQCAtMTMxNyw2ICsxMzIxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uRW5zdXJlQXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0
LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworCisgICAgaWYgKGluZGV4KQorICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmpl
Y3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91YmxlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAg
ICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQq
LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdP
cGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RaKShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0
YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0xMTAsNiArMTEw
LDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwg
SlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9u
X0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVBT
KShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElP
TiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBAIC0xOTIsNyAr
MTkzLDkgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUq
LCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxD
YXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFn
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwg
SlNPYmplY3QqKTsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9y
YWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QpOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24g
aGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBs
b2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9w
ZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0
Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBzdGF0aWMgYm9v
bCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7IAogICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBI
YXNDb250aWd1b3VzKSkpOwogICAgICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksMTAgKzIx
MDksMTE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9
CiB9CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVn
KTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwg
R1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVz
dWx0UmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91
c1B1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcg
c3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJh
eTo6TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgaWYgKCFtYXlTdG9yZVRvVGFp
bChhcnJheU1vZGUpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZywgdGVtcFJlZyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CisKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAKKyAgICBp
ZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlW
YWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdl
UmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2Rl
IGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlv
bmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nl
c3MoYXJyYXlNb2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlm
IHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZl
Y3Rvci4KKyAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8g
VGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRo
ZSBiYXNlbGluZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9s
ZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxp
bmcuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2Vz
cyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4g
SWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQK
KyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29y
dGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8vIGFs
cmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGVtcFJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5
OyAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBk
YXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9w
ZXJ0eVJlZywgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVk
VXBkYXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICBub3RIb2xlVmFsdWUubGlu
aygmbV9qaXQpOworICAgIH0KKyAgICAgICAgICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0
byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAg
CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCisgICAgCiAg
ICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgaW5pdENvbnN0
YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7CkBAIC0yNTk1LDYgKzI2OTksNTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5j
aGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
T05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05U
SUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RF
UzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZh
bChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcs
IHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hp
bGQzKCkpOwpAQCAtMjYxNSw2ICsyNzYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19Q
VVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yNjI3LDIxICsyNzc2LDY1
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAg
ICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBTExfUE9M
WU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkp
OwotCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGhvbGUpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVD
YXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXND
b250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxU
aHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9k
ZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhh
c0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGls
ZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdl
UmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxs
VGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50
LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgpAQCAtMjczNSw4ICsyOTI4LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVT
OgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogewogICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAg
R1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBAIC0yNzU2LDU5ICsyOTQ5LDc2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAv
LyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJl
eW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChpc0lu
Qm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7
Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBz
byBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAgICAgICAgaWYgKCFtYXlTdG9yZVRvSG9sZShh
cnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNh
dXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKLSAgICAgICAg
ICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVy
ZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAgICAgICAgICAgLy8gcHJvZmlsaW5nLgotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSkpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xl
VmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2Fu
dGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0
aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQotICAgICAgICAgICAgICAgICAg
ICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAgICAgICAgICAgICAgICAgICBpc0hv
bGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFy
cmF5OyAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9l
c05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1w
b3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZSk7CisKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNv
bXBpbGVDb250aWd1b3VzUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKwor
ICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJl
eW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1
bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZG
RUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIGNoaWxkMyk7CisKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOworICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgaWYgKEhlYXA6Omlz
V3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVl
LmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdw
cigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOworCisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsK
KyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRl
bXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAg
Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZyk7
CisKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsK
ICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKLQot
ICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KLSAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotCi0gICAgICAgICAgICBpZiAoIWlz
SW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChiZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2Vz
cyhhcnJheU1vZGUpKQotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGlzSG9s
ZVZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHko
KSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsCkBAIC0yODIwLDYgKzMwMzAsNjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgQVNT
RVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVn
ID0gdGVtcG9yYXJ5LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxU
aHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcG9yYXJ5UmVnKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wb3JhcnlSZWcsIFN0cnVjdHVy
ZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wb3JhcnlSZWcpOworICAgICAgICAgICAgaWYg
KHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBm
YWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQ
dXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcs
IHRlbXBvcmFyeVJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3Jw
aGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25l
Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJv
dWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFs
bFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBv
cmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRC
eVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRl
bXBvcmFyeVJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJv
dWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOworCisgICAgICAgICAgICBiYXNl
LnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51
c2UoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9y
IG5vdCB3ZSdyZSBpbiBzdHJpY3QgbW9kZSBzaG91bGQgYmUgbWFkZQorICAgICAgICAgICAgLy8g
YmFzZWQgb24gdGhlIGlubGluZSBjYWxsIGZyYW1lLCBub3QgdGhlIG1hY2hpbmUgY29kZSBibG9j
ay4KKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJh
c2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBjaGlsZDMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBA
IC0yOTczLDI2ICszMjQwLDU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQub3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgIC8vIFJl
ZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZm
ZmUpKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OworICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQ
UiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5z
dG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAg
ICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAot
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAotICAgICAg
ICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAg
ICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVu
Z3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3Ro
R1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMDAyLDQxICszMjk3
LDcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHZhbHVlKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0
aCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhH
UFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAg
ICAgICAgLy8gRklYTUU6IEFycmF5UG9wIGluIGNvbnRpZ3VvdXMgbW9kZSBoYXMgbm8gY2hhbmNl
IG9mIHNpZGUgZWZmZWN0cy4gV2Ugc2hvdWxkIHRha2UKKyAgICAgICAgICAgIC8vIGFkdmFudGFn
ZSBvZiB0aGlzLCBzb21laG93LgorICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5l
ZENhc2UgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
UiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhN
b3ZlKAorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlzLAorICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRo
aXMpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3Ro
LmdwcigpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmlu
ZWRDYXNlczsKLSAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOworICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOworICAgICAgICAgICAg
c2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFs
dWVHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKIAotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKKyAgICAgICAgICAg
IHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAg
bV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2pp
dC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZh
bHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVk
Q2FzZXMsIHRoaXMsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgK
KyAgICAgICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCisgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBz
bG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7Cisg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJh
eVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVl
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BS
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zMjEwLDgg
KzM1MzQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlKCksIHNpemVHUFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0U2NyYXRjaEdQUihz
aXplR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90RW1wdHkgPSBtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNpemVHUFIpOworICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwg
c3RydWN0dXJlR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAgICAgbm90RW1wdHkubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0
b3JhZ2UoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwg
c3RydWN0dXJlR1BSLCBzaXplR1BSKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDYgKzMxNSw0MSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjaGVja0FycmF5KE5vZGUmIG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAg
ICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVh
azsKKyAgICBjYXNlIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIEdQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFSUkFZ
X1dJVEhfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5s
b2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJuZWQg
aW50byBhIHNpbmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5jZQor
ICAgICAgICAvLyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJIGZl
ZWwgY29tZm9ydGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVyYWdl
IGZvciB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRl
bXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSGFzQ29udGlndW91cykpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBjYXNlIE5PTl9BUlJBWV9B
UlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwog
ICAgICAgICBtX2ppdC5sb2FkUHRyKApAQCAtMzUyLDYgKzM4NywyOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjaGVja0FycmF5KE5vZGUmIG5vCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVT
OiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXBHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHR1cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4g
QnV0IHdlIGN1cnJlbnRseSBoYXZlIG5vIGV2aWRlbmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcg
c28gd291bGQgYmUgcHJvZml0YWJsZSwgbm9yIGRvIEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRo
ZSBwcmVzZW50IHRlc3QKKyAgICAgICAgLy8gY292ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgICAg
ICAgICAgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpID8g
SGFzQ29udGlndW91cyA6IDApCisgICAgICAgICAgICAgICAgICAgIHwgKHBvbHltb3JwaGljSW5j
bHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkgPyBIYXNBcnJheVN0b3JhZ2UgOiAw
KSkpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4
cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3VtZW50czo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAg
LTM5MCw3MiArNDQ4LDk4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5v
ZGUKICAgICBBU1NFUlQoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAKKyAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAgCiAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZ
X0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0
aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBz
dHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAg
ZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5k
ZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRl
eGluZ1R5cGVNYXNrID0gSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5
U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3Vz
IHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBDUkFTSCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgR1BSVGVtcG9yYXJ5
IHN0cnVjdHVyZSh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0dXJlR1BSKTsKICAgICAgICAgCi0gICAgICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNv
bWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEluZGV4
aW5nVHlwZSBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9Ci0gICAgICAgICAgICBpc1Nsb3dQdXRB
Y2Nlc3Mobm9kZS5hcnJheU1vZGUoKSkgPyAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFy
cmF5U3RvcmFnZSkgOiBIYXNBcnJheVN0b3JhZ2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVy
ZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSk7CisgICAg
Ly8gV2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJy
YXkgc3RvcmFnZS4KKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJy
YW5jaFRlc3Q4KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5k
ZXhpbmdUeXBlTWFzaykpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHRlbXBHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwogICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgIHNsb3dD
YXNlLmxpbmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0
aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2Vz
LAotICAgICAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKKyAgICAvLyBO
ZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nl
c3Nlcy4gSWYgaXQgZG9lcywKKyAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgorICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1
Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKICAgICAgICAgCi0gICAgICAgIC8v
IE5vdyBjYWxsIG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIC8vIE5vdyBjYWxsIG91dCB0byBjcmVh
dGUgdGhlIGFycmF5IHN0b3JhZ2UuCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQ
Uik7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgY2FzZSBBcnJheTo6Qmxh
bmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29u
dGlndW91cywgdGVtcEdQUiwgYmFzZVJlZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlT
dG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyh0ZW1wR1BSKTsKLQotICAgICAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgc3Ry
dWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKLSAgICAgICAgLy8g
dGVtcG9yYXJpZXMuIE5vciB3b3VsZCBpdCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRo
ZXIgd2F5IHdlJ3JlIHRhbGtpbmcKLSAgICAgICAgLy8gYWJvdXQgYSBsb2FkLgotICAgICAgICBt
X2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIAot
ICAgICAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkg
c3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGlzIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0
aGUgCi0gICAgICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMg
YXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4KLSAgICAgICAgLy8gVGhhdCdzIGZpbmUs
IHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCi0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5
cGVNYXNrKSkpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IHN0b3JhZ2VSZXN1bHQodGVtcEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
LSAgICB9CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNI
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHRl
bXBHUFIpOworCisgICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBi
ZWNhdXNlIHNpbGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCisgICAgLy8gdGVtcG9yYXJpZXMu
IE5vciB3b3VsZCBpdCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRoZXIgd2F5IHdlJ3Jl
IHRhbGtpbmcKKyAgICAvLyBhYm91dCBhIGxvYWQuCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgIC8vIEZpbmFsbHksIGNoZWNrIHRo
YXQgd2UgaGF2ZSB0aGUga2luZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdl
dC4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVj
aywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAorICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlvbiBj
b3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4KKyAg
ICAvLyBUaGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJs
ZS4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sp
KSk7CisgICAgICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIHN0b3JhZ2VSZXN1bHQo
dGVtcEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0zMjA1LDEyICszMjg5LDIzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJy
YXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBB
UlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09O
VElHVU9VU19NT0RFUzogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2Up
OwogICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJl
c3VsdFJlZyk7CisgICAgICAgICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZTogeworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0
b3JhZ2UpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIApAQCAtMzM5OSw2ICszNDk0LDE2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzdG9yYWdlUmVz
dWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKK0dQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFy
eSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIGlmICghcHV0QnlWYWxXaWxsTmVlZEV4
dHJhUmVnaXN0ZXIoYXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Cisg
ICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlYWxUZW1wb3JhcnkodGhpcyk7CisgICAgdGVtcG9yYXJ5
LmFkb3B0KHJlYWxUZW1wb3JhcnkpOworICAgIHJldHVybiB0ZW1wb3JhcnkuZ3ByKCk7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjk2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCitjbGFzcyBHUFJUZW1wb3Jhcnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNs
b3dQYXRoR2VuZXJhdG9yOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0xMTY2LDYgKzExNjcs
MTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
b2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPWiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKKyAgICB7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAg
LTEyMTgsMTEgKzEyMjQsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNp
emUpKTsKQEAgLTE0NjgsNiArMTQ3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBp
bnQzMl90IGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOwpAQCAtMTUzMSwxMSArMTU0NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNp
emUpKTsKQEAgLTIxNDksNiArMjE3MCw0MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVn
IHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2Rl
JiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcs
IEdQUlJlZyByZXN1bHRSZWcpOworICAgIAorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJh
UmVnaXN0ZXIoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICAgICAgLy8gRm9yIEFycmF5U3RvcmFnZSwgd2UgbmVlZCBhbiBleHRy
YSByZWcgZm9yIHN0b3JlcyB0byBob2xlcyBleGNlcHQgaWYKKyAgICAgICAgLy8gd2UncmUgaW4g
U2xvd1B1dCBtb2RlLgorICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoK
KyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gRm9yIENvbnRpZ3VvdXMsIHdlIG5l
ZWQgYW4gZXh0cmEgcmVnIGZvciBhbnkgYWNjZXNzIHRoYXQgbWF5IHN0b3JlCisgICAgICAgIC8v
IHRvIHRoZSB0YWlsLgorICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAg
ICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAKKyAgICAgICAgLy8gQWxsIHBvbHltb3JwaGljIG1vZGVzIG5lZWQgYW4g
ZXh0cmEgcmVnLgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgR1BSUmVnIHRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiwgQXJyYXk6Ok1vZGUpOworICAgIEdQ
UlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5
LCBOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9y
UHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlLmFycmF5TW9kZSgpKTsKKyAgICB9CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJl
ZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcg
dmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVn
IHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcg
dGVtcFJlZyk7CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CiAg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAKICAgICBt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7CisgICAgbV9ieVZhbEluc3RydWN0
aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCA9IDA7CiAgICAgbV9j
YWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC03MzgsNiArNzM5LDIwIEBAIEpJVENvZGUg
SklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICBtX2NvZGVCbG9jay0+c2V0TnVt
YmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5z
aXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5m
byhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkJ5VmFsSW5m
b3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CisgICAgICAgIENv
ZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5iYWRUeXBlSnVtcCkpOworICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRvbmVUYXJnZXQpOworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZh
bENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRhcmdldCk7CisgICAgICAgIENvZGVMb2NhdGlv
bkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBp
bGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJs
b2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisgICAgICAgICAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBiYWRUeXBlSnVtcCwKKyAg
ICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uYXJyYXlNb2RlLAorICAgICAgICAg
ICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJhZFR5cGVKdW1wLCBkb25lVGFyZ2V0KSwKKyAg
ICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihyZXR1cm5BZGRyZXNzLCBzbG93UGF0
aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygp
OyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxM
aW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTI5Njky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb3B5VG9TdHVi
SW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1ZmZlciAmcGF0Y2hCdWZmZXIpOwog
ICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxhdGlvbkluZm8geworICAgICAgICBCeVZh
bENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAKKyAgICAgICAgQnlWYWxDb21waWxhdGlv
bkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBkb25lVGFyZ2V0KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpCisgICAgICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAgICAg
LCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAgICAgLCBkb25lVGFyZ2V0KGRvbmVUYXJn
ZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlw
ZUp1bXA7CisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
c2xvd1BhdGhUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHJldHVybkFkZHJl
c3M7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvIHsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhlcjsKQEAgLTM0OCw2ICszNjcsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0
QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjYWNo
ZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlWYWwoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7
CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChieVZhbEluZm8sIHJldHVy
bkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlUHV0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGpp
dChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZz
ZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
VHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAgICAgICAgIHsKQEAgLTM5Nyw2ICs0
MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2Fj
aGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwg
c2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyLCBDYWxsRnJhbWUqKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0
dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJldHVybkFkZHJlc3NQdHIsIGJvb2wgZGlyZWN0KTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBS
ZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
IAogICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHByaXZhdGVDb21w
aWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSosIFRyYW1wb2xpbmVTdHJ1Y3R1
cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFs
RGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CkBAIC00NTIsNiArNDg4LDIyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoUmVnaXN0
ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQXJyYXlQ
cm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2Rl
SW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lzdGVySUQgc2Ny
YXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKik7CisgICAgICAgIAorICAg
ICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSopOworICAgICAg
ICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJl
Z1QyIGNvbnRhaW5zIGluZGV4aW5nIHR5cGUuCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGludC1j
aGVja2VkIGFuZCB6ZXJvIGV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4KKyAgICAgICAg
Ly8gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuIFJldHVybnMgdGhlIHNsb3cgY2FzZXMu
IEZhbGwtdGhyb3VnaAorICAgICAgICAvLyBjYXNlIGNvbnRhaW5zIHJlc3VsdCBpbiByZWdUMCwg
YW5kIGl0IGlzIG5vdCB5ZXQgcHJvZmlsZWQuCisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1
b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAg
ICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIAorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiBy
ZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KKyAg
ICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBp
cyBpbnQtY2hlY2tlZCBhbmQKKyAgICAgICAgLy8gemVyby1leHRlbmRlZC4gQmFzZSBpcyBjZWxs
IGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLgorICAgICAgICAvLyByZXR1
cm5zIHRoZSBzbG93IGNhc2VzLgorICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBM
aXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpOwogCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwg
S25vd25Ob3RGaW5hbCB9OwogCkBAIC04NzAsNiArOTIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogICAgICAgICBWZWN0b3I8TGFiZWw+
IG1fbGFiZWxzOwogICAgICAgICBWZWN0b3I8UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvPiBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvOworICAgICAgICBWZWN0b3I8QnlWYWxDb21w
aWxhdGlvbkluZm8+IG1fYnlWYWxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25J
bmZvOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbz4gbV9tZXRob2RD
YWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxl
OwpAQCAtODc5LDYgKzkzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U3dp
dGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIHVuc2lnbmVkIG1fcHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1bnNpZ25lZCBtX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleDsKICAgICAgICAgdW5zaWduZWQgbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4OwogICAgICAg
ICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5mb0luZGV4OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0NSwyMyArNDQ1LDIyIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNT
dG9yYWcKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZh
bHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVn
aXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKIHsKLSAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVuZ3Ro
LCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGluaXRpYWxMZW5ndGgpKTsKKyAgICB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4p
OworICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAs
IHRydWUsIGluaXRpYWxMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgIGxv
YWRQdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZBcnJheVN0cnVjdHVy
ZSgpLCBzY3JhdGNoKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHNjcmF0Y2gsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SGFzQ29udGlndW91cykpKTsKIAogICAgIC8vIFdlIGFsbG9jYXRlIHRoZSBiYWNraW5nIHN0b3Jl
IGZpcnN0IHRvIGVuc3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiAKICAgICAvLyBkb2Vzbid0
IGhhcHBlbiBkdXJpbmcgSlNBcnJheSBpbml0aWFsaXphdGlvbi4KICAgICBlbWl0QWxsb2NhdGVC
YXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJbmRleGluZ0hlYWRlciksIHN0b3Jh
Z2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNlbGwgZm9yIHRoZSBhcnJheS4KLSAg
ICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mQXJyYXlTdHJ1
Y3R1cmUoKSwgc2NyYXRjaCk7CiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0FycmF5
LCBmYWxzZT4oc2NyYXRjaCwgY2VsbFJlc3VsdCwgc3RvcmFnZVB0cik7CiAKLSAgICAvLyBTdG9y
ZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmUz
MihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFn
ZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAg
c3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZz
ZXQoKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjpzcGFyc2VNYXBPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIGFs
bCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIGluZGV4aW5nIGhlYWRlci4KKyAgICBzdG9yZTMy
KEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRk
cmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsK
IAogICAgIC8vIFN0b3JlIHRoZSBuZXdseSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgogICAgIHN0
b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSk7CkBAIC00NzAsMTIgKzQ2OSwxMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBzdG9yYWdlUHRyKTsKLSAgICAgICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9y
YWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAj
ZWxzZQogICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1Jl
Z2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0
b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAg
ICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNp
emVvZih1aW50MzJfdCkpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRy
LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7Cisg
ICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYK
ICAgICB9CiB9CkBAIC01NTksMTAgKzU1OCwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVGCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3Jl
VG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYg
KCFjYW5CZU9wdGltaXplZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZB
TFVFX1BST0ZJTEVSKSAgICAKICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2Zp
bGUtPmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBhcnJheVByb2ZpbGVTYXcoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5
cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJu
ICEhKHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJh
eSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJheU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkp
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5
TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAg
aWYgKGFycmF5UHJvZmlsZVNhdyhwcm9maWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICBy
ZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2MSw3ICsxNjYxLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGxl
bmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNw
YWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3Zl
cnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKGxlbmd0aCkpKSkgewogICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfbmV3X2FycmF5KTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
QEAgLTE2ODAsOCArMTY4MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KElu
c3RydWN0CiAgICAgLy8gSWYgdGhlIGFsbG9jYXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdp
bGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9wZXIgc3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVt
aXRfb3BfbmV3X2FycmF5LgogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQorICAg
IGlmIChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAg
ICAgICB8fCBDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAw
LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBXZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29waWVkU3BhY2Ug
Zm9yIHN0b3JhZ2UuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNl
IGluIE1hcmtlZFNwYWNlIGZvciBjZWxsLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDYgKzk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVj
dGlvbgogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9w
ZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIo
cmVnVDEpOwpAQCAtMTExLDE3ICsxMTIsNjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjdGlvbgogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKIAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAotICAgIGxvYWRQ
dHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJh
eU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1
b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Cisg
ICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIEp1bXAgcmVzdWx0T0sgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwKTsKKyAg
ICBicmVha3BvaW50KCk7CisgICAgcmVzdWx0T0subGluayh0aGlzKTsKKyNlbmRpZgogCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFNjYWxlUHRyKSwgcmVnVDApOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAK
KyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0MywxNyArMTkwLDEwMCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgbm90U3RyaW5n
LmxpbmsodGhpcyk7CiAgICAgbm9uQ2VsbC5saW5rKHRoaXMpOwogICAgIAotICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gZW1wdHkgdmFsdWUKKyAgICBzd2l0Y2ggKGNob29zZUFycmF5TW9kZShjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgor
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjaworICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIGVtcHR5IHZhbHVlCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBMYWJl
bCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX2dldF9ieV92YWwpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGJhc2UsIHJl
Z1QyKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIpOwotICAgIHN0
dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKGRzdCk7CisK
KyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93
UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0
cnVjdGlvbkluZGV4Kys7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiB9CiAKK3Zv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7Cisg
ICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlz
LCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2Rl
TG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBh
dGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIs
CisgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJl
dHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFy
cmF5TW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxh
YmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
KCJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50
ICVwIiwKKyAgICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAg
ICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIo
Y3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUdldERp
cmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklE
IG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBGaW5hbE9iamVjdE1vZGUgZmluYWxPYmplY3RN
b2RlKQogewogICAgIEFTU0VSVChzaXplb2YoSlNWYWx1ZSkgPT0gOCk7CkBAIC0yMjYsNyArMzU2
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogewogICAgIHVu
c2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2ln
bmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNp
Z25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBA
IC0yMzQsMTAgKzM2NCw3MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0
aW9uCiAgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdU
MiwgcmVnVDMsIHByb2ZpbGUpOworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9v
c2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRD
b250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklU
QXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNl
dCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwg
cmVnVDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3Vv
dXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QyKTsKKyAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisKKyAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBTY2FsZVB0cikpOworICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAg
ICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgIAorICAgIGVtaXRBcnJheVByb2Zp
bGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1QzKTsKKyAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJl
Z1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBqdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAg
CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIs
IFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIApAQCAtMjQ3LDggKzQ0MCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7
CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVU
b0hvbGVTcGVjaWFsQ2FzZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwot
ICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICBlbWl0QXJyYXlQcm9m
aWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcikp
LCByZWdUMyk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMyk7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdU
MiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsK
ICAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CkBAIC0yNTcsOCArNDUzLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1
bHQsIHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVy
KHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTI3MCwxMyArNDY2LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3Ry
dWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAg
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBjaGVjaworICAgIC8vIFRoZXNlIG5leHQgdHdv
IGNoZWNrcyBoYXZlIGRpZmZlcmVudCBtZWFuaW5ncyBhY2NvcmRpbmcgdG8gYXJyYXkgbW9kZS4K
KyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIAor
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRC
eVZhbENhbGwodGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRCeVZhbENhbGwu
YWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJv
cGVydHksIHJlZ1QyKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCBy
ZWdUMik7Ci0gICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1
YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3Mg
PSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pbmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NjU2LDcgKzg2MCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4K
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBy
ZWdUMik7CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDIs
IHJlZ1QxLCBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMx
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSXNBcnJheSkpOwotICAg
IEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZElt
bTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0NvbnRp
Z3VvdXMpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9t
IHRoZSBzdG9yYWdlCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MTQsNiArMjQxNCwzMCBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZhbHVl
OwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYg
c3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmco
c3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50
MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAgICAg
ICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsK
KyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJh
bWUsIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFt
ZSwgaSk7CisgICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAgICAgICByZXR1
cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3Jp
cHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHko
Y2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1l
KSk7CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Cit9CisK
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsKQogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTI0MjMsMzUgKzI0NDcs
MzcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgCi0gICAgaWYg
KExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7Ci0g
ICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93
blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1l
KSkpIHsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0
KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGlt
aXplLgorICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNv
ZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7
CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlWYWxJ
bmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRl
eGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAg
ICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlN
b2RlKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5
VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJOX0FERFJFU1Mp
OworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKIAotICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50
MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAg
ICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCBTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJp
bmcpKTsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+
Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04o
KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAg
fQotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsK
LSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxO
YW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Ci0gICAgfQorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0
LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJn
c1sxXS5qc1ZhbHVlKCk7CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxs
RnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogICAgIApAQCAtMjUwMiwyMyArMjUyOCwxNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQorc3RhdGljIHZv
aWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1Zh
bHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKTsKLSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1Zh
bHVlKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7
Ci0KICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50
MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CiAgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCi0g
ICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGNhbGxGcmFtZSwg
aSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAg
ICAgfSBlbHNlCkBAIC0yNTI4LDExICsyNTQ1LDU0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGpzQ2Fz
dDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpLCB2YWx1
ZSwgc2xvdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
LSAgICAgICAgaWYgKCFzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBEb24n
dCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KKyAgICAg
ICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSk7CiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZh
bHVlLCBzbG90KTsKICAgICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04o
dm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKKworICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAg
ICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAg
QVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsK
KyAgICAgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAg
ICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAg
ICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBl
KGluZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5h
cnJheU1vZGUpCisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKKworICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wX3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0u
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUo
KTsKKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2
YWx1ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNiAr
MzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFp
bChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1
ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9J
TlRFUk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9n
ZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRK
U1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3Bf
aW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZf
SU5URVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRleChT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAg
IHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVy
X3NldHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0
aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBf
bGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJl
W3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAgICBidGl6IHQyLCBJc0Fy
cmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2Us
IC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXogdDIsIChIYXNDb250aWd1b3VzIHwgSGFz
QXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5vcEdldEFycmF5TGVuZ3Ro
U2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZHAgNjRbUEIsIFBDLCA4
XSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAtMTE0Nywx
NCArMTE0NywyNCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCAzMltQQiwgUEMs
IDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQxKQogICAgIGxvYWRpcyAyNFtQQiwg
UEMsIDhdLCB0MwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93
CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93
KQogICAgIHN4aTJwIHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0s
IHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1b3Vz
CisKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
OjptX3B1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpcyA4W1BCLCBQ
QywgOF0sIHQwCisgICAgbG9hZHAgW3QzLCB0MSwgOF0sIHQyCisgICAgam1wIC5vcEdldEJ5VmFs
RG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlT
dG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlh
ZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JM
ZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAog
ICAgIGxvYWRwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6
IHQyLCAub3BHZXRCeVZhbFNsb3cKKworLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcCB0Miwg
W2NmciwgdDAsIDhdCiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4XSwgdDAKICAgICB2YWx1ZVByb2Zp
bGUodDIsIHQwKQpAQCAtMTIyNiwyOSArMTIzNiw1NSBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoK
ICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAgICBsb2FkcCAzMltQQiwg
UEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQwKQotICAgIGJ0aXogdDIsIEhh
c0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9hZGlzIDE2W1BCLCBQQywgOF0s
IHQwCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MiwgLm9wUHV0QnlWYWxT
bG93KQotICAgIHN4aTJwIHQyLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0
MCwgdDMsIC5vcFB1dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0MywgdDMKICAgICBsb2FkcCBKU09i
amVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
bG93Ci0gICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0sIC5vcFB1dEJ5
VmFsRW1wdHkKLS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9hZGlzIDI0W1BCLCBQQywg
OF0sIHQzCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MywgdDEpCisgICAgYnRpeiB0Miwg
SGFzQ29udGlndW91cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisgICAgCisgICAgYmlhZXEg
dDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5n
dGhbdDBdLCAub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kcworLm9wUHV0QnlWYWxDb250
aWd1b3VzU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCisgICAgd3JpdGVCYXJyaWVyKHQxKQorICAgIHN0
b3JlcCB0MSwgW3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQorCisub3BQdXRCeVZhbENvbnRp
Z3VvdXNPdXRPZkJvdW5kczoKKyAgICBiaWEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJ
bmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBi
aWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rv
ckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BST0ZJTEVSCisgICAg
ICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQyCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2Zp
bGU6Om1fbWF5U3RvcmVUb0hvbGVbdDJdCisgICAgZW5kCisgICAgYWRkaSAxLCB0MywgdDIKKyAg
ICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9w
dWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0
CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3Jh
Z2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93Cisg
ICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0sIC5vcFB1dEJ5VmFsQXJy
YXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAg
bG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0Miwg
dDEpCiAgICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjpt
X3ZlY3Rvclt0MCwgdDIsIDhdCisgICAgc3RvcmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9y
W3QwLCB0MywgOF0KICAgICBkaXNwYXRjaCg1KQogCi0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0
QnlWYWxBcnJheVN0b3JhZ2VFbXB0eToKICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBz
dG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QzXQorICAgICAgICBsb2Fk
cCAzMltQQiwgUEMsIDhdLCB0MQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21h
eVN0b3JlVG9Ib2xlW3QxXQogICAgIGVuZAotICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251
bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1
bHQKKyAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdLCB0MQor
ICAgIGFkZGkgMSwgdDEKKyAgICBiaWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5k
ZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgc3Rv
cmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCisgICAgYmliIHQy
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIs
IHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Cisg
ICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxT
bG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAg
ZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0
IElzQXJyYXkgPSAxCitjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9y
YWdlID0gOAotY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlID0gMTYKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24g
MTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihi
YXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOwogICAgIH0KICAgICAK
KyAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5vdCBqdXN0IGJlY2F1c2UgaXQncyBoYW5keSwg
YnV0IHRvIHJlbWluZCB5b3UgdGhhdAorICAgIC8vIHRoZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJm
bGllcyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICBzdGF0aWMgQnV0dGVy
Zmx5KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCdXR0ZXJmbHkqPihwdHIpOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBwb2lu
dGVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7IH0KKyAgICAKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFk
ZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5k
ZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9
CkBAIC03MCw5ICs3OSwyMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGlu
ZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7
IH0KICAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KICAgICBDb25zdFByb3BlcnR5U3RvcmFn
ZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9w
ZXJ0eVN0b3JhZ2UoKTsgfQorICAgIAorICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0
dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgpOyB9CisgICAgdWludDMyX3QgdmVj
dG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0K
KyAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRl
cigpLT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgo
dWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVl
KTsgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXls
b2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0
b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3Jh
Z2U+KCk7IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVy
biBpbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+ID4oKTsgfQorICAgIAorICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21Db250aWd1b3VzKFdyaXRlQmFycmllcjxVbmtub3duPiog
Y29udGlndW91cykKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRl
cmZseSo+KGNvbnRpZ3VvdXMpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KICAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0
eVN0b3JhZ2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpy
ZXNpemVBcnJheQogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJ
bmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhh
c0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKG51
bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7
CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdy
aXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCkBAIC0xNjMsNyAr
MTYzLDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXpl
X3QgbnVtYmVyT2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50
IGluIHVuc2hpZnQoKSwgYWJvdmUuCiAgICAgbWVtbW92ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAg
KzQyLDE3IEBAIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXQKIAogaW5s
aW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAg
ICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCghaGFzSW5kZXhl
ZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
ZGV4aW5nVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgY2hhciogaW5kZXhpbmdU
eXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgY2hh
ciByZXN1bHRbMTI4XTsKKyAgICBjb25zdCBjaGFyKiBiYXNpY05hbWU7CisgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgYmFzaWNOYW1lID0gIk5vbkFycmF5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25B
cnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQ29u
dGlndW91cyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgor
ICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgYmFzaWNOYW1lID0g
IkFycmF5Q2xhc3MiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3Vv
dXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFt
ZSA9ICJBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYmFzaWNOYW1lID0gIlVua25vd24hIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIHNucHJpbnRmKAorICAgICAgICByZXN1bHQsIHNpemVvZihyZXN1bHQpLCAiJXMlcyVz
IiwgYmFzaWNOYW1lLAorICAgICAgICAoaW5kZXhpbmdUeXBlICYgSGFkQXJyYXlTdG9yYWdlKSA/
ICJ8SGFkQXJyYXlTdG9yYWdlIiA6ICIiLAorICAgICAgICAoaW5kZXhpbmdUeXBlICYgTWF5SGF2
ZUluZGV4ZWRBY2Nlc3NvcnMpID8gInxNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyIgOiAiIik7Cisg
ICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lv
biAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhp
bmdUeXBlOwogCiAvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0
aWVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAg
PSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNDb250aWd1b3VzICAgICAgICAgICAg
PSAyOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAg
PSA4Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlICAg
PSAxNjsKIApAQCAtNDIsOSArNDMsMTEgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlI
YXZlSW5kZXhlZAogCiAvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwor
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhDb250aWd1b3VzICAgICAgICAg
ID0gSGFzQ29udGlndW91czsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlICAgICAgICA9IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSA9IEhhc1Nsb3dQdXRBcnJh
eVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5Q2xhc3MgICAgICAgICAg
ICAgICAgICAgICAgPSBJc0FycmF5OyAvLyBJJ2Qgd2FudCB0byBjYWxsIHRoaXMgIkFycmF5IiBi
dXQgdGhpcyB3b3VsZCBsZWFkIHRvIGRpc2FzdHJvdXMgbmFtZXNwYWNlIHBvbGx1dGlvbi4KK3N0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoQ29udGlndW91cyAgICAgICAgICAgICA9
IElzQXJyYXkgfCBIYXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2UgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsK
IHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSAg
ICA9IElzQXJyYXkgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogCkBAIC01Miw2ICs1NSwxMCBA
QCBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQCiAgICAgTm9uQXJyYXk6
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheUNsYXNzCiAKKyNkZWZpbmUgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVMgXAorICAgIE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6
ICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzCisKICNkZWZpbmUgQVJS
QVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTIFwKICAgICBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UKQEAgLTc2LDYgKzgzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNJ
bmRleGluZ0hlYWRlcihJbmQKICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXModHlwZSk7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNDb250aWd1b3VzKEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUpCit7CisgICAgcmV0dXJuICEhKGluZGV4aW5nVHlwZSAmIEhhc0NvbnRpZ3VvdXMp
OworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaGFzQXJyYXlTdG9yYWdlKEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUpCiB7CiAgICAgcmV0dXJuICEhKGluZGV4aW5nVHlwZSAmIChIYXNBcnJheVN0
b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSk7CkBAIC04Niw2ICs5OCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzaG91bGRVc2VTbG93UHV0KEluZGUKICAgICByZXR1cm4gISEoaW5kZXhp
bmdUeXBlICYgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSk7CiB9CiAKK2NvbnN0IGNoYXIqIGluZGV4
aW5nVHlwZVRvU3RyaW5nKEluZGV4aW5nVHlwZSk7CisKIC8vIE1hc2sgb2YgYWxsIHBvc3NpYmxl
IHR5cGVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzICAgICAgICAg
ICAgPSAzMTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsOSArMzMxLDggQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2Vw
dGlvbiwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyBy
ZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBm
b2xsb3dpbmcgJ2lmJy4KQEAgLTM5NiwxMiArMzk1LDQ3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVu
Z3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5
OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhy
b3dFeGNlcHRpb24pCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIGlmICghbmV3TGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sIGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1
b3VzOgorICAgICAgICBpZiAobmV3TGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNl
dExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLCBhcnJheVN0b3JhZ2UoKSk7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBB
cnJheUNsYXNzOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3Ro
LS0pCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAg
IG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAKQEAgLTQ1OCw2ICs0OTIsMjUgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJy
YXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVu
Z3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZ
X0lOREVYKSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4
ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
Q29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZTogewogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAg
ICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3Ro
LCB2YWx1ZSwgdHJ1ZSkpIHsKQEAgLTYwMCw2ICs2NTMsMTkgQEAgdm9pZCBKU0FycmF5Ojpzb3J0
TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAg
aWYgKCFtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBh
cmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcXNvcnQobV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNG
b3JRU29ydCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
QEAgLTYyOSw2ICs2OTUsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVx
dWFsIHByaW1pdGl2ZSB2YWx1ZXMuCiAgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBz
aXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29y
dCk7CiAgICAgICAgIAorICAgICAgICBhdHRlbXB0VG9Db252ZXJ0Q29udGlndW91c0FycmF5U3Rv
cmFnZVRvQ29udGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCksIHN0b3JhZ2UpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTYzNyw4NiArNzA0LDExMiBAQCB2b2lkIEpTQXJy
YXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogfQogCi12b2lkIEpTQXJyYXk6
OnNvcnQoRXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZT4KK3ZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIFdy
aXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKQogewot
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7Ci0gICAgCi0gICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAg
aWYgKCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIENvbnZlcnRp
bmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBk
byBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgLy8gVGhpcyBp
cyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21w
YXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKKyAgICAvLyBidWZm
ZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVj
dHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgIC8vIHJhbmRv
bSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBh
cmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgogICAgICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAg
IGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewotICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2
YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZy
b250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRl
cmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhv
dWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVz
aWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZl
IGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgICAgIC8vIHJhbmRvbSBv
ciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUg
ZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlU3Ry
aW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIGlm
ICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0
cmluZ1BhaXI+IHZhbHVlcyhyZWxldmFudExlbmd0aCk7CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4o
KSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNv
cnRWZWN0b3IoJnZhbHVlcyk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVj
dG9yKCZ2YWx1ZXMpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVW
YWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5k
ZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAg
ICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMg
JiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICAgICAgfQorICAgIGJvb2wgaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50
TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgpOwor
ICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNbaV0u
Zmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgfQogICAgICAg
ICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2Fs
bCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAgICAgIC8vIGEg
dG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1
ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9u
LgogICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1
ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKQorICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0g
dmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBIZWFwOjpoZWFwKHRo
aXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmlu
ZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBU
aGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAg
ICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0
aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhl
cgorICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQp
Ci0gICAgICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgICAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3Ry
aW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0jZWxzZQotICAgICAgICAv
LyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBh
IHN0YWJsZSBzb3J0LgotICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5
IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJs
ZSBzb3J0LgorICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCiAgICAgICAgIHFzb3J0
KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBlbHNlCisgICAgICAgIG1lcmdlc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBUaGUg
cXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQu
CisgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBi
dXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJZiB0
aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2
ZWN0b3Igc3RvcmFnZSwKKyAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUg
b3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSkgeworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgZW5zdXJlQ29udGln
dW91c0xlbmd0aChnbG9iYWxEYXRhLCByZWxldmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwog
ICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhl
IGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCi0gICAgICAgIC8vIGluY3Jl
YXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFs
dWVzLgotICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpIHsKLSAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCkgPCByZWxldmFudExlbmd0aCkgeworICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFudExlbmd0aCk7CisgICAgICAgICAgICBiZWdpbiA9
IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RvcmFn
ZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBz
dG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAg
aWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKQorICAgICAgICAg
ICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChyZWxldmFudExlbmd0aCk7CisgICAgICAgIGJy
ZWFrOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2
YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJlZ2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6
CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBv
cFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czog
eworICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAg
ICAgICAgICAgZXhlYywgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgICAgICAKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhD
b250aWd1b3VzPigKKyAgICAgICAgICAgIGV4ZWMsIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpOworCisgICAgICAgIGF0dGVtcHRUb0NvbnZlcnRDb250aWd1
b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFnZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtODEwLDYgKzkwMyw3OCBAQCB2
b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgY2FzZSBBcnJheUNs
YXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2Vk
IGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAg
ICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2Fs
bGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJh
eSBpcyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkg
PD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
KTsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVZMVHJlZTxBVkxU
cmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVu
b3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBl
eGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBh
cmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUg
PSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEg
PSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3JvdyhtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENh
bGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNv
bXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXks
IHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdo
dCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2ln
bmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIg
dGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9u
ZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAg
Zm9yICg7IG51bURlZmluZWQgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsrbnVtRGVm
aW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURl
ZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICB0cmVlLmluc2VydChu
dW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1EZWZpbmVkICsgbnVtVW5k
ZWZpbmVkID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPT0gbnVtRGVmaW5lZCk7
CisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFn
ZS4KKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+
OjpJdGVyYXRvciBpdGVyOworICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7Cisg
ICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQgJiYgaSA8IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFB1dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7ICsraSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0VW5k
ZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtOTI5LDYg
KzEwOTQsMTIgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNs
YXNzOgogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBhcmdzLmFwcGVuZChtX2J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBA
IC05NjAsNiArMTEzMSwxMiBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3Rh
dGUqCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAg
IGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBjYWxs
RnJhbWUtPnNldEFyZ3VtZW50KGksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHVuc2lnbmVkIGkg
PSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgp
OwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgpOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiwgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpOwogCisg
ICAgICAgIGJvb2wgc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSopOwogICAgICAg
ICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUpOwogCiAg
ICAgICAgIGJvb2wgdW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiwgYm9vbCwgdW5z
aWduZWQpOwpAQCAtMTA2LDYgKzExMCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5z
aWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7CiAgICAgfTsKIAorICAgIGlu
bGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIEluZGV4aW5n
SGVhZGVyIGhlYWRlcjsKKyAgICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aChzdGQ6Om1heChs
ZW5ndGgsIEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBoZWFkZXIuc2V0UHVibGljTGVuZ3Ro
KGxlbmd0aCk7CisgICAgICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAg
IGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIGhlYWRlciwgaGVhZGVyLnZlY3Rvckxlbmd0aCgpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgfQorCiAgICAgaW5saW5lIEJ1dHRlcmZseSog
Y3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoKQogICAgIHsKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZSgKQEAgLTEyMSw3ICsxMzQsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewot
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2Jh
bERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseTsKKyAg
ICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENv
bnRpZ3VvdXMpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVDb250aWd1b3VzQXJy
YXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgICAgICBBU1NF
UlQoIWluaXRpYWxMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZQorICAgICAgICAgICAgICAgICAgIHx8IChpbml0aWFsTGVuZ3RoICYmIHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0
ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgfQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMTU0LDI2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCog
dGVtcDsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0
b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAg
ICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXko
aW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgPSAwOwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAg
ICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIDApOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxM
ZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAg
ICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSksICZ0ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAg
ICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFy
cmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3Rv
cmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAu
Y2xlYXIoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0
aWFsTGVuZ3RoOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpT
QXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMSw3ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1Zh
bHVlIHByb3RvCiAgICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpOwogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1fYXJy
YXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQo
KSwgQXJyYXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlT
dG9yYWdlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFy
cmF5V2l0aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkp
KTsKIApAQCAtNDA3LDYgKzQwOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGlt
ZShKU0dsb2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxvY2F0aW9ucyB0
aGF0IGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8gdGhpcyBvYmpl
Y3Qgbm93IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAgbV9hcnJheVN0
cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQu
Z2V0KCkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CiAgICAgCiAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQgc3RvcmFnZSBz
d2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFnZS4KQEAgLTQ4
Miw2ICs0ODQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVNjb3BlU3RydWN0dXJlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1bWVudHNTdHJ1Y3R1cmUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Up
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlRm9yU2xv
d1B1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYm9vbGVhbk9iamVjdFN0
cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGJhY2tDb25z
dHJ1Y3RvclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2
ICsxMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X2FycmF5U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JT
bG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KKyAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7
IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBh
cyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CkBAIC0yNjEsNyAr
MjYyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogbmFtZVNjb3BlU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAg
ICAgICAgU3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Fy
Z3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAgICBT
dHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdldCgpOyB9CiAgICAgICAgIHZvaWQq
IGFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmU7IH0K
KyAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkg
eyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyB9CiAgICAgICAgIFN0
cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9vbGVh
bk9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrQ29u
c3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrQ29uc3RydWN0b3JT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9uU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgp
OyB9CkBAIC00NjYsNyArNDY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNB
cnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHJldHVybiBKU0Fy
cmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpbml0aWFsTGVuZ3RoID8gZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSA6IGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoID0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDI0ICsxMzEsMzkgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAgICAgKm5ld0J1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFw
cHJvcHJpYXRlLgorICAgICAgICAgICAgCisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGN1cnJlbnRUYXJnZXQ7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1
cnJlbnRTb3VyY2U7CisgICAgICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAg
IGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAg
ICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOwotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNv
dXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2
YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRW
YWx1ZSgmdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0
V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcjsKKyAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgLy8gTm90IHN1cmUgaWYgdGhpcyBpcyBy
aWdodC4gV2h5IGlzbid0IHRoaXMgcHVibGljTGVuZ3RoKCk/CiAgICAgICAgICAgICAgICAgaWYg
KG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQogICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUg
KGNvdW50LS0pIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3Vy
Y2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1dHRlcmZseSA9
IG5ld0J1dHRlcmZseTsKQEAgLTE1OCw2ICsxNzMsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgIAogICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBp
ZiBhcHByb3ByaWF0ZS4KICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCkBAIC0yMzQsNiArMjUyLDE1IEBAIGJv
b2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIHNsb3Quc2V0VmFsdWUoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKQEAgLTM1MSw2ICszNzgsMjIgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBBU1NFUlQoYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSA8PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAgICBpZiAocHJv
cGVydHlOYW1lIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW3Byb3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPCBidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKQEAgLTM2MSwxNSArNDA0LDE4IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCAKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9y
YWdlLT5tX3ZlY3Rvcltwcm9wZXJ0eU5hbWVdOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5sZW5ndGgoKTsKICAgICAgICAgCisgICAgICAgIEpTVmFsdWUgb2xkID0gdmFsdWVT
bG90LmdldCgpOworICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
c09iamVjdCwgdmFsdWUpOworICAgICAgICAKICAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1f
bnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAocHJvcGVydHlOYW1l
ID49IGxlbmd0aCkgewogICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsgMTsKICAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOwogICAgICAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3Qp
CisgICAgICAgIH0gZWxzZSBpZiAoIW9sZCkgewogICAgICAgICAgICAgKytzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAKLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3Qt
PmF0dGVtcHRUb0NvbnZlcnRBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBzdG9yYWdlKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAg
ICAKQEAgLTQ0Myw2ICs0ODksMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SQogdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQsIGFzIGl0IHdpbGwgcGVy
Zm9ybSB0d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCisgICAgICAgIC8vIHRoaXMg
Y2FzZSBpZiB3ZSBldmVyIGNhcmVkLgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwg
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjUsNiAr
NTE2LDIzIEBAIHZvaWQgSlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWMKICAgICBn
bG9iYWxPYmplY3QoKS0+aGF2ZUFCYWRUaW1lKGdsb2JhbERhdGEpOwogfQogCitXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBJbmRleGluZ1R5cGUgb2xk
VHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9s
ZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBlKSk7CisgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgQVNTRVJUKCFpbmRleGluZ1No
b3VsZEJlU3BhcnNlKCkpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxl
bmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAg
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxl
bmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9j
YXRlQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZs
eSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7
Cit9CisKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
KQogewogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpOwpAQCAtNDgwLDcgKzU0OCw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFy
cmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgcmVzdWx0LT5t
X251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKLSAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkSW5kZXhp
bmdUcmFuc2l0aW9uKCkpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVy
ZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAgIHNldEJ1dHRlcmZs
eShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTQ5MCwxNiArNTU4LDEyNCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
cmVhdGVJbml0aWFsQXJyCiAgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOwogfQogCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK3sK
KyAgICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVTaXplKCk7CisgICAgCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIDAsIHBy
b3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5ndGgp
KTsKKyAgICAKKyAgICBtZW1jcHkoCisgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9y
YWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgcHJvcGVydHlTaXplICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSk7CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBuZXdTdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgo
bmVlZGVkTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5zZXRMZW5ndGgocHVibGljTGVuZ3RoKTsK
KyAgICBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgIG5ld1N0b3JhZ2UtPm1f
aW5kZXhCaWFzID0gMDsKKyAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gcHVi
bGljTGVuZ3RoOworICAgIG1lbWNweSgKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3IsIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKCksIHB1YmxpY0xlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOworICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24p
OworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVy
ZSk7CisgICAgcmV0dXJuIG5ld1N0b3JhZ2U7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sK
KyAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKK30KKworYm9v
bCBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNBcnJheVN0b3JhZ2VUb0NvbnRpZ3VvdXMoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgaWYg
KGZhbHNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUX1VOVVNFRChz
dG9yYWdlLCBzdG9yYWdlID09IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgQVNT
RVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoIXNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7Cisg
ICAgCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPQorICAgICAgICBCdXR0ZXJmbHk6OmZy
b21Qb2ludGVyKG1fYnV0dGVyZmx5LT5wb2ludGVyKCkgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
MCkpOworICAgIAorICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAKKyAgICBuZXdCdXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+
c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgIAorICAgIC8vIFNoaWZ0IHRo
ZSBuYW1lZCBwcm9wZXJ0aWVzIG92ZXIsIGlmIHRoZXJlIGFyZSBzb21lLgorICAgIHNpemVfdCBw
cm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOworICAgIGlmIChwcm9w
ZXJ0eVNpemUpIHsKKyAgICAgICAgbWVtbW92ZSgKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgICAgICBtX2J1dHRlcmZs
eS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgICAgICBwcm9wZXJ0
eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9Db250aWd1b3VzKTsKKyAgICBzZXRCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCitXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTT2JqZWN0OjplbnN1cmVD
b250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8
fCBzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEs
IDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpKTsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5k
ZXhpbmcoKSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpOworICAgICAgICAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFy
cmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworQnV0dGVyZmx5KiBKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VT
bG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkp
KQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSktPmJ1dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNw
YXJzZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSktPmJ1dHRlcmZseSgpOworICAg
ICAgICByZXR1cm4gQnV0dGVyZmx5Ojpmcm9tQ29udGlndW91cyhjcmVhdGVJbml0aWFsQ29udGln
dW91cyhnbG9iYWxEYXRhLCAwKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CkBAIC01MDcs
NiArNjgzLDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRl
IHdheSBtb3JlIGVmZmljaWVudCwgaWYgd2UgY2FyZWQuCisgICAgICAgIHJldHVybiBlbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxE
YXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAg
ICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAg
cmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAg
IApAQCAtNTI2LDYgKzcwNiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhCiB2b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAg
ICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRl
U2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9T
bG93UHV0QXJyYXlTdG9yYWdlKTsKQEAgLTU2OSw4ICs3NTQsNyBAQCB2b2lkIEpTT2JqZWN0Ojpz
ZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhCiAgICAgaWYgKHNob3VsZFVzZVNsb3dQdXQoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIG5l
d1N0cnVjdHVyZSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKLSAgICBzZXRTdHJ1Y3R1
cmUoZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlKTsKKyAgICBzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhD
eWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBA
IC03MDQsNiArODg4LDEyIEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChK
U0MKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgIC8vIFRoZXJlIGlzIGFuIGV4dHJlbWVseSBvYnZpb3VzIGNhc2UgdGhhdCB3ZSBjb3Vs
ZCBoYW5kbGUgaGVyZSAoZGVsZXRpbmcgdGhlIGxhc3QgZWxlbWVudCkKKyAgICAgICAgLy8gYnV0
IEkgZG9uJ3QgZmVlbCBsaWtlIHdyaXRpbmcgdGVzdHMgZm9yIGl0LCBzbyBJJ2xsIHB1bnQgaXQu
CisgICAgICAgIHRoaXNPYmplY3QtPmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgorICAgICAgICAKICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgCkBAIC04NzcsNiArMTA2NywxMiBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvYmplY3QtPm1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKICAgICAgICAgCkBAIC0xMzM4LDYgKzE1MzQsNTcgQEAgdm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFy
c2UoKSk7CisgICAgCisgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0
aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3JlYXRlciB0aGFuCisgICAg
Ly8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCisgICAgQVNTRVJUKGkgPiBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkgfHwgaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgIGlmIChpID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSAmJiBpIDwgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICBBU1NFUlQoaSA+PSBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmUgY2FzZSB3ZSBjYW4g
aGFuZGxlLiBBbmQgd2UgaGFuZGxlIGl0IGJ5IGdyb3dpbmcgdGhlIGNvbnRpZ3VvdXMKKyAgICAg
ICAgLy8gc3RvcmFnZS4KKyAgICAgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3RkOjpt
aW4oCisgICAgICAgICAgICB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpLAorICAgICAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAor
ICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbmV3VmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5
LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgbV9idXR0ZXJmbHkt
PnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgcHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBB
U1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICBpZiAoaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihpLCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpICYmIGkgPCBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKSB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCBBbGxvY2F0
ZUFycmF5U3RvcmFnZSwKKyAgICAgICAgICAgIGdldE5ld1ZlY3Rvckxlbmd0aChtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCksIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSwgaSArIDEpKTsK
KyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7CisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxE
YXRhKTsKKyAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7Cit9
CisKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewog
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEz
NTEsNiArMTU5OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
CiAgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICBpZiAoIWkgJiYgIXN0cnVjdHVyZSgpLT5uZWVkc1Ns
b3dQdXRJbmRleGluZygpKSB7CisgICAgICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhn
bG9iYWxEYXRhLCAxKVswXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKICAgICAgICAgICAg
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZh
bHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM2Miw2ICsxNjEzLDExIEBAIHZvaWQgSlNPYmplY3Q6
OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhl
YywgaSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgLy8gTm8gb3duIHByb3BlcnR5IHByZXNlbnQgaW4g
dGhlIHZlY3RvciwgYnV0IHRoZXJlIG1pZ2h0IGJlIGluIHRoZSBzcGFyc2UgbWFwIQpAQCAtMTM4
NCw4ICsxNjQwLDEwIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4K
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlLCBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotCisgICAgCiAgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0
IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChoYXNBcnJheVN0
b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGFycmF5U3Rv
cmFnZSgpID09IHN0b3JhZ2UpOwogICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpIHx8IGF0dHJpYnV0ZXMpOwogICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAK
QEAgLTE0NjksNiArMTcyNywxMCBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3RvCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYg
KGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKQogICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgaWYgKCFp
KSB7CisgICAgICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAxKVsw
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KICAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8
IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAw
KSk7CiAgICAgICAgIApAQCAtMTQ3Nyw2ICsxNzM5LDE1IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IDE7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IChSZWFkT25seSB8IEFjY2Vzc29yKSkgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1v
ZGUsIGFycmF5U3RvcmFnZSgpKTsKQEAgLTE0OTksMTIgKzE3NzAsNyBAQCBBTFdBWVNfSU5MSU5F
IHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgZWxzZSBpZiAoIWN1cnJlbnRWZWN0b3JM
ZW5ndGgpCiAgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHN0ZDo6bWF4KGRlc2lyZWRMZW5ndGgs
IGxhc3RBcnJheVNpemUpOwogICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBl
cXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGgg
KiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5n
dGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBm
b3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2Vk
TGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRM
ZW5ndGggJiAxKTsKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gdGltZXNUaHJlZVBsdXNPbmVE
aXZpZGVkQnlUd28oZGVzaXJlZExlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJUKGluY3JlYXNl
ZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKQEAgLTE1MjQsOSArMTc5MCwxMCBAQCBBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgICAgIHZlY3Rvckxlbmd0aCA9
IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7
CkBAIC0xNTc0LDYgKzE4NDEsMjIgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5n
dGgoSlNHbAogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEpTT2JqZWN0OjplbnN1cmVDb250
aWd1b3VzTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkp
OworICAgIAorICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpIHsK
KyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAg
ICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVu
Z3RoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8
IGxlbmd0aCkKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwor
fQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBB
U1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTYwMiw2ICsxODg1LDEzIEBAIGJvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChpID49IG9iamVjdC0+
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5tX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
ICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTI5NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ4LDYgKzE0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0
OgpAQCAtMTYxLDYgKzE2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAg
ICBkZWZhdWx0OgpAQCAtMjA3LDYgKzIwOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAg
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAg
ICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwogICAgICAg
ICAgICAgZGVmYXVsdDoKQEAgLTIxOCw2ICsyMjIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICAgICAgewogICAgICAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOwogICAgICAg
ICAgICAgZGVmYXVsdDoKQEAgLTI2Nyw2ICsyNzMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgICAgIHJldHVybiBpIDw9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKQor
ICAgICAgICAgICAgICAgICAgICAmJiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwog
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CkBAIC0yODUsNiArMjk0
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8PSBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgaSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVs
dDoKQEAgLTI5NiwxNSArMzA4LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNl
dEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPD0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzog
ewotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF4KSB7
Ci0gICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB4ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAg
SlNWYWx1ZSBvbGQgPSB4LmdldCgpOworICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmICghb2xkKSB7CiAgICAgICAgICAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdlVG9Db250aWd1b3Vz
KGdsb2JhbERhdGEsIHN0b3JhZ2UpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zMTUsNiArMzM4LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CkBAIC0zMzEsNiArMzU4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKQEAgLTUyOCw2ICs1NTYsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGZvby0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJ
bmRleE9uSG9sZSguLi4pOwogICAgICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5k
ZXhPbkhvbGVGb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIAor
ICAgICAgICAvLyBSZXR1cm5zIDAgaWYgY29udGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVh
dGVkIC0gZWl0aGVyIGJlY2F1c2UKKyAgICAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJz
ZSBvciBiZWNhdXNlIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVD
b250aWd1b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5
IHN0b3JhZ2UuIFVzZQogICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3Jt
IGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQogICAgICAgICAvLyBvYmplY3Qg
dG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUg
aXQKQEAgLTU0MCw2ICs1NzgsNDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1
cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKICAgICAgICAgfQogICAgICAg
ICAKKyAgICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzSW5kZXhl
ZFByb3BlcnRpZXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBBdHRlbXB0IHRvIGNvbnZlcnQgdG8gY29udGlndW91cyBpbmRleGluZyBz
dG9yYWdlLiBSZXR1cm5zIHRydWUgaWYgaXQgd2FzIGRvbmUsCisgICAgICAgIC8vIG9yIGZhbHNl
IGlmIGl0IGJhaWxlZCBvdXQgZm9yIGFueSByZWFzb24uIEFsc28gcmV0dXJucyB0cnVlIGlmIHRo
ZSBhcnJheSB3YXMgYWxyZWFkeQorICAgICAgICAvLyBjb250aWd1b3VzLgorICAgICAgICBib29s
IGF0dGVtcHRUb0NvbnZlcnRUb0NvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEhZW5zdXJlQ29udGlndW91c1Nsb3coZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFRv
Q29udmVydEFycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9m
SW5saW5lU3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBidXR0
ZXJmbHlPZmZzZXQoKQpAQCAtNjAyLDExICs2NzQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3Jh
Z2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRh
JiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwg
dW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlv
bik7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFs
RGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5
KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJv
d0V4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
Q29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKIAogICAgICAgICBib29sIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CkBA
IC02MTcsNyArNjk0LDM5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG5vdGlmeVBy
ZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAg
ICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAg
ICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNrbHkgdG8gc3VjY2VlZCBh
bmQgeW91J3JlIHN1cmUgdGhhdAorICAgICAgICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4K
KyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIGxlbmd0aCk7CiAKKyAgICAgICAgYm9vbCBhdHRlbXB0VG9Db252ZXJ0QXJyYXlTdG9yYWdl
VG9Db250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgQVNTRVJUKCFzaG91bGRVc2VT
bG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgaWYgKHN0
b3JhZ2UtPmxlbmd0aCgpICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEFTU0VSVCgh
aW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBhdHRlbXB0VG9D
b252ZXJ0Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhnbG9iYWxEYXRhLCBzdG9y
YWdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBhdHRlbXB0VG9Db252ZXJ0
Q29udGlndW91c0FycmF5U3RvcmFnZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworICAgICAgICAg
ICAgLy8gT2gsIHlvdSBkaWQgdGhpcyBjb252ZXJzaW9uIGJlZm9yZT8gV2VsbCwgeW91IGRvbid0
IGdldCB0byBkbyBpdCBhZ2Fpbi4gQmVjYXVzZQorICAgICAgICAgICAgLy8gdGhyYXNoaW5nIGlz
IG5ldmVyIGdvb2QuCisgICAgICAgICAgICBpZiAoZmFsc2UgJiYgc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEhhZEFycmF5U3RvcmFnZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBPaCwgeW91J3ZlIHVzZWQgc2hpZnQg
YW5kIHVuc2hpZnQ/IENoYW5jZXMgYXJlIHlvdSdsbCB1c2UgaXQgYWdhaW4sIGFuZCB3ZSdsbCBo
YXZlCisgICAgICAgICAgICAvLyB0byBjb252ZXJ0IGJhY2suIE5vIGNvbnRpZ3VvdXMgYXJyYXlz
IGZvciB5b3UhCisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1
b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKGdsb2JhbERhdGEsIHN0b3JhZ2UpOworICAgICAg
ICB9CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIApAQCAtNjQyLDYgKzc1MSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3Rh
dGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNj
cmlwdG9yJiBvbGQpOwogICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBkb3VibGVzIGFzIHB1dERp
cmVjdCgpIGJlY2F1c2UgKGEpIGNvbnRpZ3VvdXMgaW1wbGllcyB0aGF0IHRoZXJlIGFyZSBub3Qg
aW5kZXhlZCBzZXR0ZXJzIG9yIGluZGV4ZWQgcmVhZG9ubGllcywgYW5kIChiKSB0aGlzIGlzIG9u
bHkgZm9yIGNhc2VzIHdoZXJlIHdlIGRvbid0IHdhbnQgdGhlIHByb3BlcnR5IHRvIGhhdmUgYW55
IGF0dHJpYnV0ZXMuCisgICAgICAgIHZvaWQgcHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hp
bGVDb252ZXJ0aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAogICAgICAgICB2b2lkIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1v
ZGUsIEFycmF5U3RvcmFnZSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsK
QEAgLTY1MSw4ICs3NjMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBBcnJh
eVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IEJ1dHRlcmZseSogZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOwogICAg
ICAgICAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb252ZXJ0Q29udGlndW91c0Fy
cmF5U3RvcmFnZVRvQ29udGlndW91cyhKU0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKwog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKICAgICB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBKU1ZhbHVlOjpwdXRUb1ByaW1p
dGl2ZUJ5SW5kZXgoRXhlYwogCiBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMTI4OworICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qgc2l6ZSA9IDI1NjsKICAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKIAog
ICAgIGlmICghKnRoaXMpCkBAIC0yMTMsOSArMjEzLDEyIEBAIGNoYXIqIEpTVmFsdWU6OmRlc2Ny
aXB0aW9uKCkgY29uc3QKICAgICAgICAgdS5hc0RvdWJsZSA9IGFzRG91YmxlKCk7CiAgICAgICAg
IHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAlMDh4OiUwOHgsICVsZiIsIHUu
YXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0sIGFzRG91YmxlKCkpOwogI2VuZGlmCi0g
ICAgfSBlbHNlIGlmIChpc0NlbGwoKSkKLSAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNp
emUsICJDZWxsOiAlcCIsIGFzQ2VsbCgpKTsKLSAgICBlbHNlIGlmIChpc1RydWUoKSkKKyAgICB9
IGVsc2UgaWYgKGlzQ2VsbCgpKSB7CisgICAgICAgIHNucHJpbnRmKAorICAgICAgICAgICAgZGVz
Y3JpcHRpb24sIHNpemUsICJDZWxsOiAlcCAoJXA6ICVzLCAlcykiLAorICAgICAgICAgICAgYXND
ZWxsKCksIGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKS0+Y2xhc3NOYW1lLAorICAgICAgICAgICAgaW5kZXhpbmdUeXBlVG9TdHJpbmcoYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpKTsKKyAg
ICB9IGVsc2UgaWYgKGlzVHJ1ZSgpKQogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6
ZSwgIlRydWUiKTsKICAgICBlbHNlIGlmIChpc0ZhbHNlKCkpCiAgICAgICAgIHNucHJpbnRmKGRl
c2NyaXB0aW9uLCBzaXplLCAiRmFsc2UiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDEx
ICszMjMsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAg
IH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhp
bmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGlu
ZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5
cGUoKSkpOwotICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhl
ZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKSkKKyAgICBy
ZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpCisgICAg
ICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCk7Cit9CisKK05vblByb3Bl
cnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24o
KSBjb25zdAoreworICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZygpKQogICAgICAgICByZXR1
cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIAogICAgIHJldHVybiBBbGxvY2F0
ZUFycmF5U3RvcmFnZTsKQEAgLTU0Miw2ICs1NDYsMjUgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdAogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwog
ICAgIH0KICAgICAKKyAgICAvLyBTZWUgaWYgYW55IHByZXZpb3VzIHN0cnVjdHVyZSBoYXMgdGhl
IGluZGV4aW5nIHR5cGUgd2Ugd2FudC4gVGVybWluYXRlIHRoZSB3YWxrIGlmIHdlCisgICAgLy8g
ZW5jb3VudGVyIGEgdHJhbnNpdGlvbiB0aGF0IGRpZG4ndCBoYXZlIHRvIGRvIHdpdGggaW5kZXhp
bmcgdHlwZS4gVGhpcyByZWxpZXMgb24gdXMKKyAgICAvLyBuZXZlciBjaGFuZ2luZyB0aGUgaW5k
ZXhpbmcgdHlwZSBhbmQgc29tZXRoaW5nIGVsc2UgaW4gb25lIGdvLgorICAgIGZvciAoU3RydWN0
dXJlKiBjdXJyZW50ID0gc3RydWN0dXJlOyA7KSB7CisgICAgICAgIFN0cnVjdHVyZSogcHJldmlv
dXMgPSBjdXJyZW50LT5tX3ByZXZpb3VzLmdldCgpOworICAgICAgICBpZiAoIXByZXZpb3VzKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChwcmV2aW91cy0+bV9pbmRleGluZ1R5cGUg
PT0gY3VycmVudC0+bV9pbmRleGluZ1R5cGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y3VycmVudCA9IHByZXZpb3VzOworICAgICAgICBpZiAoY3VycmVudC0+bV9pbmRleGluZ1R5cGUg
PT0gaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY3VycmVu
dCBzdHJ1Y3R1cmUga25vd3MgdGhhdCBpdCdzIHRoZSBzb3VyY2Ugb2YgdHJhbnNpdGlvbnMuCisg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPm5vdGlmeVRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgp
OworICAgICAgICAgICAgLy8gTm90ZSwgd2Ugd291bGQgbGlrZSB0byBhZGQgdGhpcyB0byB0aGUg
dHJhbnNpdGlvbiB0YWJsZSwgYnV0IHdlIGNhbid0OiB0aGUgdGFibGUKKyAgICAgICAgICAgIC8v
IHJlbGllcyBvbiB0cmFuc2l0aW9ucyBiZWluZyBhY3ljbGljLgorICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+bV9w
cmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB0cmFu
c2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjk2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTUyLDcgKzE1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
Ym9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7
CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhp
bmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmco
KSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3Rv
cmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQog
ICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERh
dGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lv
biAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBzdGF0aWMgY29u
c3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVz
IHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4K
IC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBr
ZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2Nh
dGVDb250aWd1b3VzLAorICAgIFN3aXRjaFRvQ29udGlndW91cywKICAgICBBbGxvY2F0ZUFycmF5
U3RvcmFnZSwKICAgICBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UsCiAgICAgU3dpdGNoVG9T
bG93UHV0QXJyYXlTdG9yYWdlLApAQCAtNTcsMTIgKzU5LDE5IEBAIGlubGluZSB1bnNpZ25lZCB0
b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHkKIGlubGluZSBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdU
eXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlv
bikKIHsKICAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9jYXRlQ29udGln
dW91czoKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNT
bG93UHV0QXJyYXlTdG9yYWdlKSkpOworICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0NvbnRp
Z3VvdXM7CisgICAgY2FzZSBTd2l0Y2hUb0NvbnRpZ3VvdXM6CisgICAgICAgIEFTU0VSVChvbGRU
eXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0Fy
cmF5U3RvcmFnZSkgfCAoSGFzQ29udGlndW91cyB8IEhhZEFycmF5U3RvcmFnZSk7CiAgICAgY2Fz
ZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNBcnJh
eVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250aWd1b3VzKSB8IEhh
c0FycmF5U3RvcmFnZTsKICAgICBjYXNlIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToKLSAg
ICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICBy
ZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdl
OwogICAgIGNhc2UgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NFUlQo
b2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgIEFTU0VSVCghKG9sZFR5cGUgJiBI
YXNDb250aWd1b3VzKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNBcnJheVN0b3Jh
Z2UpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIEFkZEluZGV4ZWRBY2Nlc3Nv
cnM6CiAgICAgICAgIHJldHVybiBvbGRUeXBlIHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9N
YXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTYgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaGFzVHdvTwogICAgIHJldHVybiAhaGFzWmVyb09yT25l
Qml0c1NldCh2YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIHRpbWVz
VGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKFQgdmFsdWUpCit7CisgICAgLy8gTWF0aGVtYXRpY2Fs
bHkgZXF1aXZhbGVudCB0bzoKKyAgICAvLyAgICh2YWx1ZSAqIDMgKyAxKSAvIDI7CisgICAgLy8g
b3I6CisgICAgLy8gICAodW5zaWduZWQpY2VpbCh2YWx1ZSAqIDEuNSkpOworICAgIC8vIFRoaXMg
Zm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgcmV0dXJuIHZhbHVl
ICsgKHZhbHVlID4+IDEpICsgKHZhbHVlICYgMSk7Cit9CisKICNpZiAhQ09NUElMRVIoTVNWQykg
JiYgIUNPTVBJTEVSKFJWQ1QpICYmICFPUyhTT0xBUklTKQogdXNpbmcgc3RkOjppc2Zpbml0ZTsK
ICNpZiAhQ09NUElMRVJfUVVJUksoR0NDMTFfR0xPQkFMX0lTSU5GX0lTTkFOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166395</attachid>
            <date>2012-09-30 18:07:53 -0700</date>
            <delta_ts>2012-09-30 18:34:55 -0700</delta_ts>
            <desc>new approach: holy contiguous</desc>
            <filename>holycontiguous_1.patch</filename>
            <type>text/plain</type>
            <size>253578</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0wOS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSgpIGlnbm9yZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
ZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcHJldmVudGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDcgQEAKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENENEM0MTVGNkI2QkIw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8q
IExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjEz
RTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAv
KiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNjAxNUQx
NTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNjAxNUExNTYx
OThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9
OwogCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTYzLDYgKzE2NCw3IEBACiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0QzE0QzNDRDQzMDA3
QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYwMjAwMDQ3MkE5IC8qIERGR0J5dGVDb2Rl
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIg
LyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsg
fTsKIAkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3
RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdE
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9OwpAQCAtODQ1LDYgKzg0Nyw3IEBACiAJCTBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQzQ1
ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1v
blNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5
OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdD
IC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkzMyw2ICs5MzYsNyBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNh
bXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0
MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBh
dGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEwMiw3ICsyMTA2
LDYgQEAKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlw
ZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAotCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5
Q2FsbGJhY2suaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0
dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVy
LmggKi8sCkBAIC0yMTEwLDYgKzIxMTMsNyBAQAogCQkJCTkzM0EzNDlBMDM4QUU3QzYwMDg2MzVD
RSAvKiBJZGVudGlmaWVyLmggKi8sCiAJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVyLmggKi8sCiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAv
KiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKQEAgLTIyNjcsNiArMjI3MSw3IEBACiAJCQkJMTRC
RkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLAogCQkJCTE0MjBCRTdBMTBB
QTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAw
OTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0
NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1l
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0NzIsNTYgKzI0NzcsNTcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
aCAqLywKLQkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5j
cHAgKi8sCi0JCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIu
aCAqLywKLQkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKLQkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAotCQkJCTBGQjU0Njc2MTRGNTlB
RDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAogCQkJCTBGMjFDMjdF
MTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8sCi0JCQkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCi0JCQkJMEYyQkRD
MkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5
RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKKwkJCQkwRjgwMjNFOTE2MTM4
MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCisJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1
QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCisJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlk
U3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTcxNENBN0RDMTAwODVGM0M2IC8qIE1ldGhvZENhbGxM
aW5rU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5ODE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9k
Q2FsbExpbmtTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuaCAqLywKLQkJCQkwRkY0Mjc2RTE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUds
b2JhbFN0YXR1cy5jcHAgKi8sCi0JCQkJMEZGNDI3NkYxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29s
dmVHbG9iYWxTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggKi8sCiAJCQkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi8sCi0JCQkJMEYwQjgzQjYxNEJDRjhERjAwODg1
QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCi0JCQkJMEYwQjgzQjIxNEJDRjg1RTAwODg1
QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5jcHAgKi8sCi0JCQkJMEYwQjgzQjMxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovLAotCQkJCTBGMEI4M0FFMTRCQ0Y3MTQw
MDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAotCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywKLQkJCQlGRUI2M0FBMjE1OUI5REEzMDA4OTMyQTYg
LyogQ29tbWVudC5oICovLAotCQkJCTBGMEI4M0FDMTRCQ0Y2MDIwMDg4NUI0RiAvKiBMaW5lSW5m
by5oICovLAotCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJ
bmZvLmggKi8sCi0JCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmgg
Ki8sCi0JCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCiAJCQkJ
OTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi8sCiAJCQkJOTY5QTA3
OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGQkQ3RTY3MTQ0Nzk5
OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8sCisJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1
QjRGIC8qIENvZGVUeXBlLmggKi8sCisJCQkJRkVCNjNBQTIxNTlCOURBMzAwODkzMkE2IC8qIENv
bW1lbnQuaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovLAogCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAg
Ki8sCiAJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8s
CiAJCQkJOTY5QTA3OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKKwkJ
CQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCisJ
CQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKKwkJ
CQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLAor
CQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJ
CQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovLAorCQkJCTBG
MEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oICovLAorCQkJCTBG
MEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAogCQkJCTk2OUEwNzkz
MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCUJDRkQ4QzkwMEVFQjJF
RTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovLAogCQkJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuaCAqLywKKwkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAorCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAorCQkJCTBGMEI4M0FDMTRCQ0Y2
MDIwMDg4NUI0RiAvKiBMaW5lSW5mby5oICovLAorCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1
NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAorCQkJCTBGMEI4M0IyMTRCQ0Y4NUUwMDg4NUI0
RiAvKiBNZXRob2RDYWxsTGlua0luZm8uY3BwICovLAorCQkJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4
NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAqLywKKwkJCQkwRjkzMzI5NzE0Q0E3REMxMDA4
NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk4MTRDQTdE
QzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICovLAorCQkJCTBGQjU0NjdDMTRG
NUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKKwkJ
CQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oICovLAogCQkJCTk2OUEwNzk0MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwICovLAog
CQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKLQkJCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovLAotCQkJCTBGRDgyRTRG
MTQxREFFQTEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oICovLAorCQkJCTBGMkJEQzJCMTUx
RkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAorCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKKwkJCQkwRjlGQzhDMDE0RTFC
NUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAorCQkJCTBGOTMzMjk5
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAorCQkJCTBGOUZDOEMxMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCisJCQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZG
IC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwICovLAorCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRD
QjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggKi8sCiAJCQkJMTQyOUQ4ODMwRUQyMUMzRDAw
Qjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgKi8sCiAJCQkJMTQyOUQ4ODQwRUQyMUMzRDAwQjg5
NjE5IC8qIFNhbXBsaW5nVG9vbC5oICovLAorCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAv
KiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8sCisJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8q
IFNwZWN1bGF0ZWRUeXBlLmggKi8sCisJCQkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0
cnVjdHVyZVNldC5oICovLAogCQkJCTBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRjc2NkQzNzE1QUU0QTFBMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oICovLAogCQkJCUJDQ0Yw
RDBCMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgKi8sCkBAIC0yOTQ5
LDYgKzI5NTUsNyBAQAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgwMjNFQTE2MTM4
MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zNTU0LDYgKzM1NjEsNyBA
QAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhp
bmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikKKyAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2p1bXBzLmFw
cGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1fanVtcHMuc2l6ZSgpKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAoKSk7
CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hU
ZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1bXAo
TGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisjZGVm
aW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5
cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsKKwor
aW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRB
cnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJy
YXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAgQnlW
YWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
CisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJhZFR5
cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAg
ICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkp1
bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5
IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGludDE2
X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0
aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworaW5saW5l
IHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZvKQorewor
ICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgpAQCAtMjA5LDYgKzIxMCwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBy
ZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFsSW5m
byYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRCeVZh
bEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNp
emUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAg
ICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNl
dE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1
YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1
YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9zLmdy
b3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0IHsg
cmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbElu
Zm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAgICAg
ICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZh
bEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTksMTcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01P
REVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMyw5IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkxNSw2ICs5MjMsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBQdXRCeVZhbDoK
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAg
ICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBz
d2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsKQEAgLTkyNCwxMSArOTMzLDE4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
ICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzODMsOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1P
UlBISUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlM
ZW5ndGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmlu
Z2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRy
YWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0
LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBB
cnJheTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAg
ICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5
U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1
dCBtb2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBk
b24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1
ZXNzaW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5
OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1h
eVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZl
ID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6
CkBAIC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxl
KiBwCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Up
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJy
YXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgor
ICAgICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7
CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAh
cHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVu
ZGVjaWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwy
MiBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9m
Qm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSAmIElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChB
YnN0cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAg
ICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CkBAIC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9k
ZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091
dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1Rv
VGFpbCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAg
ICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRv
SG9sZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJh
eTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAg
ICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAi
QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAi
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsK
ICAgICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRp
Z3VvdXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMs
CisgICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
LAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAor
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3Rv
cmFnZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwK
QEAgLTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwg
aW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBC
bGFua1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2Us
CisgICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9y
YWdlLiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3Rv
cmFnZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAt
ODksNiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3Jh
Z2UiIGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3Rpbmcg
Y2hlY2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJv
dW5kczogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhf
Q09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9D
T05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGln
dW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNf
VE9fVEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29u
dGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9V
VF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMKICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVm
aW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCisjZGVmaW5lIElO
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZp
bmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRv
SG9sZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JB
R0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwogCiAv
LyBOZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIEVGRkVD
VEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgIFwK
KyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAg
ICAgXAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUwotI2RlZmlu
ZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAorI2RlZmluZSBTTE9X
X1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICBcCiAgICAgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfRUZGRUNURlVMX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBI
SUNfRUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhlbHBlcnMgZm9yIHBvbHltb3JwaGlj
IGFycmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9QT0xZTU9SUEhJ
Q19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19F
RkZFQ1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9M
WU1PUlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSos
IEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNl
c0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZs
eShBcnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUg
YXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQog
ewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFS
UkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4
ICsyNDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAg
IH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
KQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RB
SUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1P
UlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNh
c2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgbW9kZUlz
UG9seW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wg
cG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRl
c0FycmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNF
RChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0
cnVlOworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtMjA0LDYgKzMwNiw3IEBAIGlubGlu
ZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OSw3ICszNTIsMTEg
QEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzoKICAgICBj
YXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKQEAgLTI3Myw3
ICszODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBCiBpbmxp
bmUgYm9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTcxLDYgKzE1NzEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRv
R3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0xNTk0LDYgKzE1OTYsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDkgKzM1OSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBw
cm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZh
bC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgot
ICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rp
bmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSAr
MTIxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAg
IGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0u
cHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFn
ZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4
KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVk
c1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwg
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9Ob2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5v
ZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEz
NywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNo
aWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIDMpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAg
ICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2Rl
IGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wg
KCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRl
eCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFn
ZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQobW9k
ZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihh
cnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAg
ICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUp
LCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlp
ZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAg
ICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2UgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0
ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2Ug
aXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCArNDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9y
YWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRn
ZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQogICAgIHsKICAgICAgICAgaWYgKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9
PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2Rl
IGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAgICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4
ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUgKzQzMywyNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRl
eCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
ICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9m
aWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgp
KTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5v
ZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGlu
ZGV4LmluZGV4VW5jaGVja2VkKCkpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9n
cmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVk
Z2Uoc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQogICAgIH0KICAg
ICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJ
R1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgog
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xP
V19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01P
REVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4g
bm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3Rpbmcg
dmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgp
KTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBh
cnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTYwMSw2
ICs1OTcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAor
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgYXJyYXktPmJ1dHRl
cmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXktPmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgo
KSArIDEpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVj
KSk7Cit9CisgICAgICAgIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50
KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
QEAgLTEzMDksNiArMTMxNSwxNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
K2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Jmdsb2JhbERhdGEsIGV4ZWMpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsxMzMxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgpCit7CisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworCisgICAgaWYgKGluZGV4
KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihvYmplY3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91
YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3Qg
YikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgs
NyBAQCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0
ZSosIHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNm
WikoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0x
MTAsNiArMTEwLDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAog
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRl
Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBA
IC0xNDgsNiArMTQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
bwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNv
dmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTE5
Miw3ICsxOTQsOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiBj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlT
dG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3Rh
dGUqLCBKU09iamVjdCopOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK2NoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgaW50MzJfdCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2Vw
dGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0
dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxw
ZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1
YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSB8IEhhc0NvbnRpZ3VvdXMpKSk7CiAgICAgICAgIAogICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwOSwx
MCArMjEwOSwxMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwog
ICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywg
R1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1
bHRSZWcpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5v
ZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHRS
ZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpOworICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5k
cyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwor
fQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250
aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQ
UlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAg
IEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBpZiAoIW1heVN0b3Jl
VG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIHNsb3dD
YXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHBy
b3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKworICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisgICAgfQorCisg
ICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgIAor
ICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQ
dXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0
b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7CisgICAgQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBpZiAoaXNJbkJvdW5k
c0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICBlbHNlCisg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOworCisgICAgLy8gQ2hl
Y2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVl
c0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgeworICAgICAg
ICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRo
ZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRo
ZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0CisgICAgICAgIC8vIHBy
b2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICBpZiAoaXNTbG93UHV0
QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJh
bmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGlu
dmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5v
dCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQorICAgICAgICAgICAg
Ly8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSksIHRlbXBSZWcpOworICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0ZW1w
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUg
YXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5l
ZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuZ3RoRG9lc05v
dE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5vdEhvbGVWYWx1
ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgICAgICAgICAgCisgICAgLy8gU3RvcmUgdGhlIHZh
bHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
KyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7Ci0KKyAg
ICAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICBpbml0
Q29uc3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKQEAgLTI1OTUsNiArMjY5OSw1MCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzogewor
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0g
cmVzdWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dl
dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcp
OworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFz
ZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9k
ZS5jaGlsZDMoKSk7CkBAIC0yNjE1LDYgKzI3NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBT
TE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTI2MjcsMjEgKzI3
NzYsNjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAg
ICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFM
TF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
aG9sZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5n
cHIoKSk7Ci0KKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAg
ICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoaG9sZSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91Z2g7
CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNs
dWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gg
PSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJy
YXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAg
ICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChj
b21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0
b3JhZ2VSZWcsIHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJU
KGZhbGxUaHJvdWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOwogICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAog
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJy
YXlJbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CkBAIC0yNzM1LDggKzI5MjgsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
TU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CiAg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI3NTYsNTkgKzI5NDksNzYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
ICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVn
IHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYg
KGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91
bmRzKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7
IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9I
b2xlKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxl
IGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAg
ICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNv
IHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcu
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3
ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAotICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90
IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0gICAgICAgICAgICAgICAgICAg
IGlzSG9sZVZhbHVlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0
aGUgYXJyYXk7IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5n
dGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxv
dywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9
IHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAg
ICAgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcp
OworCisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7
CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKKyAgICAg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8g
b3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBO
b1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVh
cDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywg
dmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0
Y2guZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlh
cykgeworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisg
ICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVn
ID0gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUpOworCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAg
ICAgICBjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5
UmVnKTsKKwogICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3BlcnR5LnVz
ZSgpOwogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgp
OwotCi0gICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgICAgIGlm
ICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0
QWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
aXNIb2xlVmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5l
bXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywKQEAgLTI4MjAsNiArMzAzMCw2MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAg
ICBBU1NFUlQobm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3Jh
cnlSZWcgPSB0ZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZmFsbFRocm91Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wb3JhcnlSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBvcmFyeVJlZywgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAg
ICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHRlbXBvcmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250
aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQ29udGln
dW91c1B1dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1
ZVJlZywgdGVtcG9yYXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9s
eW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFs
bFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
dGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFn
ZVB1dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJl
ZywgdGVtcG9yYXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFs
bFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7CisKKyAgICAgICAgICAg
IGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZh
bHVlLnVzZSgpOworCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGRlY2lzaW9uIG9mIHdoZXRo
ZXIgb3Igbm90IHdlJ3JlIGluIHN0cmljdCBtb2RlIHNob3VsZCBiZSBtYWRlCisgICAgICAgICAg
ICAvLyBiYXNlZCBvbiB0aGUgaW5saW5lIGNhbGwgZnJhbWUsIG5vdCB0aGUgbWFjaGluZSBjb2Rl
IGJsb2NrLgorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCisg
ICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3Vs
dCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKQEAgLTI5NzMsMjYgKzMyNDAsNTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hp
bGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRP
ZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGgg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAKKyAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgLy8gUmVmdXNlIHRv
IGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsK
KyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIs
IFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7
Ci0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAg
ICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFn
ZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKLSAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxl
bmd0aEdQUiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAg
ICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTMwMDIsNDEg
KzMyOTcsNzcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgdmFsdWUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdl
TGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RvcmFnZUxl
bmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUu
YXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2Fz
ZSA9CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLAorICAgICAgICAgICAgICAgIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworCisgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisg
ICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHZhbHVlR1BSLCBi
YXNlR1BSKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVH
UFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwotICAgICAgICBz
ZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCB1bmRlZmluZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAg
bV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAg
ICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAg
ICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHZhbHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDAp
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAg
ICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aE1v
dmUoCi0gICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgc2V0
VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BS
KSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9u
QXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIp
KTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zMjEwLDggKzM1NDEsMTYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNp
emUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZSwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHNpemVH
UFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
c3RydWN0dXJlR1BSID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90RW1wdHkgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHNpemVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgbm90RW1w
dHkubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSksIHN0cnVjdHVyZUdQUik7
CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwgc3RydWN0dXJlR1BSLCBzaXplR1BSKTsK
KyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE1LDYgKzMxNSw0MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUm
IG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9
ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5PTl9BUlJBWV9D
T05USUdVT1VTX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzog
eworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1
dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNv
IHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUg
cHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsK
KyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKApA
QCAtMzUyLDYgKzM4NywyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUm
IG5vCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1f
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IGJlIHR1cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4gQnV0IHdlIGN1cnJlbnRseSBoYXZlIG5v
IGV2aWRlbmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgc28gd291bGQgYmUgcHJvZml0YWJsZSwg
bm9yIGRvIEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRoZSBwcmVzZW50IHRlc3QKKyAgICAgICAg
Ly8gY292ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgorICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkp
OworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgICAgICAgICAgKHBvbHltb3JwaGljSW5jbHVk
ZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpID8gSGFzQ29udGlndW91cyA6IDApCisgICAg
ICAgICAgICAgICAgICAgIHwgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5h
cnJheU1vZGUoKSkgPyBIYXNBcnJheVN0b3JhZ2UgOiAwKSkpKTsKKyAgICAgICAgCisgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3Vt
ZW50czo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTM5MCw3MiArNDQ4LDk4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAgICBBU1NFUlQoIW1vZGVBbHJl
YWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2Rl
KCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAKKyAgICBJbmRleGluZ1R5cGUgZGVz
aXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
KSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICBjYXNlIEFy
cmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sg
PSBIYXNDb250aWd1b3VzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1Rv
QXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5
U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRB
cnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJyYXlT
dG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJl
ZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKKyAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0
dXJlLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAgICAgICAgCi0g
ICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAg
ICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgCi0g
ICAgICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBo
YXZlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEluZGV4aW5nVHlwZSBkZXNpcmVkSW5kZXhpbmdU
eXBlTWFzayA9Ci0gICAgICAgICAgICBpc1Nsb3dQdXRBY2Nlc3Mobm9kZS5hcnJheU1vZGUoKSkg
PyAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkgOiBIYXNBcnJheVN0
b3JhZ2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJh
bmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGlu
Z1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSk7CisgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRoYXQg
Y29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0
dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOwor
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKLSAgICAgICAg
c2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKICAgICAg
ICAgCi0gICAgICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVy
Y2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAotICAgICAgICAvLyB0aGVuIHRoaXMg
bW9kZSB3b24ndCB3b3JrLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0
dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybykpKTsKKyAgICAvLyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVj
dCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nlc3Nlcy4gSWYgaXQgZG9lcywKKyAgICAv
LyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybykpKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5vdyBjYWxsIG91dCB0byBjcmVhdGUg
dGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBH
UFIpOworICAgIC8vIE5vdyBjYWxsIG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCisg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgc3dpdGNoIChub2RlLmFy
cmF5TW9kZSgpKSB7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91cywgdGVtcEdQUiwgYmFzZVJl
Zyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVn
KTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKLQotICAgICAgICAv
LyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgc3RydWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNw
aWxsaW5nIGRvZXMgbm90IHNhdmUKLSAgICAgICAgLy8gdGVtcG9yYXJpZXMuIE5vciB3b3VsZCBp
dCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRoZXIgd2F5IHdlJ3JlIHRhbGtpbmcKLSAg
ICAgICAgLy8gYWJvdXQgYSBsb2FkLgotICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5LCBjaGVj
ayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0
byBnZXQuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFja3dhcmRzIHNwZWN1bGF0
aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgCi0gICAgICAgIC8vIGJ5dGVjb2Rl
IG9wZXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVl
eGVjdXRlZC4KLSAgICAgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlz
IG5vdCB1c2VyLXZpc2libGUuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1
cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSkpOwotICAgICAgICAKLSAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHN0b3JhZ2VSZXN1bHQodGVtcEdQUiwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKLSAgICB9CisgICAgY2FzZSBBcnJheTo6
QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25FbnN1cmVDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcs
IHByb3BlcnR5UmVnKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworCisgICAgLy8gQWxhcywg
d2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBzcGlsbGluZyBk
b2VzIG5vdCBzYXZlCisgICAgLy8gdGVtcG9yYXJpZXMuIE5vciB3b3VsZCBpdCBiZSB1c2VmdWwg
Zm9yIGl0IHRvIGRvIHNvLiBFaXRoZXIgd2F5IHdlJ3JlIHRhbGtpbmcKKyAgICAvLyBhYm91dCBh
IGxvYWQuCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Cisg
ICAgICAgIAorICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUga2luZCBvZiBh
cnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KKyAgICAvLyBOb3RlIHRoYXQgdGhp
cyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4g
dGhlIAorICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYXJy
YXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4KKyAgICAvLyBUaGF0J3MgZmluZSwgc2luY2Ug
YXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KKyAgICBzcGVjdWxhdGlvbkNoZWNr
KAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBt
X2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKSk7CisgICAgICAgIAorICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIHN0b3JhZ2VSZXN1bHQodGVtcEdQUiwgbV9jb21waWxlSW5kZXgp
OwogfQogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJbmRleCBub2Rl
SW5kZXgpCkBAIC0zMjA1LDEyICszMjg5LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRBcnJheUxlbmcKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRv
ciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogCiAgICAgc3dpdGNo
IChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6IHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzogewogICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICAK
KyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTogewor
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOworICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCByZXN1bHRS
ZWcpOwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAg
ICAgICAgICAgIApAQCAtMzM5OSw2ICszNDk0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVSZWFsbG9jYXRlUHIKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBp
bGVJbmRleCk7CiB9CiAKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJG
b3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
KQoreworICAgIGlmICghcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoYXJyYXlNb2RlKSkK
KyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJl
YWxUZW1wb3JhcnkodGhpcyk7CisgICAgdGVtcG9yYXJ5LmFkb3B0KHJlYWxUZW1wb3JhcnkpOwor
ICAgIHJldHVybiB0ZW1wb3JhcnkuZ3ByKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBHUFJUZW1wb3Jhcnk7
CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9yOwogY2xhc3Mg
U3BlY3VsYXRpdmVKSVQ7CkBAIC0xMTY2LDYgKzExNjcsMTEgQEAgcHVibGljOgogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNp
emUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9E
RkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6
ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTEyMTgsMTEgKzEyMjQsMTYgQEAgcHVi
bGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTE0NjgsNiArMTQ3OSwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPWiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBpbnQzMl90IGFyZzIpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0
cihhcmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMTUzMSwx
MSArMTU0NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRU
YWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTIxNDksNiArMjE3MCw0
MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSYpOwogICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwog
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29udGlndW91c0dldEJ5
VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3Rv
cmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJl
ZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAg
IAorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAgLy8g
Rm9yIEFycmF5U3RvcmFnZSwgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIHN0b3JlcyB0byBob2xl
cyBleGNlcHQgaWYKKyAgICAgICAgLy8gd2UncmUgaW4gU2xvd1B1dCBtb2RlLgorICAgICAgICBj
YXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAK
KyAgICAgICAgLy8gRm9yIENvbnRpZ3VvdXMsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBhbnkg
YWNjZXNzIHRoYXQgbWF5IHN0b3JlCisgICAgICAgIC8vIHRvIHRoZSB0YWlsLgorICAgICAgICBj
YXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAg
Ly8gQWxsIHBvbHltb3JwaGljIG1vZGVzIG5lZWQgYW4gZXh0cmEgcmVnLgorICAgICAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BS
VGVtcG9yYXJ5JiwgQXJyYXk6Ok1vZGUpOworICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZv
clB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2Rl
LmFycmF5TW9kZSgpKTsKKyAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBp
bGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVy
dHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVn
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5
VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3Rv
cmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7CisgICAgCiAgICAgdm9p
ZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleCA9IDA7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xv
YmFsUmVzb2x2ZUluZm9JbmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAg
ICAgCkBAIC03MzgsNiArNzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Mo
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytp
KQogICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJ
bmZvKG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAg
IG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5m
by5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1
bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBp
bGF0aW9uSW5mb1tpXS5iYWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBk
b25lVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W2ldLmRvbmVUYXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdl
dCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93
UGF0aFRhcmdldCk7CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRy
ZXNzKTsKKyAgICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZh
bEluZm8oCisgICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5k
ZXgsCisgICAgICAgICAgICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9baV0uYXJyYXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2Rl
UHRyKGJhZFR5cGVKdW1wLCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cihyZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBt
X2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
b2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYg
aW5mbywgTGlua0J1ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlW
YWxDb21waWxhdGlvbkluZm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQor
ICAgICAgICAKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5
TW9kZSBhcnJheU1vZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0KQorICAgICAg
ICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGJhZFR5
cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQor
ICAgICAgICAgICAgLCBkb25lVGFyZ2V0KGRvbmVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CisgICAgICAgIEpJVEFycmF5
TW9kZSBhcnJheU1vZGU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhUYXJnZXQ7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIHJldHVybkFkZHJlc3M7CisgICAgfTsKKwogICAgIHN0cnVj
dCBTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGhvdFBhdGhPdGhlcjsKQEAgLTM0OCw2ICszNjcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4Owog
ICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8s
IG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5B
ZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9p
ZCBjb21waWxlR2V0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklU
IGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVP
ZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0
ZUNvbXBpbGVHZXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2sp
OworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2Rl
SW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1w
b2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJh
bXBvbGluZXMpCiAgICAgICAgIHsKQEAgLTM5Nyw2ICs0MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1
YkluZm8qLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSos
IFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5m
byosIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBSZXR1cm5BZGRyZXNzUHRyLCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJl
dHVybkFkZHJlc3NQdHIsIGJvb2wgZGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJh
eU1vZGUpOworICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KEpTR2xvYmFsRGF0YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3Qg
PSBmYWxzZSk7CkBAIC00NTIsNiArNDg4LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGlu
Z1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1
cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENh
c2UoQXJyYXlQcm9maWxlKik7CisgICAgICAgIAorICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3Nl
QXJyYXlNb2RlKEFycmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkg
aXMgaW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGV4aW5nIHR5
cGUuCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZCB6ZXJvIGV4dGVuZGVk
LiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4KKyAgICAgICAgLy8gU3RydWN0dXJlIGlzIGFscmVhZHkg
cHJvZmlsZWQuIFJldHVybnMgdGhlIHNsb3cgY2FzZXMuIEZhbGwtdGhyb3VnaAorICAgICAgICAv
LyBjYXNlIGNvbnRhaW5zIHJlc3VsdCBpbiByZWdUMCwgYW5kIGl0IGlzIG5vdCB5ZXQgcHJvZmls
ZWQuCisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3Rv
cmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAg
ICAgIAorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4g
cmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KKyAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0
b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKKyAgICAg
ICAgLy8gemVyby1leHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBh
bHJlYWR5IHByb2ZpbGVkLgorICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgorICAg
ICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogCiAgICAgICAgIGVu
dW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCkBAIC04
NzAsNiArOTIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3Jk
PiBtX2NhbGxzOwogICAgICAgICBWZWN0b3I8TGFiZWw+IG1fbGFiZWxzOwogICAgICAgICBWZWN0
b3I8UHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvPiBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRp
b25JbmZvOworICAgICAgICBWZWN0b3I8QnlWYWxDb21waWxhdGlvbkluZm8+IG1fYnlWYWxDb21w
aWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZv
PiBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8TWV0
aG9kQ2FsbENvbXBpbGF0aW9uSW5mbz4gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvOwogICAg
ICAgICBWZWN0b3I8SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwpAQCAtODc5LDYgKzkzMiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwog
CiAgICAgICAgIHVuc2lnbmVkIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworICAg
ICAgICB1bnNpZ25lZCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleDsKICAgICAgICAgdW5zaWduZWQg
bV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5m
b0luZGV4OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSwyMyArNDQ1LDIyIEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKIAogaW5saW5lIHZvaWQgSklU
OjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBs
ZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBS
ZWdpc3RlcklEIHN0b3JhZ2VQdHIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRp
YWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGluaXRpYWxMZW5ndGgpKTsKKyAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0g
c3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHNpemVfdCBpbml0aWFsU3Rv
cmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIGluaXRpYWxMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKworICAgIGxvYWRQdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5hZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNoKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsKIAogICAg
IC8vIFdlIGFsbG9jYXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGdh
cmJhZ2UgY29sbGVjdGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJheSBp
bml0aWFsaXphdGlvbi4KICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3Jh
Z2UsIHNpemVvZihJbmRleGluZ0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxs
b2NhdGUgdGhlIGNlbGwgZm9yIHRoZSBhcnJheS4KLSAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CiAgICAg
ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0FycmF5LCBmYWxzZT4oc2NyYXRjaCwgY2VsbFJl
c3VsdCwgc3RvcmFnZVB0cik7CiAKLSAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZv
IGluIHRoZSBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9y
ZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpu
dW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVu
Z3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpzcGFy
c2VNYXBPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4g
dGhlIGluZGV4aW5nIGhlYWRlci4KKyAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Mo
c3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
c3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXds
eSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgogICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFk
ZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CkBAIC00NzAs
MTIgKzQ2OSwxMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVz
UmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAg
c3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Cisg
ICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAjZWxzZQogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkp
KTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdp
c3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZih1aW50MzJfdCkpLCBzdG9yYWdl
UHRyKTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0
ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC01NTksMTAgKzU1
OCwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGCiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9I
b2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXco
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJy
YXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJh
eU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhwcm9m
aWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwor
ICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTI5
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY2MSw3ICsxNjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkp
IHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1l
KCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTE2ODAsOCArMTY4MSwxMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFs
bG9jYXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9w
ZXIgc3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGlu
dCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3Bp
ZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQorICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6aXNP
dmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IobGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBXZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxs
LgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHVuc2lnbmVkIGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMTExLDE3ICsxMTIs
NjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKIAotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdU
MSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSks
IHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7Cisg
ICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dp
dGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUp
OworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxh
YmVsKCk7CisgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEp1bXAgcmVzdWx0T0sgPSBi
cmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgcmVz
dWx0T0subGluayh0aGlzKTsKKyNlbmRpZgogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0
LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29u
dGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAg
ICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyKSwgcmVnVDApOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xv
d1B1dEFycmF5U3RvcmFnZSkpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBTY2FsZVB0ciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2LDE0ICsxOTQsOTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9y
IGxlbmd0aCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKICAg
ICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisgICAgCiAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KGJhc2UsIHJlZ1QyKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVn
VDIpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5j
YWxsKGRzdCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CiB9CiAKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4Owor
ICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6
CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhi
YWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwor
ICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBi
eVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAg
cGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5
cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwor
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sK
KyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAg
UGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAg
ICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMsIG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENv
ZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxB
dE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAg
cGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZl
ciwKKyAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwg
cmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywg
RnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOworfQorCiB2b2lkIEpJVDo6
Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0
LCBSZWdpc3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBGaW5hbE9iamVjdE1vZGUg
ZmluYWxPYmplY3RNb2RlKQogewogICAgIEFTU0VSVChzaXplb2YoSlNWYWx1ZSkgPT0gOCk7CkBA
IC0yMjYsNyArMzUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlv
bgogewogICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHBy
b3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdl
cihyZWdUMSk7CkBAIC0yMzQsMzEgKzM1OCw5MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKEluc3RydWN0aW9uCiAgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRd
LnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBKSVRBcnJheU1vZGUgbW9k
ZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBj
YXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVj
b2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJh
bmNoVGVzdFB0cihaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgZW1pdFdyaXRlQmFy
cmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3Vv
dXMpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7CiAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKKyAgICBMYWJlbCBz
dG9yZVJlc3VsdCA9IGxhYmVsKCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDMpOwotICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0gICAg
SnVtcCBlbmQgPSBqdW1wKCk7CisgICAgc3RvcmVQdHIocmVnVDMsIEJhc2VJbmRleChyZWdUMiwg
cmVnVDEsIFNjYWxlUHRyKSk7CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIG91
dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwogICAgIAotICAgIGVt
cHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENh
c2UoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVz
dWx0LCB0aGlzKTsKLQotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIHN0
b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKLSAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICBlbWl0QXJyYXlQcm9m
aWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAg
IAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CiAKLSAgICBlbmQubGluayh0aGlzKTsKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAor
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBKdW1wIG91dE9mQm91
bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwg
cmVnVDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MpOworICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CisgICAgc3RvcmVQdHIocmVn
VDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpKSk7CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIG91dE9mQm91
bmRzLmxpbmsodGhpcyk7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7CisgICAgc3RvcmUzMihyZWdUMywgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgIGp1bXAoKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjcwLDEzICs0NTQsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
cHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBi
YXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNl
IG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW4gdmVjdG9yIGNo
ZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRzCisgICAgCisgICAg
TGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFs
Q2FsbCh0aGlzLCBjdGlfb3BfcHV0X2J5X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRB
cmd1bWVudChyZWdUMCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0
eSwgcmVnVDIpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1Qy
KTsKLSAgICBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0
QnlWYWxDYWxsLmNhbGwoKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNh
bGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2luZGV4KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NTYs
NyArODQ2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1Qy
KTsKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChyZWdUMiwgcmVn
VDEsIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KTsKICAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJc0FycmF5KSk7Ci0gICAgSnVt
cCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
SGFzQXJyYXlTdG9yYWdlKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzQ29udGlndW91
cykpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhl
IHN0b3JhZ2UKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxNCw2ICsyNDE0LDMwIEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9
CiAKK3N0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKAorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKK3sKKyAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJz
Y3JpcHQuaXNTdHJpbmcoKSkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZh
bHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHkoY2FsbEZyYW1lLCBhc1N0cmluZyhzdWJz
Y3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7CisgICAgICAgIHVpbnQzMl90
IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZh
bHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgeworICAgICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIHJl
dHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZykpOworICAg
ICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwg
aSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBp
KTsKKyAgICB9CisKKyAgICBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpCisgICAgICAgIHJldHVybiBi
YXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5h
c0NlbGwoKSktPnByaXZhdGVOYW1lKCkpOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxs
RnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsK
KyAgICByZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKK30KKwogREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWwpCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMjQyMywzNSArMjQ0NywzNyBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKICAgICAKLSAgICBpZiAoTElL
RUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKLSAgICAg
ICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJv
cGVydHkoY2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkg
ewotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAm
JiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUu
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9m
ZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRC
eVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAgQVNTRVJUKCFieVZhbEluZm8u
c3R1YlJvdXRpbmUpOworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZh
bHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG9iamVjdC0+c3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5n
VHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7CisgICAgICAgICAg
ICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpCisgICAgICAgICAgICAgICAg
SklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUp
OwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwo
Y2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgU1RVQl9SRVRVUk5fQUREUkVTUyk7Cisg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKK30KKyAgICAKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9n
ZXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwogCi0gICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90
IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZh
bHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewotICAgICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNU
VUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZykp
OwotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJ
bmRleChjYWxsRnJhbWUsIGkpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAgICB9Ci0g
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKLSAgICB9Ci0KLSAgICBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJ
bnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCkpOwotICAgICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKLSAgICB9CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxG
cmFtZTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9T
dHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwotICAgIENIRUNLX0ZPUl9FWENF
UFRJT05fQVRfRU5EKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3Nb
MF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFd
LmpzVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFt
ZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgIENIRUNL
X0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAgICAgCkBAIC0yNTAyLDIzICsyNTI4LDE0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
LURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwpCitzdGF0aWMgdm9pZCBw
dXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUg
c3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxs
RnJhbWU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxE
YXRhOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1
ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUo
KTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKLQog
ICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90
IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVl
KTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpKSkKLSAgICAg
ICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUp
OworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2
YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9
IGVsc2UKQEAgLTI1MjgsMTEgKzI1NDUsNTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfcHV0X2J5X3ZhbAogICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5h
bWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCksIHZhbHVlLCBz
bG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFt
ZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAg
ICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1
dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBp
ZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8g
YW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgp
KTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUs
IHNsb3QpOwogICAgICAgICB9CiAgICAgfQorfQorCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF9wdXRfYnlfdmFsKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOworCisgICAgaWYg
KGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAg
Ly8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICBBU1NF
UlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOworICAg
ICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlm
IChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgICAg
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoaW5k
ZXhpbmdUeXBlKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5
TW9kZSkKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVU
VVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHV0
QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUpOworCisgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxs
RnJhbWU7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1
ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOwor
ICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVl
KTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw2ICszNzAs
NyBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0
X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVS
TkFMOworICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVy
aWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pbihT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfaW5zdGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKQEAgLTQ0Niw2ICs0NDcsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9TVFVC
IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4KFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAgdm9p
ZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0ZXJfc2V0
dGVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NU
VUIgY3RpX29wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24o
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIF9sbGlu
dF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNd
LCB0MgogICAgIGFycmF5UHJvZmlsZSh0MiwgdDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXks
IC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9w
R2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRpeiB0MiwgKEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJh
eVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93
CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDEKICAgICBsb2FkcCA2NFtQQiwgUEMsIDhdLCB0
MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwCkBAIC0xMTQ3LDE0ICsx
MTQ3LDI1IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0s
IHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDEpCiAgICAgbG9hZGlzIDI0W1BCLCBQQywg
OF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAg
ICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMK
KyAgICBidGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKwor
ICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
cHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZGlzIDhbUEIsIFBDLCA4
XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4XSwgdDIKKyAgICBidHB6IHQyLCAub3BHZXRCeVZh
bFNsb3cKKyAgICBqbXAgLm9wR2V0QnlWYWxEb25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91
czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdl
LCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAg
IGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rv
clt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRC
eVZhbERvbmU6CiAgICAgc3RvcmVwIHQyLCBbY2ZyLCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwg
UEMsIDhdLCB0MAogICAgIHZhbHVlUHJvZmlsZSh0MiwgdDApCkBAIC0xMjI2LDI5ICsxMjM3LDQ5
IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVb
dDFdLCB0MgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQy
LCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cK
ICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwgdDAKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
SW50MzIodDAsIHQyLCAub3BQdXRCeVZhbFNsb3cpCi0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4
aTJwIHQzLCB0MwogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAg
YmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0
b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92
ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3Vs
dDoKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQzLCB0MSkKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENv
bnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091
dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMg
MjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAg
ICB3cml0ZUJhcnJpZXIodDEpCisgICAgc3RvcmVwIHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3Bh
dGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzOgorICAgIGJpYWVxIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgaWYgVkFMVUVfUFJPRklMRVIKKyAgICAgICAgbG9h
ZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQKKyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3Jl
aSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xl
bmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9w
UHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9w
UHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKy5vcFB1dEJ5
VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQy
CisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCiAgICAgd3JpdGVCYXJyaWVyKHQx
KQotICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdCisgICAg
c3RvcmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0KICAgICBkaXNwYXRj
aCg1KQogCi0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eToK
KyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjpt
X3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwogICAgIGlmIFZBTFVFX1BST0ZJTEVS
Ci0gICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisg
ICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVBy
b2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCi0gICAgYWRkaSAxLCBBcnJheVN0
b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4
aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlW
YWxTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDIsIHQxCisgICAgYWRkaSAxLCB0MywgdDEKICAg
ICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9w
dWJsaWNMZW5ndGhbdDBdCi0gICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBqbXAg
Lm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6CiAg
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHV0X2J5X3ZhbCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOSBAQCBlbmQKIAog
IyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgogY29uc3QgSXNBcnJh
eSA9IDEKK2NvbnN0IEhhc0NvbnRpZ3VvdXMgPSAyCiBjb25zdCBIYXNBcnJheVN0b3JhZ2UgPSA4
Ci1jb25zdCBBbGxBcnJheVR5cGVzID0gMTUKK2NvbnN0IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2Ug
PSAxNgogCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJl
dmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29u
dmVudGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpCiAKIGlubGluZSBib29sIGlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCiB7Ci0gICAgcmV0
dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNp
dHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKKyAgICByZXR1cm4gbGVuZ3RoIC8gbWluRGVuc2l0
eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwogfQogCiBpbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5k
ZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5o
CShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBtX3NwYXJzZU1hcC5jb3B5RnJvbShvdGhlci5tX3NwYXJzZU1hcCk7CiAgICAg
ICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7Ci0gICAgICAgIG1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOwogICAgIH0KICAgICAKICAgICBi
b29sIGluU3BhcnNlTW9kZSgpCkBAIC03MywxNSArNzIsMTMgQEAgcHVibGljOgogICAgIAogICAg
IFdyaXRlQmFycmllcjxTcGFyc2VBcnJheVZhbHVlTWFwPiBtX3NwYXJzZU1hcDsKICAgICB1bnNp
Z25lZCBtX2luZGV4QmlhczsKLSAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB1aW50cHRyX3QgbV9w
YWRkaW5nOwogI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwog
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0
b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
aW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9pbmRleEJpYXMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VNYXBPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3NwYXJzZU1hcCk7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJh
c2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAgfQogICAgIAor
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdzIGhhbmR5LCBi
dXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9mIGJ1dHRlcmZs
aWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNoYXIqIHBvaW50
ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQorICAgIAogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4
aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRl
cigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCk7IH0K
QEAgLTcwLDkgKzc5LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5k
ZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsg
fQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGlu
Z0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3Bl
cnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1
cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50MzJfdCB2ZWN0
b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5ndGgoKTsgfQor
ICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4aW5nSGVhZGVy
KCktPnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1
aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5ndGgodmFsdWUp
OyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRleGluZ1BheWxv
YWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAgIEFycmF5U3Rv
cmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5U3RvcmFn
ZT4oKTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygpIHsgcmV0dXJu
IGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9CisgICAgCisgICAg
c3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
b250aWd1b3VzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVy
Zmx5Kj4oY29udGlndW91cyk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5
U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJl
c2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNTRVJUKGhhc0lu
ZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoaGFz
QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBBU1NFUlQobnVt
YmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpKTsK
ICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRvIHJld3Jp
dGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAgLTE2Myw3ICsx
NjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RyCiAKIGlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVf
dCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQg
aW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCAr
NDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdAogCiBpbmxp
bmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0b3JhZ2Uoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
IHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFoYXNJbmRleGVk
UHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIHJldHVybiAw
OwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5k
ZXhpbmdUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBjaGFyKiBpbmRleGluZ1R5
cGVUb1N0cmluZyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN0YXRpYyBjaGFy
IHJlc3VsdFsxMjhdOworICAgIGNvbnN0IGNoYXIqIGJhc2ljTmFtZTsKKyAgICBzd2l0Y2ggKGlu
ZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXMpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgICAg
ICBiYXNpY05hbWUgPSAiTm9uQXJyYXkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhDb250
aWd1b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBiYXNpY05hbWUgPSAi
QXJyYXlDbGFzcyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91
czoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1l
ID0gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBiYXNpY05hbWUgPSAiVW5rbm93biEiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgc25wcmludGYoCisgICAgICAgIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCksICIlcyVzJXMi
LCBiYXNpY05hbWUsCisgICAgICAgIChpbmRleGluZ1R5cGUgJiBIYWRBcnJheVN0b3JhZ2UpID8g
InxIYWRBcnJheVN0b3JhZ2UiIDogIiIsCisgICAgICAgIChpbmRleGluZ1R5cGUgJiBNYXlIYXZl
SW5kZXhlZEFjY2Vzc29ycykgPyAifE1heUhhdmVJbmRleGVkQWNjZXNzb3JzIiA6ICIiKTsKKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGlu
Z1R5cGU7CiAKIC8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRp
ZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9
IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAgICAgICAgICA9
IDI7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9
IDg7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgICA9
IDE2OwogCkBAIC00Miw5ICs0MywxMSBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhh
dmVJbmRleGVkCiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Citz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAg
PSBIYXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2UgICAgICAgID0gSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFycmF5
U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAgICAg
ICAgICAgICAgICA9IElzQXJyYXk7IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXkiIGJ1
dCB0aGlzIHdvdWxkIGxlYWQgdG8gZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAgID0g
SXNBcnJheSB8IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5
V2l0aEFycmF5U3RvcmFnZSAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwog
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlICAg
ID0gSXNBcnJheSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU1LDEwIEBA
IHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJheTog
ICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91czog
ICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBBUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZQpAQCAtNzYsNiArODMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyKEluZAogICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBlKTsK
IH0KIAorc3RhdGljIGlubGluZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7
Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSkKIHsKICAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3Rv
cmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKQEAgLTg2LDYgKzk4LDggQEAgc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZVNsb3dQdXQoSW5kZQogICAgIHJldHVybiAhIShpbmRleGlu
Z1R5cGUgJiBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciogaW5kZXhp
bmdUeXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9zc2libGUg
dHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAg
ICA9IDMxOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw5ICszMzEsOCBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
SlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBi
b29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0
aW9uLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJl
YWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZv
bGxvd2luZyAnaWYnLgpAQCAtMzk2LDEyICszOTUsNjkgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTQXJyYXk6
OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJv
d0V4Y2VwdGlvbikKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgaWYgKCFuZXdMZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYKSB7CisgICAgICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZSgKKyAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAorICAg
ICAgICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFs
RGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBpZiAobmV3TGVuZ3Ro
ID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBkbyBm
YXN0IHB1c2guCisgICAgICAgICAgICB8fCAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVgKKyAgICAgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5n
dGgsIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMobV9idXR0ZXJmbHkpKSkpIHsKKyAgICAgICAg
ICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4
ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3
TGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVu
Z3RoOykKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsK
KyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9u
LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNI
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3Ao
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtsZW5ndGhdOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbbGVuZ3RoXS5jbGVhcigpOworICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAtNDI1LDI2
ICs0ODEsMjggQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICAgICAgSlNWYWx1
ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIC8vIENh
bGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5k
eCBhbmQgdHJ1ZS4KLSAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhl
YywgaW5kZXgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRv
IGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9m
IE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgICAgICBzZXRM
ZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOwotICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAg
ICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNI
KCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IGluZGV4ID0gZ2V0QXJyYXlMZW5ndGgoKTsKKyAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1
bWVudCBpbmR4LgorICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJn
dW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
cywgZXhlYywgaW5kZXgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUg
dG8gZGVsZXRlIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisgICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFy
Z3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCisgICAgc2V0TGVuZ3RoKGV4ZWMsIGlu
ZGV4LCB0cnVlKTsKKyAgICAvLyBSZXR1cm4gZWxlbWVudC4KKyAgICByZXR1cm4gZWxlbWVudDsK
IH0KIAogLy8gUHVzaCAmIHB1dEluZGV4IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCB3aXRoIHR3byBz
bWFsbCBkaWZmZXJlbmNlcy4KQEAgLTQ1OCw2ICs1MTYsMjYgQEAgdm9pZCBKU0FycmF5OjpwdXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0g
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGgg
PiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5k
ZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgbGVuZ3RoLCB2YWx1
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0
aCgpOwogICAgICAgICBpZiAoYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShleGVj
LCBvbGRMZW5ndGgsIHZhbHVlLCB0cnVlKSkgewpAQCAtNTkyLDYgKzY3MCw0NiBAQCBzdGF0aWMg
aW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydChjCiAgICAgcmV0dXJuIGNvZGVQb2ludENv
bXBhcmUodmEtPnNlY29uZCwgdmItPnNlY29uZCk7CiB9CiAKK3RlbXBsYXRlPEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGU+Cit2b2lkIHNvcnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0
YSYgY2FsbERhdGEsIFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2
YW50TGVuZ3RoKQoreworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQ29udGln
dW91cyB8fCBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgdW5zaWduZWQgbmV3
UmVsZXZhbnRMZW5ndGg7CisgICAgY29tcGFjdEZvclNvcnRpbmc8aW5kZXhpbmdUeXBlPigKKyAg
ICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAgICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQsCisgICAgICAgIG5ld1JlbGV2YW50TGVuZ3RoKTsKKyAgICAKKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGRhdGEgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpOworICAgIAor
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlICYmIGFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGFs
bFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3
UmVsZXZhbnRMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWRhdGFbaV0uaXNOdW1iZXIoKSkg
eworICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1i
ZXJzKQorICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSk7CisgICAgCisgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2gg
aXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQorICAgIC8vIGFsc28g
ZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNl
ciB2aXNpYmxlCisgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2Yg
ZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICBxc29ydChkYXRhLCBuZXdSZWxldmFudExlbmd0
aCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQp
OworICAgIHJldHVybjsKK30KKwogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3Qg
Q2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUo
KSk7CkBAIC02MDAsNDEgKzcxOCw5OCBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNT
dGF0ZSogZXhlCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHNv
cnROdW1lcmljVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAg
ICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7Ci0gICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgc29ydE51bWVyaWNWZWN0b3I8
QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6
CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRW
ZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNp
Z25lZCByZWxldmFudExlbmd0aCkKK3sKKyAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworCisgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJp
bmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQg
YmFzZWQgb24gdGhhdC4KKyAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50
IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBh
IGxhcmdlIHRlbXBvcmFyeQorICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1
cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRo
b2RzIHRoYXQgcmV0dXJuCisgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1
bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCiAg
ICAgICAgIAotICAgICAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgICAg
ICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICBhbGxWYWx1ZXNB
cmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMocmVsZXZhbnRM
ZW5ndGgpOworICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAgICAgICAgICAgcmV0dXJuIHNvcnQoZXhl
YywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgIEhlYXA6OmhlYXAo
dGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKICAgICAgICAgCi0gICAgICAgIC8v
IEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0
aGFuIG1lcmdlc29ydC4gV2UKLSAgICAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29y
dCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAgICAgICAgLy8g
c2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZh
bHVlcy4KLSAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKKyAgICBib29sIGlz
U29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZWxldmFudExlbmd0aDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBiZWdpbltp
XS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
dmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVl
cyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAg
IH0KKyAgICAgICAgCisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMg
dG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgLy8g
YSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCiAgICAgICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgdmFsdWVzW2ld
LnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKKyAgICAg
ICAgCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEhlYXA6OmhlYXAo
dGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAgICAKKyAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUs
IGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3Vs
ZCBiZSBPKE4pIHJhdGhlcgorICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAgICAgCisjaWYg
SEFWRShNRVJHRVNPUlQpCisgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKKyAgICAg
ICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgIGVsc2UKKyAgICAgICAg
bWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbHNlCisgICAgLy8gRklY
TUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFi
bGUgc29ydC4KKyAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxl
IHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0Lgor
ICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbmRpZgorICAgIAorICAg
IC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFu
ZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBlbnN1
cmVDb250aWd1b3VzTGVuZ3RoKGdsb2JhbERhdGEsIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICBpZiAoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpIHsK
KyAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVs
ZXZhbnRMZW5ndGgpOworICAgICAgICAgICAgYmVnaW4gPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8IHJl
bGV2YW50TGVuZ3RoKQorICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChyZWxl
dmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJl
Z2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogfQogCiB2b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQpAQCAtNjQ1LDc4ICs4MjAsMzAgQEAgdm9p
ZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZG5nVW5kZWZpbmVkOworICAgICAgICB1
bnNpZ25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICAgICAgY29tcGFjdEZvclNvcnRpbmc8QXJy
YXlXaXRoQ29udGlndW91cz4oCisgICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOworICAgICAgICAKKyAg
ICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAg
ICAgIGV4ZWMsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWdu
ZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0
aEFycmF5U3RvcmFnZT4oCisgICAgICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOwogICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlm
IChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1
ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250
IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFi
bGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdo
IGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRl
cywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1
c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgICAgIC8vIHJhbmRvbSBvciBv
dGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVu
Y3Rpb24gaW5jb25zaXN0ZW50LgotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5n
UGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIGlmICgh
dmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgICAgICAKLSAg
ICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFs
dWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1
ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBj
b250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVy
Ci0gICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAgICAg
ICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmly
c3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBT
b3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEg
ZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBi
ZSBPKE4pIHJhdGhlcgotICAgICAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0gICAgICAgIAotI2lm
IEhBVkUoTUVSR0VTT1JUKQotICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQot
ICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihW
YWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwot
I2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxp
a2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KLSAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIg
ZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJz
IHBlcmZvcm0gYSBzdGFibGUgc29ydC4KLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZh
bHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWly
Rm9yUVNvcnQpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcg
ZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFn
ZSwKLSAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwg
bnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCi0gICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkgewotICAgICAgICAgICAgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOwotICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3Qp
OwotICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7Ci0gICAgICAgIAorICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0
aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgZXhlYywgc3RvcmFnZS0+bV92ZWN0b3IsIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAg
IApAQCAtODAyLDc1ICs5MjksNzIgQEAgc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlD
b21wYXJlIAogICAgIHN0YXRpYyBoYW5kbGUgbnVsbCgpIHsgcmV0dXJuIDB4N0ZGRkZGRkY7IH0K
IH07CiAKLXZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFy
ZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQor
dGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6c29ydFZl
Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBj
YWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VSVCghaW5TcGFy
c2VJbmRleGluZ01vZGUoKSk7CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9PSBzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgotICAgICAgICByZXR1cm47CisgICAg
Ly8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBm
dW5jdGlvbiBvciBpbiB0b051bWJlci4KICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdub3Jl
cyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJl
ci4KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGls
ZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAgICAgICAg
Ly8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgICAgICBBU1NFUlQoc3RvcmFnZS0+
bGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpKTsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICAgICAg
cmV0dXJuOworICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBi
dXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAvLyBpZiBhIGxhcmdl
ciBhcnJheSBpcyBwYXNzZWQuCisgICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpOworICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3Rv
cmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgdW5zaWdu
ZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3NwYXJzZU1hcCA/
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdUeXBlPigpOworICAgIHVuc2lnbmVk
IG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5n
VHlwZSkgJiYgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID8gYXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZUNvdW50
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlD
b21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0g
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7Ci0gICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOwotICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOwotICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKLSAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7CisgICAgQVZMVHJlZTxB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlz
IGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4
ZWM7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVu
Y3Rpb247CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlw
ZTsKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsK
KyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKICAgICAgICAg
Ci0gICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywg
anNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlSlMpCisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2Fs
bCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29t
cGFyZUZ1bmN0aW9uKSwgMikpOwogICAgICAgICAKLSAgICAgICAgaWYgKCF0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmICghdHJlZS5h
YnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8v
IEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2
ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAgICAgICAvLyByaWdodCBvdXQg
ZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgIC8v
IEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2
ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgIC8vIHJpZ2h0IG91dCBmcm9t
IHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCiAgICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICAgICAgdW5zaWduZWQgbnVtVW5k
ZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBu
dW1VbmRlZmluZWQgPSAwOwogICAgICAgICAKLSAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBh
cnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBh
bmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCi0gICAgICAgIGZvciAo
OyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZh
bHVlID0gdjsKLSAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICB9
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpOwotICAgICAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgICAgICBpZiAodi5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Ci0gICAgICAgICAgICAgICAgICAgIHRyZWUuaW5z
ZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7Ci0gICAg
ICAgICAgICAgICAgfQorICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1p
c3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwg
b3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgorICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5n
RGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgIGlmICghdiB8
fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgIHRyZWUuaW5z
ZXJ0KG51bURlZmluZWQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVk
OyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4
aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7CisgICAgICAgIGlmICh2KSB7CisgICAg
ICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsrbnVtVW5kZWZp
bmVkOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgdHJlZS5p
bnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CisgICAgfQogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbmV3
VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgdW5zaWdu
ZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CiAgICAg
ICAgIAorICAgIGlmIChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CiAgICAg
ICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwogICAgICAgICAgICAg
aWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewpAQCAt
ODc5LDcgKzEwMDMsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
CiAgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFw
LT5lbmQoKTsKQEAgLTg5MSwzMSArMTAxNSw0OCBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFy
c2VJbmRleE1hcCgpOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKLSAgICAgICAgQVNTRVJU
KHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID49IG51bURlZmluZWQpOworICAgIEFT
U0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKICAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2Vk
IHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgICAg
IC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgorICAgIC8vIEZJWE1FOiBJZiB0
aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUg
Zm9sbG93aW5nIG1pZ2h0IGJlCisgICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0
bHkuCiAgICAgICAgIAotICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3Rv
cmFnZS4KLSAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwg
NDQ+OjpJdGVyYXRvciBpdGVyOwotICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7
Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgewotICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgICAgICsraXRlcjsK
LSAgICAgICAgfQorICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgor
ICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0
b3IgaXRlcjsKKyAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4
aW5nVHlwZT4oKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICArK2l0ZXI7CisgICAgfQogICAgICAgICAKLSAg
ICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgIC8vIFB1dCB1
bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5l
ZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGlu
ZGV4aW5nVHlwZT4oKVtpXS5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgCi0gICAgICAgIC8vIEVu
c3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7
CisgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJv
ZWQgb3V0LgorICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+
KClbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29u
c3QgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01v
ZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAg
IGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgc29ydFZlY3RvcjxBcnJheVdpdGhD
b250aWd1b3VzPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIHNvcnRWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVj
LCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgICAgIApAQCAtOTI2LDk3ICsxMDY3LDExNyBAQCB2b2lkIEpTQXJyYXk6OnNv
cnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhl
Y1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykKIHsKKyAgICB1bnNpZ25l
ZCBpID0gMDsKKyAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3I7CisgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHZlY3RvckVuZCA9IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCi0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0g
ICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgZm9y
ICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkKLSAgICAg
ICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHZlY3RvckVuZCA9IG1pbihz
dG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IHZl
Y3RvckVuZDsgKytpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3Rv
cltpXTsKKyAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGFyZ3Mu
YXBwZW5kKHYuZ2V0KCkpOwogICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPmxl
bmd0aCgpOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZv
aWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHVpbnQzMl90IGxlbmd0aCkKIHsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7Cisg
ICAgCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7CiAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Cisg
ICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgIHZlY3Rv
ckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgICAgICB1bnNpZ25l
ZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAg
ICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICghdikKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5n
ZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Cisg
ICAgICAgIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CisgICAgCisgICAg
Zm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgIGlmICghdikKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIH0KKyAgICAK
KyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3Vt
ZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKLXVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JT
b3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGU+Cit1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkJiBudW1EZWZpbmVkLCB1bnNpZ25lZCYgbmV3UmVs
ZXZhbnRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAg
ICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAK
LSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJy
YXlDbGFzczoKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
dW5zaWduZWQgbXlSZWxldmFudExlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4o
KTsKKyAgICAKKyAgICBudW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQg
PSAwOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAgICAg
IHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgZm9yICg7IG51bURlZmluZWQgPCBteVJl
bGV2YW50TGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhp
bmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgaWYgKCF2
IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZp
bmVkKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZp
bmVkXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAg
ICAgaWYgKHYpIHsKLSAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAg
ICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91
dFdyaXRlQmFycmllcih2KTsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1EZWZpbmVkOyBpIDwgbXlSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUg
diA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7CisgICAgICAgIGlmICh2
KSB7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsr
bnVtVW5kZWZpbmVkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4aW5n
RGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHYpOwogICAgICAgICB9CisgICAgfQogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbmV3VXNl
ZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgbmV3UmVsZXZh
bnRMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgIAorICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBi
cmVhazsKICAgICAgICAgCi0gICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKICAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5n
dGggKz0gbWFwLT5zaXplKCk7CiAgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9s
ZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBub3QsCkBAIC0xMDMzLDIyICsxMTk0LDE3IEBAIHVuc2ln
bmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2wKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQo
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNs
ZWFyKCk7Ci0gICAgICAgIAotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
bmV3VXNlZFZlY3Rvckxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudW1EZWZpbmVk
OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQ1JBU0go
KTsKICAgICB9CisgICAgICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCBuZXdSZWxldmFudExlbmd0aDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdU
eXBlPigpW2ldLnNldFVuZGVmaW5lZCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1JlbGV2
YW50TGVuZ3RoOyBpIDwgbXlSZWxldmFudExlbmd0aDsgKytpKQorICAgICAgICBpbmRleGluZ0Rh
dGE8aW5kZXhpbmdUeXBlPigpW2ldLmNsZWFyKCk7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDEzICs5OSwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCisg
ICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQg
c29ydE51bWVyaWNWZWN0b3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENh
bGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpOworICAgICAgICAKKyAg
ICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBz
b3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSosIFdyaXRlQmFycmllcjxVbmtub3duPiogYmVn
aW4sIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRl
PEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgc29ydFZlY3RvcihFeGVj
U3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRh
Jik7CisKKyAgICAgICAgYm9vbCBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgQXJyYXlTdG9yYWdlKik7
CiAgICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJs
ZSk7CiAKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCBi
b29sLCB1bnNpZ25lZCk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29y
dGluZyhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZT4KKyAgICAgICAgdm9pZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKTsKICAgICB9
OwogCisgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOworICAgICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3Ro
KHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKSk7CisgICAgICAgIGhlYWRlci5zZXRQ
dWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlKAor
ICAgICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgaGVhZGVyLCBoZWFkZXIudmVjdG9y
TGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisKICAgICBpbmxpbmUg
QnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewogICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKApAQCAtMTIxLDcgKzE0MSwxNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0g
QXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUNv
bnRpZ3VvdXNBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlCisgICAgICAgICAgICAgICAgICAgfHwgKGluaXRpYWxMZW5ndGggJiYgc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKKyAgICAg
ICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRp
YWxMZW5ndGgpOworICAgICAgICB9CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAgICAgIGFycmF5LT5maW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTMzLDE1ICsxNjEs
MjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAg
ICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAs
IDApOwotICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFk
ZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOwotICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICBzdG9y
YWdlLT5tX2luZGV4QmlhcyA9IDA7Ci0gICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFy
KCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3Ro
OworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENvbnRpZ3VvdXMpKSB7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1
ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxl
bmd0aCh2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5n
dGgoaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2b2lkKiB0
ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2
ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAs
IDApOworICAgICAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5n
SGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgICAgICAgICBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0
YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAg
ICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEy
OTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVj
dD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSk7CiAKICAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7
CisgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Fy
cmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJv
dG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1b3VzKSk7CisgICAgbV9hcnJheVN0cnVjdHVy
ZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlw
ZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAgICAgbV9hcnJheVN0cnVjdHVyZUZv
clNsb3dQdXQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwg
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOwogICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5
U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3Rv
dHlwZS5nZXQoKSkpOwogCkBAIC00MDcsNiArNDA4LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBKU0FycmF5IGFs
bG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZyb20KICAgICAv
LyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMgU2xvd1B1dC4KICAg
ICBtX2FycmF5U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJl
Rm9yU2xvd1B1dC5nZXQoKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsK
ICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgaW5kZXhl
ZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xvdyBraW5kIG9mCiAgICAgLy8gaW5kZXhlZCBzdG9y
YWdlLgpAQCAtNDgyLDYgKzQ4NCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1lU2NvcGVTdHJ1
Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FyZ3VtZW50c1N0cnVj
dHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmUp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlV2l0aEFy
cmF5U3RvcmFnZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1
Y3R1cmVGb3JTbG93UHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9ib29s
ZWFuT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9j
YWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI2LDYgKzEyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX25hbWVTY29wZVN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9hcmd1bWVudHNTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmU7IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0
cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1l
LgorICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlV2l0aEFy
cmF5U3RvcmFnZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1
dCBhcyBzb29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCiAgICAgICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0OwogICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZTsK
QEAgLTI2MSw3ICsyNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBu
YW1lU2NvcGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25hbWVTY29wZVN0cnVjdHVyZS5n
ZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFyZ3VtZW50c1N0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXJndW1lbnRzU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSog
YXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5U3RydWN0dXJlLmdldCgpOyB9
CisgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UuZ2V0KCk7IH0KICAg
ICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSB7IHJldHVybiAmbV9hcnJheVN0
cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJh
eVN0b3JhZ2UoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IH0K
ICAgICAgICAgU3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSog
Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tD
b25zdHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrRnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KCk7IH0KQEAgLTQ2Niw3ICs0NjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApCiAg
ICAgewotICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGluaXRpYWxMZW5ndGgg
PyBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIDogZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoKTsKICAgICB9CiAKICAgICBp
bmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluaXRpYWxMZW5ndGggPSAwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMjQgKzEzMSw0
MCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgICAg
ICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUg
YXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogY3VycmVudFRhcmdldDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogY3VycmVudFNvdXJjZTsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAg
ICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQobmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBu
ZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5l
d0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
Y291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291
bnQtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291
cmNlKyspLT5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudFRh
cmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cjsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpOyAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0LiBXaHkgaXNuJ3Qg
dGhpcyBwdWJsaWNMZW5ndGgoKT8KICAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVudFRh
cmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwpA
QCAtMTU4LDYgKzE3NCw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0
ZXIKICAgICAgICAgCiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgog
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKGJ1dHRlcmZseS0+Y29udGlndW91cygpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcCkKQEAgLTIzNCw2ICsyNTMsMjAgQEAgYm9vbCBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAodmFs
dWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkK
QEAgLTM1MSw2ICszODQsMTYgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsK
ICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5OworICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVydHlO
YW1lXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CkBAIC0zNjEsMTUgKzQwNCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CiAgICAgICAgIAotICAgICAgICAvLyBVcGRhdGUgbGVuZ3RoICYgbV9u
dW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICAv
LyBVcGRhdGUgbGVuZ3RoIGFzIG5lY2Vzc2FyeS4KICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+
PSBsZW5ndGgpIHsKICAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnR5TmFtZSArIDE7CiAgICAg
ICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKLSAgICAgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQot
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAKLSAg
ICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVl
KTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTM4Mywx
NyArNDI0LDE1IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltwcm9wZXJ0eU5hbWVdOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKICAgICAgICAgCi0gICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0lu
VmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCBhcyBuZWNlc3Nh
cnkuCiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgICBp
ZiAodGhpc09iamVjdC0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdykpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsgMTsKICAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwogICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpIHsKICAgICAgICAg
ICAgIGlmICh0aGlzT2JqZWN0LT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqZWN0LCB2YWx1ZSk7CkBAIC00NDMsNiArNDgyLDExIEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKIHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNp
ZW50LCBhcyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNvbnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6
ZQorICAgICAgICAvLyB0aGlzIGNhc2UgaWYgd2UgZXZlciBjYXJlZC4KKyAgICAgICAgZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFs
RGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAg
IGJyZWFrOwpAQCAtNDY1LDYgKzUwOSwyNCBAQCB2b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5j
ZU9mSW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZShnbG9iYWxEYXRh
KTsKIH0KIAorV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENv
bnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgSW5kZXhpbmdUeXBlIG9s
ZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNTRVJUX1VOVVNFRChv
bGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOworICAgIEFTU0VSVCghc3Ry
dWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgIEFTU0VSVCghaW5kZXhpbmdT
aG91bGRCZVNwYXJzZSgpKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChs
ZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAg
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxv
Y2F0ZUNvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJm
bHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygp
OworfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCkKIHsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKTsKQEAgLTQ3OCw5ICs1NDAsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVB
cnJheVN0b3JhCiAgICAgcmVzdWx0LT5zZXRMZW5ndGgobGVuZ3RoKTsKICAgICByZXN1bHQtPnNl
dFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xl
YXIoKTsKLSAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+
bV9pbmRleEJpYXMgPSAwOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVy
ZSgpLT5zdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSk7CisgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24o
KSk7CiAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0
dXJlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDkwLDE2ICs1NTEsOTAgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogICAgIHJldHVybiBjcmVhdGVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25l
ZCBuZWVkZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkg
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0
eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOworICAgIAorICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAg
ICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgCisgICAgbWVtY3B5KAorICAgICAgICBuZXdCdXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgIHByb3BlcnR5
U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIAorICAgIEFycmF5U3RvcmFnZSog
bmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFn
ZS0+c2V0VmVjdG9yTGVuZ3RoKG5lZWRlZExlbmd0aCk7CisgICAgbmV3U3RvcmFnZS0+c2V0TGVu
Z3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3U3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
KyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgbWVtY3B5KAorICAgICAgICBu
ZXdTdG9yYWdlLT5tX3ZlY3RvciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgcHVibGljTGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5l
d0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3U3RvcmFnZTsKK30KKwor
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9u
KQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK0FycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VU
cmFuc2l0aW9uKCkpOworfQorCitXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTT2JqZWN0OjplbnN1
cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2Uo
KSB8fCBzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERh
dGEsIDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsK
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpKTsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0
SW5kZXhpbmcoKSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEpOworICAgICAgICAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKworQnV0dGVyZmx5KiBKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3Jh
Z2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5n
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSktPmJ1dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSktPmJ1dHRlcmZseSgpOwor
ICAgICAgICByZXR1cm4gQnV0dGVyZmx5Ojpmcm9tQ29udGlndW91cyhjcmVhdGVJbml0aWFsQ29u
dGlndW91cyhnbG9iYWxEYXRhLCAwKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CkBAIC01
MDcsNiArNjQyLDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEK
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBt
YWRlIHdheSBtb3JlIGVmZmljaWVudCwgaWYgd2UgY2FyZWQuCisgICAgICAgIHJldHVybiBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9i
YWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAg
ICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAg
ICAgIApAQCAtNTI2LDYgKzY2NSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVB
cnJheVN0b3JhCiB2b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewor
ICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9j
YXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6IHsKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNo
VG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKQEAgLTU2OSw4ICs3MTMsNyBAQCB2b2lkIEpTT2JqZWN0
OjpzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhCiAgICAgaWYgKHNob3VsZFVzZVNsb3dQdXQoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IG5ld1N0cnVjdHVyZSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKLSAgICBzZXRTdHJ1
Y3R1cmUoZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlKTsKKyAgICBzd2l0Y2hUb1Nsb3dQdXRBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdp
dGhDeWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUp
CkBAIC03MDQsMTYgKzg0NywyMCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJm
bHk7CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xl
YXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICAgICAgdmFsdWVT
bG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgIGlmIChpIDwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5jbGVhcigpOworICAgICAgICBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0g
bWFwLT5ub3RGb3VuZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmli
dXRlcyAmIERvbnREZWxldGUpCkBAIC04NzcsNiArMTAyNCwxNyBAQCB2b2lkIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5t
X2J1dHRlcmZseTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtMTI4NiwxMSArMTQ0NCwxMCBAQCB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgoaSArIDEpOwogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUg
dG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0
b3IuCi0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIGkgKyAxKSkpIHsKKyAgICAgICAgaWYgKGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIGkgKyAxKSkgewogICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdl
IHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2
ZWN0b3IuCiAgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVz
ZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAg
JiBhZGQgdGhlIHZhbHVlLgpAQCAtMTMxMywxNiArMTQ3MCwxNCBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgfQogCiAgICAgLy8gV2UgYXJlIGN1cnJlbnRs
eSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBz
by4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJz
ZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0
aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgp
IHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwg
IWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAg
IC8vIFdlIHdpbGwgY29udGludWUgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlz
IHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWls
cy4KKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgewogICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMs
IHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRh
dGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoLgogICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKLSAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKIAogICAgIC8v
IENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRl
IHRoZSBtYXAuCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKQEAgLTEzMzMsMTEgKzE0ODgsNDEgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3RvckxlbgogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRo
ZSB2ZWN0b3IuCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3Jb
aV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKICAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKIH0K
IAordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNX
aXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSk7CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIAorICAg
IC8vIEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4g
dGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIG9yIGVxdWFsIHRvIHRo
ZSB2ZWN0b3IgbGVuZ3RoLgorICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgCisgICAgaWYgKGkgKyAxID49IE1BWF9BUlJBWV9JTkRFWAorICAgICAgICB8
fCAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYCisgICAgICAgICAgICAmJiAhaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihpLCBjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKG1fYnV0dGVyZmx5KSkp
KSB7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
QWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnB1dEVu
dHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbigKKyAgICAgICAgdGlt
ZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oaSArIDEpLAorICAgICAgICBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKKyAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlS
aWdodCgKKyAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgIG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCisgICAgICAgIG5ld1ZlY3Rvckxl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpCisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEp
OworICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZh
bHVlKTsKK30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OwpAQCAtMTM0OCwxNyArMTUzMywyOCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdT
aG91bGRCZVNwYXJzZSgpKSB7Ci0gICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRh
KSk7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csCisgICAg
ICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAg
ICAgIGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIDAsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlm
ICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpIHsKLSAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bmVlZHNTbG93
UHV0SW5kZXhpbmcoKSkgeworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwg
MCwgaSArIDEpKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIGkgKyAx
KVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgICAgIAotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkp
OwotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFsdWUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4NCw4ICsxNTgwLDEwIEBA
IHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFB1dERpcmVjdEluZGV4TW9kZSBtb2RlLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCisgICAgCiAg
ICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2Yg
dGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGFycmF5U3RvcmFnZSgpID09IHN0b3Jh
Z2UpOwogICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIHx8IGF0dHJpYnV0
ZXMpOwogICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAKQEAgLTE0MDMsMTIgKzE2
MDEsMTAgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAg
ICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9y
LCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgogICAgICAgICBpZiAoTElLRUxZKAog
ICAgICAgICAgICAgICAgICFhdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgJiYgKGlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpCiAgICAgICAg
ICAgICAgICAgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewog
ICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBs
aWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCiAgICAgICAg
ICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9y
IHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUg
dmFsdWUuCkBAIC0xNDMyLDEzICsxNjI4LDExIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG8KIAogICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBj
aGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCiAgICAgLy8gV2Ugd2ls
bCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2
ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1
bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciAr
IG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCBhdHRyaWJ1dGVzIHx8
ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKKyAgICBpZiAo
bWFwLT5zcGFyc2VNb2RlKCkgfHwgYXR0cmlidXRlcyB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJl
Y3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOwogCi0gICAgLy8gUmVy
ZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFs
dWVzSW5WZWN0b3IuCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rv
ckxlbmd0aC4KICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Ci0gICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CiAKICAgICAvLyBDb3B5IGFsbCB2
YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgog
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CkBA
IC0xNDQ5LDggKzE2NDMsNiBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3RvCiAKICAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAo
IXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAg
IHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMTQ2NywxNCArMTY1OSwzMSBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3RvCiAgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewotICAgICAgICBpZiAo
aW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwotICAgICAgICBpZiAoIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKLSAgICAgICAgCi0gICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwg
Z2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJz
ZSgpIHx8IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywg
aSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBt
b2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIGkgKyAxKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAg
ICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICB9CisgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFs
dWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0OTksMTIgKzE3MDgsNyBA
QCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgZWxzZSBpZiAo
IWN1cnJlbnRWZWN0b3JMZW5ndGgpCiAgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHN0ZDo6bWF4
KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOwogICAgIGVsc2UgewotICAgICAgICAvLyBN
YXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0
aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8g
ICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAg
ICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAg
ICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+
IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gdGlt
ZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oZGVzaXJlZExlbmd0aCk7CiAgICAgfQogCiAgICAg
QVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKQEAgLTE1MjQsOSArMTcy
OCwxMCBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgICAg
IHZlY3Rvckxlbmd0aCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVu
Z3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIENSQVNIKCk7CkBAIC0xNTM1LDYgKzE3NDAsMjYgQEAgQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVj
dG9yTGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOwogfQogCit1bnNpZ25lZCBKU09iamVj
dDo6Y291bnRWZWN0b3JFbGVtZW50c0luQXJyYXlTdG9yYWdlKEFycmF5U3RvcmFnZSogc3RvcmFn
ZSkKK3sKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXMgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9
IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7IGkt
LTspIHsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgbnVt
VmFsdWVzKys7CisgICAgfQorICAgIHJldHVybiBudW1WYWx1ZXM7Cit9CisKK3Vuc2lnbmVkIEpT
T2JqZWN0Ojpjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KQor
eworICAgIHVuc2lnbmVkIG51bVZhbHVlcyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBpZiAoYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0pCisgICAgICAgICAgICBudW1WYWx1ZXMrKzsKKyAgICB9CisgICAgcmV0
dXJuIG51bVZhbHVlczsKK30KKwogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0
ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJz
ZSB2YWx1ZSBtYXAKQEAgLTE1NDMsNiArMTc2OCwxMCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFz
ZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIAorICAgIGlmIChuZXdMZW5ndGgg
Pj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihuZXdMZW5ndGgsIGNvdW50VmVjdG9yRWxlbWVudHNJbkFycmF5U3RvcmFnZShzdG9yYWdl
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0
b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpOwpAQCAtMTU3NCw2ICsxODAzLDIzIEBAIGJvb2wgSlNPYmplY3Q6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBKU09i
amVjdDo6ZW5zdXJlQ29udGlndW91c0xlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsK
KyAgICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICAKKyAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKSB7Cisg
ICAgICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAg
ICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCB0cnVlLAorICAgICAgICAgICAgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgICAgIGxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworICAgICAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0
aCk7CisgICAgfQorICAgIAorICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBs
ZW5ndGgpCisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKK30K
KwogQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgQVNT
RVJUKG5ld1NpemUgPiBvbGRTaXplKTsKQEAgLTE2MDIsNiArMTg0OCwxNyBAQCBib29sIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG9iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IodmFsdWUsIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDgsOCArMTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKQEAgLTE2MSw4ICsxNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFM
TF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtMjA3LDYgKzIwOSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAg
ICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKICAgICAgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkg
PCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMjY3LDkgKzI3MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCkBAIC0yODUsOCArMjkyLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yOTYsMTUgKzMwNCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJ
bmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwotICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgeCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICAgICAgICAgIHgu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3Jh
Z2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSAr
IDEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ZGVmYXVsdDoKQEAgLTMxNSwxMCArMzI3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9i
YWxEYXRhLCB0aGlzLCB2KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTMzMSw2ICszNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgp
OwpAQCAtNTI4LDYgKzU0NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gZm9vLT5h
dHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKC4uLik7CiAgICAgICAgIGJvb2wgYXR0
ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShFeGVjU3RhdGUqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKICAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgMCBpZiBjb250aWd1b3Vz
IHN0b3JhZ2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQorICAgICAgICAvLyBp
bmRleGluZyBzaG91bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2aW5nIGEgYmFkIHRp
bWUuCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91cyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFko
aGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEg
bW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCiAgICAgICAgIC8vIHRoaXMgaWYg
eW91J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQg
dGhlCiAgICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9y
YWdlLCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdApAQCAtNTQwLDYgKzU2OSwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERh
dGEpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4
ZWRTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKExJS0VMWShoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coZ2xvYmFsRGF0
YSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRl
cmZseU9mZnNldCgpCkBAIC02MDIsMTEgKzYzOSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFn
ZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEm
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1
bnNpZ25lZCBuZWVkZWRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxE
YXRhJik7CiAgICAgICAgIAogICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHko
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93
RXhjZXB0aW9uKTsKIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhD
b250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKTsKICAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOwogCiAgICAgICAgIGJvb2wgaW5j
cmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKQEAg
LTYxNyw2ICs2NTksNDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbm90aWZ5UHJl
c2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAg
ICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoRXhlY1N0YXRlKiwgdW5z
aWduZWQgaW5kZXgsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAg
ICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2tseSB0byBzdWNjZWVkIGFu
ZCB5b3UncmUgc3VyZSB0aGF0CisgICAgICAgIC8vIHRoZSBhcnJheSBpcyBjb250aWd1b3VzLgor
ICAgICAgICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGNvdW50VmVjdG9yRWxlbWVu
dHNJbkFycmF5U3RvcmFnZShBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpOworICAgICAgICB1bnNpZ25l
ZCBjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KTsKKyAgICAg
ICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogaW5kZXhpbmdEYXRhKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB1bnNpZ25lZCBy
ZWxldmFudExlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbigKKyAgICAgICAgICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkBAIC02NTEsNyArNzM0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAg
ICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7Cisg
ICAgICAgIEJ1dHRlcmZseSogZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYp
OwogICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJm
bHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2
aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRv
UHJpbWl0aXZlQnlJbmRleChFeGVjCiAKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29u
c3QKIHsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAxMjg7CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBzaXplID0gMjU2OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVd
OwogCiAgICAgaWYgKCEqdGhpcykKQEAgLTIxMyw5ICsyMTMsMTIgQEAgY2hhciogSlNWYWx1ZTo6
ZGVzY3JpcHRpb24oKSBjb25zdAogICAgICAgICB1LmFzRG91YmxlID0gYXNEb3VibGUoKTsKICAg
ICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICUwOHg6JTA4eCwgJWxm
IiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5k
aWYKLSAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlv
biwgc2l6ZSwgIkNlbGw6ICVwIiwgYXNDZWxsKCkpOwotICAgIGVsc2UgaWYgKGlzVHJ1ZSgpKQor
ICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpIHsKKyAgICAgICAgc25wcmludGYoCisgICAgICAgICAg
ICBkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwICglcDogJXMsICVzKSIsCisgICAgICAgICAg
ICBhc0NlbGwoKSwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCkt
PmNsYXNzSW5mbygpLT5jbGFzc05hbWUsCisgICAgICAgICAgICBpbmRleGluZ1R5cGVUb1N0cmlu
Zyhhc0NlbGwoKS0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkp
OworICAgIH0gZWxzZSBpZiAoaXNUcnVlKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9u
LCBzaXplLCAiVHJ1ZSIpOwogICAgIGVsc2UgaWYgKGlzRmFsc2UoKSkKICAgICAgICAgc25wcmlu
dGYoZGVzY3JpcHRpb24sIHNpemUsICJGYWxzZSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjMsMTEgKzMyMywxNSBAQCBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVy
CiAgICAgfQogfQogCi1Ob25Qcm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRJ
bmRleGluZ1RyYW5zaXRpb24oKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dElu
ZGV4aW5nKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4
aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgaWYgKGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpKQor
ICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkK
KyAgICAgICAgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKTsKK30KKworTm9u
UHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbigpIGNvbnN0Cit7CisgICAgaWYgKG5lZWRzU2xvd1B1dEluZGV4aW5nKCkpCiAgICAgICAg
IHJldHVybiBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgCiAgICAgcmV0dXJuIEFs
bG9jYXRlQXJyYXlTdG9yYWdlOwpAQCAtNTQyLDYgKzU0NiwyNSBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRp
b247CiAgICAgfQogICAgIAorICAgIC8vIFNlZSBpZiBhbnkgcHJldmlvdXMgc3RydWN0dXJlIGhh
cyB0aGUgaW5kZXhpbmcgdHlwZSB3ZSB3YW50LiBUZXJtaW5hdGUgdGhlIHdhbGsgaWYgd2UKKyAg
ICAvLyBlbmNvdW50ZXIgYSB0cmFuc2l0aW9uIHRoYXQgZGlkbid0IGhhdmUgdG8gZG8gd2l0aCBp
bmRleGluZyB0eXBlLiBUaGlzIHJlbGllcyBvbiB1cworICAgIC8vIG5ldmVyIGNoYW5naW5nIHRo
ZSBpbmRleGluZyB0eXBlIGFuZCBzb21ldGhpbmcgZWxzZSBpbiBvbmUgZ28uCisgICAgZm9yIChT
dHJ1Y3R1cmUqIGN1cnJlbnQgPSBzdHJ1Y3R1cmU7IDspIHsKKyAgICAgICAgU3RydWN0dXJlKiBw
cmV2aW91cyA9IGN1cnJlbnQtPm1fcHJldmlvdXMuZ2V0KCk7CisgICAgICAgIGlmICghcHJldmlv
dXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHByZXZpb3VzLT5tX2luZGV4aW5n
VHlwZSA9PSBjdXJyZW50LT5tX2luZGV4aW5nVHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjdXJyZW50ID0gcHJldmlvdXM7CisgICAgICAgIGlmIChjdXJyZW50LT5tX2luZGV4aW5n
VHlwZSA9PSBpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBj
dXJyZW50IHN0cnVjdHVyZSBrbm93cyB0aGF0IGl0J3MgdGhlIHNvdXJjZSBvZiB0cmFuc2l0aW9u
cy4KKyAgICAgICAgICAgIHN0cnVjdHVyZS0+bm90aWZ5VHJhbnNpdGlvbkZyb21UaGlzU3RydWN0
dXJlKCk7CisgICAgICAgICAgICAvLyBOb3RlLCB3ZSB3b3VsZCBsaWtlIHRvIGFkZCB0aGlzIHRv
IHRoZSB0cmFuc2l0aW9uIHRhYmxlLCBidXQgd2UgY2FuJ3Q6IHRoZSB0YWJsZQorICAgICAgICAg
ICAgLy8gcmVsaWVzIG9uIHRyYW5zaXRpb25zIGJlaW5nIGFjeWNsaWMuCisgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9u
LT5tX3ByZXZpb3VzLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAg
IHRyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPSBhdHRyaWJ1dGVzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDEyOTY5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTIsNyArMTUyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAg
ICAgICBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBj
b25zdDsKICAgICAgICAgCi0gICAgICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRJ
bmRleGluZ1RyYW5zaXRpb24oKSBjb25zdDsKKyAgICAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRl
eGluZygpIGNvbnN0OworICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkQXJy
YXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgp
OyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2dsb2JhbE9iamVjdC5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJl
dmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmkKIC8vIFN1cHBvcnQgZm9yIGF0dHJp
YnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0byBwcm9wZXJ0
aWVzLgogLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHBvcnRpb24gb2Yg
dGhlIGtleSBzaG91bGQgYmUgMC4KIGVudW0gTm9uUHJvcGVydHlUcmFuc2l0aW9uIHsKKyAgICBB
bGxvY2F0ZUNvbnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UsCiAgICAgQWxsb2Nh
dGVTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSwK
QEAgLTU3LDEyICs1OCwxNiBAQCBpbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3Bl
cnR5CiBpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xk
VHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNoICh0
cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3VvdXM6CisgICAgICAgIEFTU0VS
VCghKG9sZFR5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkp
KTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1b3VzOwogICAgIGNhc2UgQWxs
b2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQXJyYXlTdG9y
YWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNBcnJh
eVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
IHJldHVybiBvbGRUeXBlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJu
IChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAg
ICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgQVNTRVJUKG9sZFR5
cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgSGFzQ29u
dGlndW91cykpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQXJyYXlTdG9yYWdlKSB8
IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBZGRJbmRleGVkQWNjZXNzb3JzOgog
ICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwpJbmRleDog
U291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL1dURi93dGYvTWF0aEV4
dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBib29sIGhhc1R3b08KICAgICByZXR1cm4gIWhhc1plcm9Pck9uZUJpdHNT
ZXQodmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCB0aW1lc1RocmVl
UGx1c09uZURpdmlkZWRCeVR3byhUIHZhbHVlKQoreworICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVx
dWl2YWxlbnQgdG86CisgICAgLy8gICAodmFsdWUgKiAzICsgMSkgLyAyOworICAgIC8vIG9yOgor
ICAgIC8vICAgKHVuc2lnbmVkKWNlaWwodmFsdWUgKiAxLjUpKTsKKyAgICAvLyBUaGlzIGZvcm0g
aXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgIHJldHVybiB2YWx1ZSArICh2
YWx1ZSA+PiAxKSArICh2YWx1ZSAmIDEpOworfQorCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFD
T01QSUxFUihSVkNUKSAmJiAhT1MoU09MQVJJUykKIHVzaW5nIHN0ZDo6aXNmaW5pdGU7CiAjaWYg
IUNPTVBJTEVSX1FVSVJLKEdDQzExX0dMT0JBTF9JU0lORl9JU05BTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166397</attachid>
            <date>2012-09-30 18:34:55 -0700</date>
            <delta_ts>2012-09-30 20:24:06 -0700</delta_ts>
            <desc>I think it&apos;s done (holy contiguous)</desc>
            <filename>holycontiguous_2.patch</filename>
            <type>text/plain</type>
            <size>252793</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0wOS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSgpIGlnbm9yZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
ZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcHJldmVudGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDcgQEAKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENENEM0MTVGNkI2QkIw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8q
IExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjEz
RTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAv
KiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNjAxNUQx
NTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNjAxNUExNTYx
OThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9
OwogCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTYzLDYgKzE2NCw3IEBACiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0QzE0QzNDRDQzMDA3
QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYwMjAwMDQ3MkE5IC8qIERGR0J5dGVDb2Rl
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIg
LyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsg
fTsKIAkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3
RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdE
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9OwpAQCAtODQ1LDYgKzg0Nyw3IEBACiAJCTBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQzQ1
ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1v
blNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5
OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdD
IC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkzMyw2ICs5MzYsNyBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNh
bXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0
MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBh
dGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEwMiw3ICsyMTA2
LDYgQEAKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlw
ZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAotCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5
Q2FsbGJhY2suaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0
dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVy
LmggKi8sCkBAIC0yMTEwLDYgKzIxMTMsNyBAQAogCQkJCTkzM0EzNDlBMDM4QUU3QzYwMDg2MzVD
RSAvKiBJZGVudGlmaWVyLmggKi8sCiAJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVyLmggKi8sCiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAv
KiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKQEAgLTIyNjcsNiArMjI3MSw3IEBACiAJCQkJMTRC
RkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLAogCQkJCTE0MjBCRTdBMTBB
QTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAw
OTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0
NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1l
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0NzIsNTYgKzI0NzcsNTcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
aCAqLywKLQkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5j
cHAgKi8sCi0JCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIu
aCAqLywKLQkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKLQkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAotCQkJCTBGQjU0Njc2MTRGNTlB
RDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAogCQkJCTBGMjFDMjdF
MTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8sCi0JCQkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCi0JCQkJMEYyQkRD
MkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5
RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKKwkJCQkwRjgwMjNFOTE2MTM4
MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCisJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1
QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCisJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlk
U3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTcxNENBN0RDMTAwODVGM0M2IC8qIE1ldGhvZENhbGxM
aW5rU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5ODE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9k
Q2FsbExpbmtTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuaCAqLywKLQkJCQkwRkY0Mjc2RTE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUds
b2JhbFN0YXR1cy5jcHAgKi8sCi0JCQkJMEZGNDI3NkYxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29s
dmVHbG9iYWxTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggKi8sCiAJCQkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi8sCi0JCQkJMEYwQjgzQjYxNEJDRjhERjAwODg1
QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCi0JCQkJMEYwQjgzQjIxNEJDRjg1RTAwODg1
QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5jcHAgKi8sCi0JCQkJMEYwQjgzQjMxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovLAotCQkJCTBGMEI4M0FFMTRCQ0Y3MTQw
MDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAotCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywKLQkJCQlGRUI2M0FBMjE1OUI5REEzMDA4OTMyQTYg
LyogQ29tbWVudC5oICovLAotCQkJCTBGMEI4M0FDMTRCQ0Y2MDIwMDg4NUI0RiAvKiBMaW5lSW5m
by5oICovLAotCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJ
bmZvLmggKi8sCi0JCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmgg
Ki8sCi0JCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCiAJCQkJ
OTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi8sCiAJCQkJOTY5QTA3
OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGQkQ3RTY3MTQ0Nzk5
OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8sCisJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1
QjRGIC8qIENvZGVUeXBlLmggKi8sCisJCQkJRkVCNjNBQTIxNTlCOURBMzAwODkzMkE2IC8qIENv
bW1lbnQuaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovLAogCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAg
Ki8sCiAJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8s
CiAJCQkJOTY5QTA3OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKKwkJ
CQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCisJ
CQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKKwkJ
CQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLAor
CQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJ
CQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovLAorCQkJCTBG
MEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oICovLAorCQkJCTBG
MEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAogCQkJCTk2OUEwNzkz
MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCUJDRkQ4QzkwMEVFQjJF
RTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovLAogCQkJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuaCAqLywKKwkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAorCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAorCQkJCTBGMEI4M0FDMTRCQ0Y2
MDIwMDg4NUI0RiAvKiBMaW5lSW5mby5oICovLAorCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1
NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAorCQkJCTBGMEI4M0IyMTRCQ0Y4NUUwMDg4NUI0
RiAvKiBNZXRob2RDYWxsTGlua0luZm8uY3BwICovLAorCQkJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4
NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAqLywKKwkJCQkwRjkzMzI5NzE0Q0E3REMxMDA4
NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk4MTRDQTdE
QzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICovLAorCQkJCTBGQjU0NjdDMTRG
NUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKKwkJ
CQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oICovLAogCQkJCTk2OUEwNzk0MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwICovLAog
CQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKLQkJCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovLAotCQkJCTBGRDgyRTRG
MTQxREFFQTEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oICovLAorCQkJCTBGMkJEQzJCMTUx
RkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAorCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKKwkJCQkwRjlGQzhDMDE0RTFC
NUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAorCQkJCTBGOTMzMjk5
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAorCQkJCTBGOUZDOEMxMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCisJCQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZG
IC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwICovLAorCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRD
QjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggKi8sCiAJCQkJMTQyOUQ4ODMwRUQyMUMzRDAw
Qjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgKi8sCiAJCQkJMTQyOUQ4ODQwRUQyMUMzRDAwQjg5
NjE5IC8qIFNhbXBsaW5nVG9vbC5oICovLAorCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAv
KiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8sCisJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8q
IFNwZWN1bGF0ZWRUeXBlLmggKi8sCisJCQkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0
cnVjdHVyZVNldC5oICovLAogCQkJCTBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRjc2NkQzNzE1QUU0QTFBMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oICovLAogCQkJCUJDQ0Yw
RDBCMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgKi8sCkBAIC0yOTQ5
LDYgKzI5NTUsNyBAQAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgwMjNFQTE2MTM4
MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zNTU0LDYgKzM1NjEsNyBA
QAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhp
bmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikKKyAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2p1bXBzLmFw
cGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1fanVtcHMuc2l6ZSgpKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAoKSk7
CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hU
ZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1bXAo
TGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisjZGVm
aW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5
cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsKKwor
aW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRB
cnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJy
YXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAgQnlW
YWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
CisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJhZFR5
cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAg
ICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkp1
bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5
IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGludDE2
X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0
aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworaW5saW5l
IHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZvKQorewor
ICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgpAQCAtMjA5LDYgKzIxMCwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBy
ZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFsSW5m
byYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRCeVZh
bEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNp
emUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAg
ICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNl
dE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1
YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1
YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9zLmdy
b3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0IHsg
cmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbElu
Zm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAgICAg
ICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZh
bEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTksMTcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01P
REVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMyw5IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkxNSw2ICs5MjMsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBQdXRCeVZhbDoK
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAg
ICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBz
d2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsKQEAgLTkyNCwxMSArOTMzLDE4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
ICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzODMsOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1P
UlBISUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlM
ZW5ndGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmlu
Z2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRy
YWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0
LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBB
cnJheTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAg
ICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5
U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1
dCBtb2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBk
b24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1
ZXNzaW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5
OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1h
eVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZl
ID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6
CkBAIC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxl
KiBwCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Up
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJy
YXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgor
ICAgICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7
CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAh
cHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVu
ZGVjaWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwy
MiBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9m
Qm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSAmIElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChB
YnN0cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAg
ICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CkBAIC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9k
ZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091
dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1Rv
VGFpbCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAg
ICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRv
SG9sZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJh
eTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAg
ICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAi
QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAi
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsK
ICAgICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRp
Z3VvdXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMs
CisgICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
LAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAor
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3Rv
cmFnZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwK
QEAgLTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwg
aW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBC
bGFua1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2Us
CisgICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9y
YWdlLiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3Rv
cmFnZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAt
ODksNiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3Jh
Z2UiIGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3Rpbmcg
Y2hlY2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJv
dW5kczogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhf
Q09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9D
T05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGln
dW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNf
VE9fVEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29u
dGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9V
VF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMKICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVm
aW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCisjZGVmaW5lIElO
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZp
bmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRv
SG9sZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JB
R0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwogCiAv
LyBOZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIEVGRkVD
VEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgIFwK
KyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAg
ICAgXAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUwotI2RlZmlu
ZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAorI2RlZmluZSBTTE9X
X1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICBcCiAgICAgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfRUZGRUNURlVMX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBI
SUNfRUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhlbHBlcnMgZm9yIHBvbHltb3JwaGlj
IGFycmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9QT0xZTU9SUEhJ
Q19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19F
RkZFQ1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9M
WU1PUlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSos
IEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNl
c0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZs
eShBcnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUg
YXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQog
ewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFS
UkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4
ICsyNDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAg
IH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
KQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RB
SUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1P
UlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNh
c2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgbW9kZUlz
UG9seW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wg
cG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRl
c0FycmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNF
RChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0
cnVlOworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtMjA0LDYgKzMwNiw3IEBAIGlubGlu
ZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OSw3ICszNTIsMTEg
QEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzoKICAgICBj
YXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKQEAgLTI3Myw3
ICszODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBCiBpbmxp
bmUgYm9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTcxLDYgKzE1NzEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRv
R3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0xNTk0LDYgKzE1OTYsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDkgKzM1OSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBw
cm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZh
bC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgot
ICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rp
bmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSAr
MTIxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAg
IGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0u
cHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFn
ZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4
KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVk
c1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwg
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9Ob2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5v
ZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEz
NywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNo
aWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIDMpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAg
ICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2Rl
IGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wg
KCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRl
eCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFn
ZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQobW9k
ZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihh
cnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAg
ICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUp
LCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlp
ZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAg
ICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2UgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0
ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2Ug
aXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCArNDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9y
YWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRn
ZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQogICAgIHsKICAgICAgICAgaWYgKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9
PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2Rl
IGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAgICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4
ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUgKzQzMywyNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRl
eCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
ICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9m
aWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgp
KTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5v
ZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGlu
ZGV4LmluZGV4VW5jaGVja2VkKCkpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9n
cmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVk
Z2Uoc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQogICAgIH0KICAg
ICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJ
R1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgog
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xP
V19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01P
REVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4g
bm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3Rpbmcg
dmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgp
KTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBh
cnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTYwMSw2
ICs1OTcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAor
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgYXJyYXktPmJ1dHRl
cmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXktPmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgo
KSArIDEpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVj
KSk7Cit9CisgICAgICAgIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50
KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
QEAgLTEzMDksNiArMTMxNSwxNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
K2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Jmdsb2JhbERhdGEsIGV4ZWMpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsxMzMxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgpCit7CisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworCisgICAgaWYgKGluZGV4
KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihvYmplY3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91
YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3Qg
YikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgs
NyBAQCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0
ZSosIHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNm
WikoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0x
MTAsNiArMTEwLDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAog
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRl
Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBA
IC0xNDgsNiArMTQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
bwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNv
dmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTE5
Miw3ICsxOTQsOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiBj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlT
dG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3Rh
dGUqLCBKU09iamVjdCopOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK2NoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgaW50MzJfdCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2Vw
dGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0
dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxw
ZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1
YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSB8IEhhc0NvbnRpZ3VvdXMpKSk7CiAgICAgICAgIAogICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwOSwx
MCArMjEwOSwxMDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwog
ICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywg
R1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1
bHRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsK
K30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJy
YXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJS
ZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgCisgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSksIHJlc3VsdFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZyk7Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQ
UlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BS
UmVnIHRlbXBSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1v
ZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IAorICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJ
bkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAK
KyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJl
Zyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAg
ICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAKKyAgICBpZiAoaXNJbkJvdW5k
c0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYgbm9k
ZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcg
dmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9
IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2Rl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRp
bmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBp
ZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNv
dW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBK
SVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28g
dGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcuCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgfSBlbHNlIGlmIChpc1Ns
b3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJlZyk7
CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAKKyAg
ICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICBub3RI
b2xlVmFsdWUubGluaygmbV9qaXQpOworICAgIH0KKyAgICAgICAgICAgIAorICAgIC8vIFN0b3Jl
IHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgp
OwotCisgICAgCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAg
ICAgaW5pdENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7CkBAIC0yNTk1LDYgKzI2ODcsNTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9E
RVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBj
YXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZG
RUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNv
bXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI2MTUsNiArMjc1Miw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwpAQCAtMjYyNywyMSArMjc2NSw2NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFs
KG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywg
cHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2Uo
dGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgcmVzdWx0LmdwcigpKTsKLQorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwot
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGlm
IChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgeworICAg
ICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMp
KTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzR2V0
QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZykp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJh
eVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRo
cm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBkb25l
Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhy
b3VnaCk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uR2V0QnlWYWxBcnJheUludCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmdwcigp
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3MzUsOCArMjkx
Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAg
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJ
R1VPVVNfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNo
aWxkMyk7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAt
Mjc1Niw1OSArMjkzOCw3NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAg
ICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
Ci0gICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgYmV5b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3
cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0hvbGVWYWx1ZTsKLSAgICAgICAgICAg
IGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgdW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUg
YmFzZWxpbmUgSklUCi0gICAgICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0
aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAotICAgICAgICAgICAg
ICAgIC8vIHByb2ZpbGluZy4KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0
QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0
IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ug
d291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1
dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2Un
cmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KLSAg
ICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBt
aWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVn
KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJS
ZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3Jhcnks
IG5vZGUpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
ID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVS
ZWcsIHRlbXBvcmFyeVJlZyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAg
ICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAg
c3RvcmFnZS51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMu
ZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworCisgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgICAgIHdyaXRl
QmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUub3Ao
KSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVl
IHRvIHRoZSBhcnJheS4KKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRh
dGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub3RI
b2xlVmFsdWUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQ
UlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFy
eSwgbm9kZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZh
bHVlUmVnLCB0ZW1wb3JhcnlSZWcpOworCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAg
ICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAg
ICAgIHN0b3JhZ2UudXNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0
aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
LQotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICAgICAg
ICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLApAQCAtMjgyMCw2ICszMDE5LDYzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9E
RVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5KHRoaXMpOwor
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3Jh
Z2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcG9yYXJ5UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcG9yYXJ5
UmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2Rl
LmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlN
b2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAg
ICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChj
b21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0
b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNl
cy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdo
KTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgp
OworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUg
ZGVjaXNpb24gb2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUgc2hvdWxkIGJl
IG1hZGUKKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSwgbm90
IHRoZSBtYWNoaW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAg
ICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewogICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMjk3MywyNiArMzIyOSw1NCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3Rv
cmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5n
dGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
KyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
c3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0b3Jh
Z2VMZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7Cisg
ICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0z
MigweDdmZmZmZmZlKSkpOworICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJl
IGxlbmd0aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwg
c3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0lu
VmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVu
Z3RoR1BSLAotICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5v
UmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwg
YmFzZUdQUikpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3Ro
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VM
ZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtMzAwMiw0MSArMzI4Niw3NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFn
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCB1bmRlZmluZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigK
KyAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksCisgICAgICAg
ICAgICAgICAgdmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQ
Uik7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
IHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywK
KyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxl
bmd0aCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNW
YWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlz
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5n
cHIoKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVk
Q2FzZXM7Ci0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5n
dGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dD
YXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgIHNldFVu
ZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICBtX2ppdC5z
dWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVl
c0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5W
ZWN0b3IpKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgIHNsb3dQYXRoTW92ZSgKLSAgICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywg
dGhpcywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAg
ICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwgdmFsdWVHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNl
LCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2
YWx1ZUdQUiwgYmFzZUdQUikpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTMyMTAsOCArMzUzMCwx
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmUoKSwgc2l6ZUdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzZWxlY3RTY3JhdGNoR1BSKHNpemVHUFIp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgYmlnTGVu
Z3RoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkpLCBzdHJ1Y3R1cmVHUFIp
OworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6ZUdQUik7
CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxNSw2ICszMTUsNDEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2Rl
JiBubwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8g
PSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT05fQVJSQVlf
Q09OVElHVU9VU19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3Vv
dXMpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6
IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJhbmNoLiBC
dXQgd2UgY3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBkb2luZyBz
byB3b3VsZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdpdGggdGhl
IHByZXNlbnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBhdGguCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7
CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewog
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigK
QEAgLTM1Miw2ICszODcsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2Rl
JiBubwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBt
X2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNh
biBiZSB0dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBu
byBldmlkZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2ZpdGFibGUs
IG5vciBkbyBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0CisgICAgICAg
IC8vIGNvdmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkp
KTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAgIChwb2x5bW9ycGhpY0luY2x1
ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSA/IEhhc0NvbnRpZ3VvdXMgOiAwKQorICAg
ICAgICAgICAgICAgICAgICB8IChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUu
YXJyYXlNb2RlKCkpID8gSGFzQXJyYXlTdG9yYWdlIDogMCkpKSk7CisgICAgICAgIAorICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1
bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CkBAIC0zOTAsNzIgKzQ0OCw5OCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgQVNTRVJUKCFtb2RlQWxy
ZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9k
ZSgpKSk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgCisgICAgSW5kZXhpbmdUeXBlIGRl
c2lyZWRJbmRleGluZ1R5cGVNYXNrOwogICAgIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewotICAgIGNhc2UgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJl
LmdwcigpOwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgY2FzZSBB
cnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNr
ID0gSGFzQ29udGlndW91czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtU
b0FycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNBcnJh
eVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0
QXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5
U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2ly
ZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91cyB8IEhhc0FycmF5U3RvcmFnZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVj
dHVyZS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Cisg
ICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIAot
ICAgICAgICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkg
aGF2ZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5n
VHlwZU1hc2sgPQotICAgICAgICAgICAgaXNTbG93UHV0QWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkp
ID8gKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpIDogSGFzQXJyYXlT
dG9yYWdlOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJy
YW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpOworICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0
IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVj
dHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKICAgICAg
ICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsK
KyAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAg
IHNsb3dDYXNlLmxpbmsoJm1faml0KTsKKyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIAotICAgICAgICAvLyBOZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRl
cmNlcHQgaW5kZXhlZCBhY2Nlc3Nlcy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlz
IG1vZGUgd29uJ3Qgd29yay4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVj
dHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8pKSk7CisgICAgLy8gTmV4dCBjaGVjayB0aGF0IHRoZSBvYmpl
Y3QgZG9lcyBub3QgaW50ZXJjZXB0IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0IGRvZXMsCisgICAg
Ly8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8pKSk7CiAgICAgICAgIAotICAgICAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRl
IHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1w
R1BSKTsKKyAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgor
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VS
ZWcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdl
OgorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJl
Zyk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7Ci0KLSAgICAgICAg
Ly8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBz
cGlsbGluZyBkb2VzIG5vdCBzYXZlCi0gICAgICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQg
aXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCi0g
ICAgICAgIC8vIGFib3V0IGEgbG9hZC4KLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICAKLSAgICAgICAgLy8gRmluYWxseSwgY2hl
Y2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQg
dG8gZ2V0LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxh
dGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAotICAgICAgICAvLyBieXRlY29k
ZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJl
ZXhlY3V0ZWQuCi0gICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBp
cyBub3QgdXNlci12aXNpYmxlLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpKTsKLSAgICAgICAgCi0g
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIs
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNhc2UgQXJyYXk6
OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZyk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOwogICAgICAgICBicmVhazsKICAg
ICB9CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKworICAgIC8vIEFsYXMs
IHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcg
ZG9lcyBub3Qgc2F2ZQorICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVs
IGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCisgICAgLy8gYWJvdXQg
YSBsb2FkLgorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwor
ICAgICAgICAKKyAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2Yg
YXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCisgICAgLy8gTm90ZSB0aGF0IHRo
aXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwgcmVzdWx0IGlu
IHRoZSAKKyAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFy
cmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCisgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNl
IGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCisgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSkpOworICAgICAgICAKKyAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4
KTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9k
ZUluZGV4KQpAQCAtMzIwNSwxMiArMzI4OSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0
b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X01PREVTOiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAg
CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKKyAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0g
cmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgcmVzdWx0
UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAg
ICAgICAgICAgICAKQEAgLTMzOTksNiArMzQ5NCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbV9jb21w
aWxlSW5kZXgpOwogfQogCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVy
Rm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKK3sKKyAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkp
CisgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIEdQUlRlbXBvcmFyeSBy
ZWFsVGVtcG9yYXJ5KHRoaXMpOworICAgIHRlbXBvcmFyeS5hZG9wdChyZWFsVGVtcG9yYXJ5KTsK
KyAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR1BSVGVtcG9yYXJ5
OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNz
IFNwZWN1bGF0aXZlSklUOwpAQCAtMTE2Niw2ICsxMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihz
aXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNp
emVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMjE4LDExICsxMjI0LDE2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3Rl
ZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNDY4LDYgKzE0Nzks
MTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgaW50MzJfdCBhcmcyKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTE1MzEs
MTEgKzE1NDcsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3Rl
ZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0yMTQ5LDYgKzIxNzAs
NDIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5v
ZGUmKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsK
ICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRC
eVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0
b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJS
ZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyAg
ICAKKyAgICBib29sIHB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKEFycmF5OjpNb2RlIGFy
cmF5TW9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIC8v
IEZvciBBcnJheVN0b3JhZ2UsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBzdG9yZXMgdG8gaG9s
ZXMgZXhjZXB0IGlmCisgICAgICAgIC8vIHdlJ3JlIGluIFNsb3dQdXQgbW9kZS4KKyAgICAgICAg
Y2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
CisgICAgICAgIC8vIEZvciBDb250aWd1b3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3IgYW55
IGFjY2VzcyB0aGF0IG1heSBzdG9yZQorICAgICAgICAvLyB0byB0aGUgdGFpbC4KKyAgICAgICAg
Y2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5E
U19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9V
U19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAg
IC8vIEFsbCBwb2x5bW9ycGhpYyBtb2RlcyBuZWVkIGFuIGV4dHJhIHJlZy4KKyAgICAgICAgY2Fz
ZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQ
UlRlbXBvcmFyeSYsIEFycmF5OjpNb2RlKTsKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJG
b3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9k
ZS5hcnJheU1vZGUoKSk7CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21w
aWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3Bl
cnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJl
Zyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRC
eVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0
b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIAogICAgIHZv
aWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25TdHJpbmcoTm9kZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwMCw2ICs0MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXggPSAwOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4ID0gMDsKICAgICBtX2ds
b2JhbFJlc29sdmVJbmZvSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwog
ICAgIApAQCAtNzM4LDYgKzczOSwyMCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29k
ZVB0ciogZnVuCiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9z
KG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsr
aSkKICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHVi
SW5mbyhtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSksIHBhdGNoQnVmZmVyKTsKKyAg
ICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZCeVZhbEluZm9zKG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5zaXplKCk7ICsraSkgeworICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVK
dW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21w
aWxhdGlvbkluZm9baV0uYmFkVHlwZUp1bXApKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5m
b1tpXS5kb25lVGFyZ2V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhUYXJn
ZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uc2xv
d1BhdGhUYXJnZXQpOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJlc3MgPSBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0ucmV0dXJuQWRk
cmVzcyk7CisgICAgICAgIAorICAgICAgICBtX2NvZGVCbG9jay0+YnlWYWxJbmZvKGkpID0gQnlW
YWxJbmZvKAorICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUlu
ZGV4LAorICAgICAgICAgICAgYmFkVHlwZUp1bXAsCisgICAgICAgICAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW2ldLmFycmF5TW9kZSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihiYWRUeXBlSnVtcCwgZG9uZVRhcmdldCksCisgICAgICAgICAgICBkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIocmV0dXJuQWRkcmVzcywgc2xvd1BhdGhUYXJnZXQpKTsKKyAgICB9CiAgICAg
bV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Y29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7CiAgICAgICAgIENhbGxM
aW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQsMjUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29weVRvU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8m
IGluZm8sIExpbmtCdWZmZXIgJnBhdGNoQnVmZmVyKTsKICAgICB9OwogCisgICAgc3RydWN0IEJ5
VmFsQ29tcGlsYXRpb25JbmZvIHsKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oKSB7IH0K
KyAgICAgICAgCisgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldCkKKyAgICAg
ICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgLCBiYWRU
eXBlSnVtcChiYWRUeXBlSnVtcCkKKyAgICAgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkK
KyAgICAgICAgICAgICwgZG9uZVRhcmdldChkb25lVGFyZ2V0KQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOworICAgICAgICBKSVRBcnJh
eU1vZGUgYXJyYXlNb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdl
dDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoVGFyZ2V0OworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXR1cm5BZGRyZXNzOworICAgIH07CisKICAgICBzdHJ1
Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBob3RQYXRoT3RoZXI7CkBAIC0zNDgsNiArMzY3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsK
ICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZv
LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJu
QWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZv
aWQgY29tcGlsZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJ
VCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
T2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZh
dGVDb21waWxlR2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRy
YW1wb2xpbmVzKQogICAgICAgICB7CkBAIC0zOTcsNiArNDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0
dWJJbmZvKiwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUq
LCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKik7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1Yklu
Zm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNl
dCwgUmV0dXJuQWRkcmVzc1B0ciwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBS
ZXR1cm5BZGRyZXNzUHRyLCBib29sIGRpcmVjdCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJy
YXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyos
IFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5l
cyhKU0dsb2JhbERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHBy
aXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0
ID0gZmFsc2UpOwpAQCAtNDUyLDYgKzQ4OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhp
bmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0
dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxD
YXNlKEFycmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgSklUQXJyYXlNb2RlIGNob29z
ZUFycmF5TW9kZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5
IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRleGluZyB0
eXBlLgorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRl
ZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuCisgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5
IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKKyAgICAgICAg
Ly8gY2FzZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2Zp
bGVkLgorICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0
b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAg
ICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAu
IHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBz
dG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCisgICAg
ICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMg
YWxyZWFkeSBwcm9maWxlZC4KKyAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KKyAg
ICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKIAogICAgICAgICBl
bnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApAQCAt
ODcwLDYgKzkyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2FsbFJlY29y
ZD4gbV9jYWxsczsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKICAgICAgICAgVmVj
dG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mbzsKKyAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5m
bz4gbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPE1l
dGhvZENhbGxDb21waWxhdGlvbkluZm8+IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbzsKICAg
ICAgICAgVmVjdG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKQEAgLTg3OSw2ICs5MzIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsK
IAogICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKyAg
ICAgICAgdW5zaWduZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7CiAgICAgICAgIHVuc2lnbmVk
IG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9jYWxsTGlua0lu
Zm9JbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVN
ZXRob2RzLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsMjMgKzQ0NSwyMiBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQg
bGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwg
UmVnaXN0ZXJJRCBzdG9yYWdlUHRyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0
aWFsU3RvcmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihpbml0aWFsTGVuZ3RoKSk7CisgICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9
IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0
b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBpbml0aWFsTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisKKyAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CiAKICAg
ICAvLyBXZSBhbGxvY2F0ZSB0aGUgYmFja2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBn
YXJiYWdlIGNvbGxlY3Rpb24gCiAgICAgLy8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkg
aW5pdGlhbGl6YXRpb24uCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9y
YWdlLCBzaXplb2YoSW5kZXhpbmdIZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFs
bG9jYXRlIHRoZSBjZWxsIGZvciB0aGUgYXJyYXkuCi0gICAgbG9hZFB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOwogICAg
IGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNBcnJheSwgZmFsc2U+KHNjcmF0Y2gsIGNlbGxS
ZXN1bHQsIHN0b3JhZ2VQdHIpOwogCi0gICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5m
byBpbiB0aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3Rv
cmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6
bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExl
bmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VS
ZXN1bHQsIEFycmF5U3RvcmFnZTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLSAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3Bh
cnNlTWFwT2Zmc2V0KCkpKTsKKyAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGlu
IHRoZSBpbmRleGluZyBoZWFkZXIuCisgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
IHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQnV0
dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3
bHkgYWxsb2NhdGVkIEFycmF5U3RvcmFnZS4KICAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBB
ZGRyZXNzKGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtNDcw
LDEyICs0NjksMTIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVl
c1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAg
IHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwor
ICAgICAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwogI2Vsc2UKICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHN0b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIs
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBp
KSk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVn
aXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YodWludDMyX3QpKSwgc3RvcmFn
ZVB0cik7Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQ
dHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNTU5LDEwICs1
NTgsMjUgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRgogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5
UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewotICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCiAgICAg
c3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRv
SG9sZSgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3
KEFycmF5UHJvZmlsZSogcHJvZmlsZSwgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIHJldHVybiAhIShwcm9maWxlLT5vYnNlcnZlZEFy
cmF5TW9kZXMoKSAmIChhc0FycmF5TW9kZXMoTm9uQXJyYXkgfCBjYXBhYmlsaXR5KSB8IGFzQXJy
YXlNb2RlcyhBcnJheUNsYXNzIHwgY2FwYWJpbGl0eSkpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKK2lubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1v
ZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQoreworICAgIGlmIChhcnJheVByb2ZpbGVTYXcocHJv
ZmlsZSwgSGFzQXJyYXlTdG9yYWdlKSkKKyAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsK
KyAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEy
OTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NjEsNyArMTY2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5j
X2V4cChJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkp
KSB7CisgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGlt
ZSgpCisgICAgICAgIHx8IENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjgwLDggKzE2ODEsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0cnVjdAogICAgIC8vIElmIHRoZSBh
bGxvY2F0aW9uIHdvdWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFrZSB0aGUgcHJv
cGVyIHN0dWIgY2FsbCBhYm92ZSBpbiAKICAgICAvLyBlbWl0X29wX25ld19hcnJheS4KICAgICBp
bnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29w
aWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6Omlz
T3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJuOworICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gV2UncmUgaGF2aW5nIGEgYmFkIHRpbWUuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBOb3QgZW5vdWdoIHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2Vs
bC4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICB1bnNpZ25lZCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGJhc2UgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTExMSwxNyArMTEy
LDY0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KIAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
LCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwor
ICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBl
KTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBs
YWJlbCgpOworICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBKdW1wIHJlc3VsdE9LID0g
YnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJl
c3VsdE9LLmxpbmsodGhpcyk7CisjZW5kaWYKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNl
dCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENv
bnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Cisg
ICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3Rv
cmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Ns
b3dQdXRBcnJheVN0b3JhZ2UpKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgU2NhbGVQdHIsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NiwxNCArMTk0LDkwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3Rv
ciBsZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAg
ICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAgIAogICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChiYXNlLCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJl
Z1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwu
Y2FsbChkc3QpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAg
ICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSgpOwogfQogCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
KyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3Vz
OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9y
YWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmso
YmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0
T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
KyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAu
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAg
YnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAg
IHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgQ29k
ZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1
cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7Cit9CisK
K3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7
CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAg
IFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25l
ID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBD
b2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVs
QXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8t
PnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZm
ZXIsCisgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAs
IHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52
YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBD
b2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwogdm9pZCBKSVQ6
OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3Vs
dCwgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgRmluYWxPYmplY3RNb2Rl
IGZpbmFsT2JqZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwpA
QCAtMjI2LDcgKzM1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBw
cm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVn
ZXIocmVnVDEpOwpAQCAtMjM0LDMxICszNTgsOTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZShyZWdUMiwgcmVnVDMsIHByb2ZpbGUpOworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFk
VHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgSklUQXJyYXlNb2RlIG1v
ZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
Y2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRl
Y29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwogCi0gICAgSnVtcCBlbXB0eSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIGVtaXRXcml0ZUJh
cnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1
b3VzKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOwogCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CisgICAgTGFiZWwg
c3RvcmVSZXN1bHQgPSBsYWJlbCgpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2Nh
bGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAg
IEp1bXAgZW5kID0ganVtcCgpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIs
IHJlZ1QxLCBTY2FsZVB0cikpOworICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBv
dXRPZkJvdW5kcy5saW5rKHRoaXMpOwogICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3Mo
cmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLQotICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAgZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3Mo
cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogICAgIGp1bXAoKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQogCi0gICAgZW5kLmxpbmsodGhpcyk7CitKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQg
dmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAK
KyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
KyAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogCi0gICAgZW1pdFdy
aXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRp
YXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIExhYmVsIHN0b3JlUmVz
dWx0ID0gbGFiZWwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7
CisgICAgc3RvcmVQdHIocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7CisgICAgCisgICAgSnVtcCBkb25lID0ganVt
cCgpOworICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgCisgICAgZW1pdEFycmF5UHJv
ZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3Mo
cmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBqdW1wKCkubGlua1Rv
KHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTI3MCwxMyArNDUzLDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3Bl
cnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7
IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3Qg
YXJyYXkgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBjaGVjawor
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcworICAgIAorICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRCeVZhbENhbGwo
dGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1l
bnQocmVnVDApOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJl
Z1QyKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0g
ICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5VmFs
Q2FsbC5jYWxsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwor
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pbmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjU2LDcgKzg0
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDIsIHJlZ1QxLCBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSXNBcnJheSkpOwotICAgIEp1bXAgZmFp
bHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMpKTsK
IAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9y
YWdlCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MTQsNiArMjQxNCwzMCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCitz
dGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0
LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5h
c0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0
KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBpID0g
c3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkg
JiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAgICAgICAgICAgIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCByZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKKyAgICAgICAg
ICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJhbWUsIGkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7Cisg
ICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAgICAgICByZXR1cm4gYmFzZVZh
bHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxs
KCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1l
LCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CisgICAg
cmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Cit9CisKIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsKQogewogICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTI0MjMsMzUgKzI0NDcsMzcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgCi0gICAgaWYgKExJS0VMWShi
YXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7Ci0gICAgICAgIGlm
IChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5
KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpIHsKLSAg
ICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vi
c2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRG
b3JOb25ERkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgICAg
IEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0QnlWYWxJ
bmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJS
b3V0aW5lKTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUo
aW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGpp
dEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAgICAgICAgaWYg
KGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgIEpJVDo6
Y29tcGlsZUdldEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsKICAg
ICAgICAgfQogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxG
cmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Cit9CisgICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5
X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
IAotICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBpID0g
c3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkg
JiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAgICAgICAgIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JF
VFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKLSAg
ICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgo
Y2FsbEZyYW1lLCBpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Ci0gICAgfQotCi0gICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKSB7Ci0gICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFu
Y2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAgICAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Ci0gICAgfQorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7
CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5n
KGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFz
ZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9O
X0FUX0VORCgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1Zh
bHVlKCk7CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJh
c2VWYWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogICAg
IApAQCAtMjUwMiwyMyArMjUyOCwxNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1ERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQorc3RhdGljIHZvaWQgcHV0QnlW
YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNj
cmlwdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsK
LQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsK
LSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7Ci0KICAgICBp
ZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0g
c3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkg
ewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAg
ICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCi0gICAgICAgICAg
ICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGNhbGxGcmFtZSwgaSwgdmFsdWUs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgfSBlbHNl
CkBAIC0yNTI4LDExICsyNTQ1LDU0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1
dF9ieV92YWwKICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5z
dGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpLCB2YWx1ZSwgc2xvdCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1
YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICAgICAg
aWYgKCFzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8g
YW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKCFj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9i
amVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAg
ICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90
KTsKICAgICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
cHV0X2J5X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKKworICAgIGlmIChiYXNl
VmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIEF0
dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2Fs
bEZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAgQVNTRVJUKGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAg
QVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAgICBpZiAoaXNP
cHRpbWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5n
VHlwZSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUp
CisgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1dEJ5VmFs
KGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKKworICAgIENIRUNLX0ZP
Ul9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKKyAgICAK
KyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAK
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNiArMzcwLDcgQEAg
ZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9p
ZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
KyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNU
VUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7
CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlf
b3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRleChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRf
YnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAgIHZvaWQgSklU
X1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBfbGxpbnRfb3Bf
Z2V0X2FycmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIK
ICAgICBhcnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BH
ZXRBcnJheUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFy
cmF5TGVuZ3RoU2xvdworICAgIGJ0aXogdDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9y
YWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAg
IGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZHAgNjRbUEIsIFBDLCA4XSwgdDIKICAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAtMTE0NywxNCArMTE0Nywy
NSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0Mwog
ICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQxKQogICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0
MwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4
aTJwIHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAg
YnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCisKKyAgICBi
aWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1Ymxp
Y0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQw
CisgICAgbG9hZHAgW3QzLCB0MSwgOF0sIHQyCisgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93
CisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6Cisg
ICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSwgLm9w
R2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2Fk
aXMgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMs
IHQxLCA4XSwgdDIKICAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKworLm9wR2V0QnlWYWxE
b25lOgogICAgIHN0b3JlcCB0MiwgW2NmciwgdDAsIDhdCiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4
XSwgdDAKICAgICB2YWx1ZVByb2ZpbGUodDIsIHQwKQpAQCAtMTIyNiwyOSArMTIzNyw0OSBAQCBf
bGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwg
dDIKICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMs
IHQwKQotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAg
bG9hZGlzIDE2W1BCLCBQQywgOF0sIHQwCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMy
KHQwLCB0MiwgLm9wUHV0QnlWYWxTbG93KQotICAgIHN4aTJwIHQyLCB0MgorICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDMsIC5vcFB1dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0
MywgdDMKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVx
IHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVu
Z3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9y
W3QwLCB0MiwgOF0sIC5vcFB1dEJ5VmFsRW1wdHkKLS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0g
ICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MywgdDEpCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wUHV0QnlWYWxOb3RDb250aWd1
b3VzCisgICAgCisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJv
dW5kcworLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BC
LCBQQywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCisgICAgd3Jp
dGVCYXJyaWVyKHQxKQorICAgIHN0b3JlcCB0MSwgW3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1
KQorCisub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBiaWFlcSB0MywgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0s
IC5vcFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BST0ZJTEVSCisgICAgICAgIGxvYWRwIDMy
W1BCLCBQQywgOF0sIHQyCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3Rv
cmVUb0hvbGVbdDJdCisgICAgZW5kCisgICAgYWRkaSAxLCB0MywgdDIKKyAgICBzdG9yZWkgdDIs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhb
dDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0CisKKy5vcFB1dEJ5
VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5
VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZU91dE9mQm91bmRzCisub3BQdXRCeVZhbEFycmF5
U3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQogICAgIHdyaXRlQmFycmllcih0MSkKLSAgICBz
dG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XQorICAgIHN0b3JlcCB0
MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdCiAgICAgZGlzcGF0Y2goNSkKIAot
Lm9wUHV0QnlWYWxFbXB0eToKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAg
ICAgaWYgVkFMVUVfUFJPRklMRVIKLSAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0M10KKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDEKKyAgICAg
ICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0MV0KICAgICBlbmQK
LSAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBi
aWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNM
ZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Ci0gICAgYWRkaSAxLCB0MiwgdDEKKyAg
ICBhZGRpIDEsIHQzLCB0MQogICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlWYWxT
dG9yZVJlc3VsdAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAK
IC5vcFB1dEJ5VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRf
YnlfdmFsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw4ICs2Myw5IEBAIGVuZAogCiAjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVy
ZmxpZXMuCiBjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQ29udGlndW91cyA9IDIKIGNvbnN0
IEhhc0FycmF5U3RvcmFnZSA9IDgKLWNvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorY29uc3QgSGFz
U2xvd1B1dEFycmF5U3RvcmFnZSA9IDE2CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJp
bmdUeXBlID0gNQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252
ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3
OSw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGkKIAogaW5saW5l
IGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51
bVZhbHVlcykKIHsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
fHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworICAgIHJldHVy
biBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CiB9CiAKIGlubGlu
ZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fc3BhcnNlTWFwLmNvcHlGcm9tKG90aGVy
Lm1fc3BhcnNlTWFwKTsKICAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsK
LSAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7
CiAgICAgfQogICAgIAogICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKQEAgLTczLDE1ICs3MiwxMyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFNwYXJzZUFycmF5VmFsdWVNYXA+IG1f
c3BhcnNlTWFwOwogICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOwotICAgIHVuc2lnbmVkIG1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKKyNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CiAjZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV92ZWN0b3JbMV07CiAgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZz
ZXQoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2luZGV4Qmlhcyk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IHNwYXJzZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fc3BhcnNlTWFwKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkg
KyAxKTsKICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaGVyZSBub3QganVzdCBi
ZWNhdXNlIGl0J3MgaGFuZHksIGJ1dCB0byByZW1pbmQgeW91IHRoYXQKKyAgICAvLyB0aGUgd2hv
bGUgcG9pbnQgb2YgYnV0dGVyZmxpZXMgaXMgdG8gZG8gZXZpbCBwb2ludGVyIGFyaXRobWV0aWMu
CisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbVBvaW50ZXIoY2hhciogcHRyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4ocHRyKTsKKyAgICB9Cisg
ICAgCisgICAgY2hhciogcG9pbnRlcigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHRoaXMpOyB9CisgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVh
ZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSB7IHJldHVybiBv
ZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSB7
IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZWZWN0b3JMZW5ndGgoKTsgfQpAQCAtNzAsOSArNzksMjEgQEAgcHVibGljOgogICAgIGNvbnN0
IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5n
SGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFn
ZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAgICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5k
ZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBw
dWJsaWNMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKTsg
fQorICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCkt
PnZlY3Rvckxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgdmFs
dWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3RoKHZhbHVlKTsgfQorICAgIHZv
aWQgc2V0VmVjdG9yTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4aW5nSGVhZGVyKCktPnNl
dFZlY3Rvckxlbmd0aCh2YWx1ZSk7IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRo
aXMpOyB9CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGlu
Z1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
b250aWd1b3VzKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmllcjxVbmtub3du
PiA+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQ29udGlndW91cyhXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihjb250aWd1b3VzKTsKKyAgICB9CiAgICAgCiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CiAgICAgc3RhdGlj
IGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykK
IHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpOwogICAgIEFTU0VSVChudW1iZXJPZlNsb3RzIDw9IGluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KHN0cnVjdHVyZSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIHByb2Jh
Ymx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFzIGEgbG9vcCBzaW5jZSAoMSkgd2Uga25vdyBp
biB3aGljaApAQCAtMTYzLDcgKzE2Myw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
dW5zaGlmdChTdHIKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlmdChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNTRVJUKGhhc0lu
ZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoaGFz
QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICB1bnNpZ25lZCBw
cm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIC8v
IEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgogICAgIG1lbW1vdmUoCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDEwICs0MiwxNyBAQCBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVy
OjpwcmVDYXBhY2l0CiAKIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChMSUtFTFko
IWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpCisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIH0KIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ1R5cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IGNoYXIqIGluZGV4aW5nVHlwZVRvU3RyaW5nKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUp
Cit7CisgICAgc3RhdGljIGNoYXIgcmVzdWx0WzEyOF07CisgICAgY29uc3QgY2hhciogYmFzaWNO
YW1lOworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlICYgQWxsQXJyYXlUeXBlcykgeworICAgIGNh
c2UgTm9uQXJyYXk6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheSI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgYmFzaWNOYW1l
ID0gIk5vbkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5Q2xhc3M6Cisg
ICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheUNsYXNzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBiYXNpY05hbWUgPSAiQXJyYXlXaXRoQ29u
dGlndW91cyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICBiYXNpY05hbWUgPSAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICBi
YXNpY05hbWUgPSAiQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJhc2ljTmFtZSA9ICJVbmtub3duISI7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzbnByaW50ZigKKyAgICAgICAgcmVzdWx0LCBzaXpl
b2YocmVzdWx0KSwgIiVzJXMlcyIsIGJhc2ljTmFtZSwKKyAgICAgICAgKGluZGV4aW5nVHlwZSAm
IEhhZEFycmF5U3RvcmFnZSkgPyAifEhhZEFycmF5U3RvcmFnZSIgOiAiIiwKKyAgICAgICAgKGlu
ZGV4aW5nVHlwZSAmIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzKSA/ICJ8TWF5SGF2ZUluZGV4ZWRB
Y2Nlc3NvcnMiIDogIiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ1R5cGUuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgdHlw
ZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKIAogLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHBy
ZXNlbmNlIG9mIGNhcGFiaWxpdGllcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSXNBcnJh
eSAgICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzQ29u
dGlndW91cyAgICAgICAgICAgID0gMjsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzQXJy
YXlTdG9yYWdlICAgICAgICAgID0gODsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzU2xv
d1B1dEFycmF5U3RvcmFnZSAgID0gMTY7CiAKQEAgLTQyLDkgKzQzLDExIEBAIHN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWQKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFy
cmF5IHR5cGVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAg
ICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRo
Q29udGlndW91cyAgICAgICAgICA9IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgPSBIYXNBcnJheVN0b3JhZ2U7
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2UgPSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBB
cnJheUNsYXNzICAgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsgLy8gSSdkIHdhbnQgdG8g
Y2FsbCB0aGlzICJBcnJheSIgYnV0IHRoaXMgd291bGQgbGVhZCB0byBkaXNhc3Ryb3VzIG5hbWVz
cGFjZSBwb2xsdXRpb24uCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aENvbnRp
Z3VvdXMgICAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQ29udGlndW91czsKIHN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgICAgICAgICA9IElzQXJyYXkg
fCBIYXNBcnJheVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsK
IApAQCAtNTIsNiArNTUsMTAgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhT
bG93UAogICAgIE5vbkFycmF5OiAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlD
bGFzcwogCisjZGVmaW5lIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTIFwKKyAgICBOb25B
cnJheVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91cworCiAjZGVmaW5lIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUyBc
CiAgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCkBAIC03Niw2ICs4MywxMSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kCiAgICAgcmV0dXJuIGhhc0luZGV4
ZWRQcm9wZXJ0aWVzKHR5cGUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzQ29udGlndW91
cyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHJldHVybiAhIShpbmRleGluZ1R5
cGUgJiBIYXNDb250aWd1b3VzKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3Rv
cmFnZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogewogICAgIHJldHVybiAhIShpbmRleGlu
Z1R5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpAQCAt
ODYsNiArOTgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlU2xvd1B1dChJbmRlCiAg
ICAgcmV0dXJuICEhKGluZGV4aW5nVHlwZSAmIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwogfQog
Citjb25zdCBjaGFyKiBpbmRleGluZ1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUpOworCiAvLyBN
YXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxs
QXJyYXlUeXBlcyAgICAgICAgICAgID0gMzE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDkgKzMz
MSw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTQXJyYXk6OnNl
dExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5n
dGgsIGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8v
IElmIHRoZSBsZW5ndGggaXMgcmVhZCBvbmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNv
IHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5nICdpZicuCkBAIC0zOTYsMTIgKzM5NSw2OSBAQCBi
b29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2Jvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
bmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBpZiAo
IW5ld0xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVu
Z3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwg
dGhyb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVJ
bml0aWFsQ29udGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6Cisg
ICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVYIC8vIFRoaXMgY2FzZSBlbnN1
cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KKyAgICAgICAgICAgIHx8IChuZXdMZW5ndGgg
Pj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgICAgICYmICFpc0RlbnNlRW5v
dWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwgY291bnRFbGVtZW50c0luQ29udGlndW91cyhtX2J1dHRl
cmZseSkpKSkgeworICAgICAgICAgICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
CisgICAgICAgICAgICAgICAgZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERh
dGEoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChuZXdMZW5ndGggPiBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIG5ld0xl
bmd0aCwgdGhyb3dFeGNlcHRpb24sIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBK
U1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRp
Z3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGgtLSkKKyAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF07CisgICAgICAgIGlmICh2YWx1ZSkgeworICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmNsZWFyKCk7CisgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewog
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgCkBAIC00MjUsMjYgKzQ4MSwyOCBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLQotICAgICAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBp
bmR4LgotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgotICAgICAgICBpZiAoIWRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ2FsbCB0aGUgW1tQdXRd
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5k
IHRydWUuCi0gICAgICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAgICAgIC8v
IFJldHVybiBlbGVtZW50LgotICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9
CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBnZXRBcnJheUxlbmd0aCgpOworICAgIC8vIExl
dCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0
KGV4ZWMsIGluZGV4KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAgICBpZiAoIWRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAg
ICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgIC8vIFJldHVybiBlbGVtZW50Lgor
ICAgIHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBp
ZGVudGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtNDU4LDYgKzUxNiwyNiBA
QCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAg
ICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICAgICAgbWV0
aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsK
KyAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxl
bmd0aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRl
cyhleGVjLCBsZW5ndGgsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
ICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgdW5zaWdu
ZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgICAgIGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQ
dXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0aCwgdmFsdWUsIHRydWUpKSB7CkBAIC01OTIs
NiArNjcwLDQ2IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KGMKICAg
ICByZXR1cm4gY29kZVBvaW50Q29tcGFyZSh2YS0+c2Vjb25kLCB2Yi0+c2Vjb25kKTsKIH0KIAor
dGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgc29ydE51bWVyaWNWZWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBi
ZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpCit7CisgICAgQVNTRVJUKGluZGV4aW5nVHlw
ZSA9PSBBcnJheVdpdGhDb250aWd1b3VzIHx8IGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZDsKKyAgICB1bnNpZ25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICBjb21wYWN0Rm9yU29ydGlu
ZzxpbmRleGluZ1R5cGU+KAorICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCksCisgICAgICAgIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwKKyAgICAgICAgbmV3UmVsZXZhbnRMZW5ndGgpOwor
ICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YSA9IGluZGV4aW5nRGF0YTxpbmRl
eGluZ1R5cGU+KCk7CisgICAgCisgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2UgJiYgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICgh
ZGF0YVtpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBp
ZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBh
cmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAKKyAgICAvLyBGb3IgbnVtZXJp
YyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNv
cnQuIFdlCisgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwg
c2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3
YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgorICAgIHFzb3J0KGRh
dGEsIG5ld1JlbGV2YW50TGVuZ3RoLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29t
cGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgcmV0dXJuOworfQorCiB2b2lkIEpTQXJyYXk6OnNv
cnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxU
eXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAgQVNTRVJUKCFp
blNwYXJzZUluZGV4aW5nTW9kZSgpKTsKQEAgLTYwMCw0MSArNzE4LDk4IEBAIHZvaWQgSlNBcnJh
eTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZv
clNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIGNhc2UgQXJyYXlXaXRoQ29u
dGlndW91czoKKyAgICAgICAgc29ydE51bWVyaWNWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4o
ZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsK
LSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KGV4ZWMsIGNvbXBhcmVG
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKwordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNB
cnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIFdyaXRlQmFycmllcjxV
bmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKQoreworICAgIGlmICghcmVs
ZXZhbnRMZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBDb252ZXJ0aW5nIEphdmFT
Y3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25j
ZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgIC8vIFRoaXMgaXMgYSBjb25z
aWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwg
dGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgLy8gYnVmZmVyLiBCZXNp
ZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUg
Y3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KKyAgICAvLyByYW5kb20gb3Igb3Ro
ZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0
aW9uIGluY29uc2lzdGVudC4KICAgICAgICAgCi0gICAgICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVt
YmVycyA9IHRydWU7Ci0gICAgICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewotICAgICAg
ICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1Bh
aXI+IHZhbHVlcyhyZWxldmFudExlbmd0aCk7CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewor
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCi0gICAgICAg
ICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwog
ICAgICAgICAKLSAgICAgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFz
dCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAgICAgICAvLyBhbHNvIGRv
bid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIg
dmlzaWJsZQotICAgICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBv
ZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rv
ciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9y
UVNvcnQpOworICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgpOworICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5k
ZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVl
LmlzUHJpbWl0aXZlKCk7CisgICAgfQorICAgICAgICAKKyAgICAvLyBGSVhNRTogVGhlIGZvbGxv
d2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVz
IGV2ZW4gYWZ0ZXIKKyAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4K
ICAgICAgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsr
KQorICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5n
SW5saW5lKGV4ZWMpOworICAgICAgICAKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAorICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBz
b3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSBy
YWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAgLy8gdGhhbiBPKE4gbG9n
IE4pLgorICAgICAgICAKKyNpZiBIQVZFKE1FUkdFU09SVCkKKyAgICBpZiAoaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzKQorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUo
KSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7
CisgICAgZWxzZQorICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OworI2Vsc2UKKyAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlr
ZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMg
bm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJm
b3JtIGEgc3RhYmxlIHNvcnQuCisgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OworI2VuZGlmCisgICAgCisgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQg
dGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCisgICAgLy8gaW5jcmVh
c2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1
ZXMuCisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZ2xvYmFsRGF0YSwgcmVsZXZh
bnRMZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkg
PCByZWxldmFudExlbmd0aCkgeworICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCByZWxldmFudExlbmd0aCk7CisgICAgICAgICAgICBiZWdpbiA9IGFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJyYXlTdG9y
YWdlKCktPmxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpCisgICAgICAgICAgICBhcnJheVN0b3Jh
Z2UoKS0+c2V0TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBD
UkFTSCgpOwogICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5n
dGg7IGkrKykKKyAgICAgICAgYmVnaW5baV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tp
XS5maXJzdCk7CisgICAgCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCkBAIC02
NDUsNzggKzgyMCwzMCBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogICAg
IGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFy
cmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkbmdV
bmRlZmluZWQ7CisgICAgICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3RoOworICAgICAgICBj
b21wYWN0Rm9yU29ydGluZzxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAgICAgIGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLCBuZXdSZWxldmFudExl
bmd0aCk7CisgICAgICAgIAorICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aENv
bnRpZ3VvdXM+KAorICAgICAgICAgICAgZXhlYywgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkOworICAgICAgICB1bnNpZ25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICAgICAgY29tcGFj
dEZvclNvcnRpbmc8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPigKKyAgICAgICAgICAgIGV4ZWMtPmds
b2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLCBuZXdSZWxldmFudExlbmd0
aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CiAgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVy
dGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdl
IGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAgICAgLy8g
VGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBl
ciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAg
ICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYg
c29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAg
ICAgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVs
eSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCi0gICAgICAgIAotICAgICAg
ICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKTsKLSAgICAgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZh
bHVlcyk7Ci0gICAgICAgIAotICAgICAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9
IHRydWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQo
KSk7Ci0gICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgICAgIGlz
U29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1
ZS5pc1ByaW1pdGl2ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
VGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVl
bnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBh
biBleGNlcHRpb24uCi0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgdmFsdWVzW2ldLnNl
Y29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSGVhcDo6
aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0
IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRp
eCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgICAgIC8vIHRoYW4gTyhOIGxv
ZyBOKS4KLSAgICAgICAgCi0jaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgICAgIGlmIChpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFs
dWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJG
b3JRU29ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVn
aW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0
cmluZ1BhaXJGb3JRU29ydCk7Ci0jZWxzZQotICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxp
YnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgICAg
ICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBp
biBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgotICAgICAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAg
IC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRv
IGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICAgICAgaWYg
KHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7
Ci0gICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdG9yYWdlLT5s
ZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgICAgICAKLSAg
ICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsg
aSsrKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0gICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMp
LT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAgICAgCisgICAgICAgIHNvcnRDb21w
YWN0ZWRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oCisgICAgICAgICAgICBleGVjLCBzdG9y
YWdlLT5tX3ZlY3RvciwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MDIsNzUgKzkyOSw3MiBAQCBzdHJ1Y3QgQVZMVHJl
ZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiAgICAgc3RhdGljIGhhbmRsZSBudWxsKCkgeyBy
ZXR1cm4gMHg3RkZGRkZGRjsgfQogfTsKIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBD
YWxsRGF0YSYgY2FsbERhdGEpCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgor
dm9pZCBKU0FycmF5Ojpzb3J0VmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJl
RnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7
CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICBBU1NFUlQoaW5kZXhp
bmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgCi0gICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6Ci0g
ICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFp
c2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgogICAgICAgICAKLSAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1
bmN0aW9uIG9yIGluIHRvTnVtYmVyLgotICAgICAgICAKLSAgICAgICAgLy8gVGhlIG1heGltdW0g
dHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAg
dG8gbm8gZ29vZAotICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCi0gICAg
ICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwotICAgICAgICBpZiAoc3RvcmFnZS0+bGVu
Z3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0
aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29v
ZAorICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICBBU1NFUlQobV9idXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSkKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOwotICAgICAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsgKHN0
b3JhZ2UtPm1fc3BhcnNlTWFwID8gc3RvcmFnZS0+bV9zcGFyc2VNYXAtPnNpemUoKSA6IDApOwor
ICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSByZWxldmFudExlbmd0aDxpbmRleGluZ1R5
cGU+KCk7CisgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChoYXNB
cnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSAmJiBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAg
PyBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAtPnNpemUoKSA6IDApOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCFub2Rl
Q291bnQpCisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEFWTFRyZWU8QVZMVHJl
ZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91
Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhl
YzsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJl
RnVuY3Rpb247Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0g
Y2FsbFR5cGU7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0g
JmNhbGxEYXRhOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNv
dW50KTsKKyAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4g
dHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCisgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVG
dW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBh
cmVDYWxsVHlwZSA9IGNhbGxUeXBlOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxEYXRhID0gJmNhbGxEYXRhOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhu
b2RlQ291bnQpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMp
Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihu
ZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiks
IDIpKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKKyAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganND
YXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CiAgICAgICAgIAotICAgICAg
ICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewotICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlm
aWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0g
ICAgICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRo
ZSB0cmVlIGhlcmUuCisgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlm
aWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCisg
ICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRy
ZWUgaGVyZS4KICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAg
ICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgIHVuc2lnbmVkIG51bURlZmluZWQg
PSAwOworICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CiAgICAgICAgIAotICAgICAgICAv
LyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRp
bmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUg
dHJlZS4KLSAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251
bURlZmluZWQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251
bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVt
RGVmaW5lZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5l
ZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAg
ICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVt
VW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAg
ICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgICAg
ICsrbnVtRGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9CisgICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVz
LCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgZm9yICg7
IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAg
SlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQo
KTsKKyAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
djsKKyAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgfQorICAgIGZvciAodW5z
aWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5nZXQoKTsKKyAg
ICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAg
ICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAr
K251bURlZmluZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVu
ZGVmaW5lZDsKKyAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZDsKICAgICAgICAgCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGlu
Z1R5cGUpKSB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgp
OwogICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXAuZ2V0KCkpIHsKICAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5z
aXplKCk7CiAgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKSB7CkBAIC04NzksNyArMTAwMyw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwpAQCAtODkxLDMxICsxMDE1LDQ4IEBAIHZvaWQg
SlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgIH0KKyAgICB9CiAgICAg
ICAgIAotICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0g
bnVtRGVmaW5lZCk7CisgICAgQVNTRVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgp
ID49IG51bURlZmluZWQpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21w
YXJlIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dp
bmcgbWlnaHQgYmUKLSAgICAgICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHku
CisgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0
aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dpbmcgbWlnaHQgYmUKKyAgICAvLyBtb2RpZnlpbmcg
dGhlIHZlY3RvciBpbmNvcnJlY3RseS4KICAgICAgICAgCi0gICAgICAgIC8vIENvcHkgdGhlIHZh
bHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgotICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFj
dG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgICAgIGl0ZXIuc3Rh
cnRfaXRlcl9sZWFzdCh0cmVlKTsKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
RGVmaW5lZDsgKytpKSB7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOwot
ICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9CisgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJh
Y2sgaW50byBtX3N0b3JhZ2UuCisgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5
Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOworICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0
cmVlKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgeworICAgICAg
ICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICsraXRlcjsK
KyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGlu
LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZp
bmVkKCk7CisgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAg
ICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldFVuZGVmaW5lZCgpOwogICAg
ICAgICAKLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9y
IGFyZSB6ZXJvZWQgb3V0LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9y
TGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGlu
IHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNl
ZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgaW5kZXhp
bmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5jbGVhcigpOworICAgICAgICAKKyAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKK30KKwordm9pZCBK
U0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENh
bGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgQVNTRVJU
KCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1Vz
ZWRWZWN0b3JMZW5ndGg7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBz
b3J0VmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgc29ydFZlY3RvcjxBcnJheVdp
dGhBcnJheVN0b3JhZ2U+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC05MjYsOTcgKzEwNjcsMTE3
IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCBKU0Fy
cmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBh
cmdzKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICAKICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAg
ICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB2ZWN0
b3IgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBz
dG9yYWdlLT5tX3ZlY3RvcjsKLSAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKHN0b3Jh
Z2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIHVuc2lnbmVk
IGkgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAo
IXYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCh2Lmdl
dCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICg7IGkgPCBzdG9yYWdlLT5s
ZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAg
ICAgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAg
IAorICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CiAgICAgfQorICAgIAorICAgIGZv
ciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQoZ2V0
KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRl
KiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogeworICAgIHVu
c2lnbmVkIGkgPSAwOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOworICAgIHVu
c2lnbmVkIHZlY3RvckVuZDsKKyAgICAKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0
aCgpKTsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNh
c2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5
V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKTsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0
b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKTsKLSAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICAg
ICAgaWYgKCF2KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZyYW1l
LT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1l
bnQoaSwgZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBz
dG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgp
OwogICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgaWYgKCF2KQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5n
ZXQoKSk7CisgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAg
IGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAotdW5zaWduZWQg
SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordGVt
cGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3Vuc2lnbmVkIEpTQXJyYXk6OmNvbXBh
Y3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQmIG51bURlZmlu
ZWQsIHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNl
SW5kZXhpbmdNb2RlKCkpOworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKTsKIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICB1bnNpZ25lZCBteVJlbGV2YW50TGVuZ3RoID0gcmVsZXZhbnRM
ZW5ndGg8aW5kZXhpbmdUeXBlPigpOworICAgIAorICAgIG51bURlZmluZWQgPSAwOworICAgIHVu
c2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1E
ZWZpbmVkID0gMDsKLSAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICBmb3Ig
KDsgbnVtRGVmaW5lZCA8IG15UmVsZXZhbnRMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAg
ICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251bURlZmluZWRdLmdl
dCgpOworICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAgaWYgKCF2IHx8IHYu
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAgICAgIGlmICh2Lmlz
VW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwotICAgICAgICAgICAgfQorICAg
IGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBteVJlbGV2YW50TGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5n
ZXQoKTsKKyAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkKytdLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVm
aW5lZDsKKyAgICBuZXdSZWxldmFudExlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7
CisgICAgCisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFycmF5V2l0aENv
bnRpZ3VvdXM6CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAg
ICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKICAgICAgICAgICAgIGlmIChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5
IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcyAtIGlmIG5vdCwKQEAgLTEwMzMs
MjIgKzExOTQsMTcgQEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbAog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsg
aSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFVuZGVmaW5lZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLSAgICAgICAgCi0gICAgICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIG51bURlZmluZWQ7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biAwOworICAgICAgICBDUkFTSCgpOwogICAgIH0KKyAgICAgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1JlbGV2YW50TGVuZ3RoOyArK2kpCisgICAgICAgIGlu
ZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3UmVsZXZhbnRMZW5ndGg7IGkgPCBteVJlbGV2YW50TGVuZ3RoOyArK2kp
CisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uY2xlYXIoKTsKIH0KIAot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTMgKzk5LDMzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25s
eSgpOwogICAgICAgICB9CiAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZT4KKyAgICAgICAgdm9pZCBzb3J0TnVtZXJpY1ZlY3RvcihFeGVjU3RhdGUqLCBKU1ZhbHVl
IGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxs
RGF0YSk7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiwgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpOworICAgICAg
ICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAg
dm9pZCBzb3J0VmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxs
VHlwZSwgY29uc3QgQ2FsbERhdGEmKTsKKworICAgICAgICBib29sIHNldExlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0
aW9uLCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVj
U3RhdGUqLCBib29sIHdyaXRhYmxlKTsKIAogICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dD
YXNlKEpTR2xvYmFsRGF0YSYsIGJvb2wsIHVuc2lnbmVkKTsKICAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB0ZW1wbGF0
ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIGNvbXBhY3RGb3JTb3J0
aW5nKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkJiBudW1EZWZpbmVkLCB1bnNpZ25lZCYgbmV3UmVs
ZXZhbnRMZW5ndGgpOwogICAgIH07CiAKKyAgICBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVDb250
aWd1b3VzQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgeworICAgICAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7CisgICAgICAgIGhl
YWRlci5zZXRWZWN0b3JMZW5ndGgoc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pKTsK
KyAgICAgICAgaGVhZGVyLnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICByZXR1cm4g
QnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBo
ZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwor
ICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7CiAgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCkBAIC0xMjEsNyAr
MTQxLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAg
YnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGlu
aXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxMZW5ndGggPCBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UK
KyAgICAgICAgICAgICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgYnV0dGVy
Zmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7Cisg
ICAgICAgIH0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMzMsMTUgKzE2MSwyNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIHRl
bXA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9y
TGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7Ci0gICAgICAg
ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGlu
aXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1faW5kZXhC
aWFzID0gMDsKLSAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKLSAgICAgICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCAwKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxl
bmd0aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVu
Z3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAg
ICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkp
LCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAg
ICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJh
eShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNs
ZWFyKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlh
bExlbmd0aDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0Fy
cmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzEsNyArMjMxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1
ZSBwcm90bwogICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU05vbkZpbmFsT2JqZWN0Pjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KTsKIAogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKSk7Ci0gICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Fy
cmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKKyAgICBtX2FycmF5
U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCks
IEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3Rv
cmFnZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpKTsKICAgICBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlKSk7CiAgICAgbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7
CiAKQEAgLTQwNyw2ICs0MDgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUo
SlNHbG9iCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIEpTQXJyYXkgYWxsb2NhdGlvbnMgdGhh
dCBsb2FkIHRoZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgZnJvbQogICAgIC8vIHRoaXMgb2JqZWN0
IG5vdyBsb2FkIGEgc3RydWN0dXJlIHRoYXQgdXNlcyBTbG93UHV0LgogICAgIG1fYXJyYXlTdHJ1
Y3R1cmUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0Lmdl
dCgpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkpOwogICAgIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGFsbCBvYmplY3RzIHRoYXQgaGF2ZSBpbmRleGVkIHN0b3JhZ2Ugc3dp
dGNoIHRvIHRoZSBzbG93IGtpbmQgb2YKICAgICAvLyBpbmRleGVkIHN0b3JhZ2UuCkBAIC00ODIs
NiArNDg0LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVTY29wZVN0cnVjdHVyZSk7CiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJndW1lbnRzU3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZSk7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQ
dXQpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Jvb2xlYW5PYmplY3RTdHJ1
Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrQ29uc3Ry
dWN0b3JTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiAr
MTI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fbmFtZVNjb3BlU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X2FyZ3VtZW50c1N0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9h
cnJheVN0cnVjdHVyZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xv
d1B1dCBhcyBzb29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCisgICAgICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyAv
LyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMg
d2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlOwpAQCAtMjYxLDcgKzI2
Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmUqIG5hbWVTY29wZVN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVNjb3BlU3RydWN0dXJlLmdldCgpOyB9CiAgICAg
ICAgIFN0cnVjdHVyZSogYXJndW1lbnRzU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgU3Ry
dWN0dXJlKiBhcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBt
X2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5nZXQoKTsgfQogICAgICAgICB2b2lkKiBh
ZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpIHsgcmV0dXJuICZtX2FycmF5U3RydWN0dXJlOyB9Cisg
ICAgICAgIHZvaWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIHsg
cmV0dXJuICZtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgfQogICAgICAgICBTdHJ1
Y3R1cmUqIGJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Jvb2xlYW5P
YmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0NvbnN0
cnVjdG9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tGdW5jdGlvblN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsg
fQpAQCAtNDY2LDcgKzQ2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOworICAgICAgICByZXR1cm4gSlNBcnJh
eTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgaW5pdGlhbExlbmd0aCA+PSBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYID8gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3Jh
Z2UoKSA6IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CiAg
ICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMxLDI0ICsxMzEsNDAgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cgogICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1hcmsg
YW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7CisgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7CisgICAgICAgICAgICBzaXplX3Qg
Y291bnQ7CisgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzogeworICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkgPD0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAg
ICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCkpOwotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yOwotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJj
ZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9y
TGVuZ3RoKCk7IGNvdW50LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1
ZSgmdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cjsKKyAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgLy8gTm90IHN1cmUgaWYgdGhpcyBpcyByaWdo
dC4gV2h5IGlzbid0IHRoaXMgcHVibGljTGVuZ3RoKCk/CiAgICAgICAgICAgICAgICAgaWYgKG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQogICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGNv
dW50LS0pIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2Ur
KyktPmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1dHRlcmZseSA9IG5l
d0J1dHRlcmZseTsKQEAgLTE1OCw2ICsxNzQsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgIAogICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBh
cHByb3ByaWF0ZS4KICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCkBAIC0yMzQsNiArMjUzLDIwIEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAg
ICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bGVuZ3RoKCkpCkBAIC0zNTEsNiArMzg0LDE2IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
cygpW3Byb3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFs
dWUpOworICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpCisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwcm9wZXJ0eU5hbWUg
KyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwpAQCAtMzYxLDE1ICs0MDQsMTMgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJ
bmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVl
U2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW3Byb3BlcnR5TmFtZV07CiAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgICAgICAKLSAgICAgICAgLy8gVXBkYXRl
IGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICB2YWx1
ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAg
ICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCBhcyBuZWNlc3NhcnkuCiAgICAgICAgIGlmIChw
cm9wZXJ0eU5hbWUgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0eU5h
bWUgKyAxOwogICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7Ci0gICAgICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSBpZiAo
IXZhbHVlU2xvdCkKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
LSAgICAgICAgCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
T2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCkBAIC0zODMsMTcgKzQyNCwxNSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgICAgIAotICAgICAgICAvLyBVcGRhdGUgbGVuZ3RoICYg
bV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAgIC8vIFVwZGF0ZSBsZW5n
dGggYXMgbmVjZXNzYXJ5LgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgewog
ICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhP
bkhvbGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnR5TmFtZSArIDE7CiAg
ICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKLSAgICAgICAgICAgICsrc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90
KSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJ
bmRleE9uSG9sZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdykpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwpAQCAtNDQzLDYgKzQ4MiwxMSBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiB2b2lkIEpTT2JqZWN0Ojpl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewog
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgLy8gTk9URTogdGhpcyBpcyBob3Jy
aWJseSBpbmVmZmljaWVudCwgYXMgaXQgd2lsbCBwZXJmb3JtIHR3byBjb252ZXJzaW9ucy4gV2Ug
Y291bGQgb3B0aW1pemUKKyAgICAgICAgLy8gdGhpcyBjYXNlIGlmIHdlIGV2ZXIgY2FyZWQuCisg
ICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSkpOworICAgICAgICBicmVhazsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlT
dG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCkpOwogICAgICAgICBicmVhazsKQEAgLTQ2NSw2ICs1MDksMjQgQEAgdm9pZCBKU09iamVjdDo6
bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBYwogICAgIGdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRp
bWUoZ2xvYmFsRGF0YSk7CiB9CiAKK1dyaXRlQmFycmllcjxVbmtub3duPiogSlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIElu
ZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFT
U0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKKyAg
ICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBBU1NF
UlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
ID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNl
LCAwLAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKTsKKyAg
ICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgIG5ld0J1dHRlcmZs
eS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0
YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiBuZXdCdXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKTsKK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCiB7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCk7CkBAIC00NzgsOSArNTQwLDggQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CiAg
ICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICByZXN1bHQtPm1f
c3BhcnNlTWFwLmNsZWFyKCk7Ci0gICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsK
ICAgICByZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkpOworICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3Jh
Z2VUcmFuc2l0aW9uKCkpOwogICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJm
bHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ5MCwxNiArNTUx
LDkwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKICAgICByZXR1
cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7CiB9
CiAKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNp
dGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3Vz
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIHVuc2lnbmVkIHB1Ymxp
Y0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5z
aWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAK
KyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAg
ICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAg
ICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAg
ICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBB
cnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChuZWVkZWRMZW5ndGgpOworICAgIG5ld1N0
b3JhZ2UtPnNldExlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNl
TWFwLmNsZWFyKCk7CisgICAgbmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG1lbWNw
eSgKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3IsIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCksIHB1YmxpY0xlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIAorICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOworICAgIHNldEJ1dHRlcmZseShn
bG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ld1N0
b3JhZ2U7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3Rv
cmFnZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVk
QXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKK30KKworV3JpdGVCYXJyaWVyPFVua25vd24+KiBK
U09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
eworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBB
TExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1No
b3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQ29udGln
dW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBBU1NFUlQo
IWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCkt
Pm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgICAgICByZXR1cm4gY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgCiAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJl
U3BhcnNlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJu
IGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CiAgICAgICAgIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0J1dHRlcmZseSogSlNPYmplY3Q6OmVuc3Vy
ZUluZGV4ZWRTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZSgpLT5uZWVkc1Ns
b3dQdXRJbmRleGluZygpKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGlu
ZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpLT5i
dXR0ZXJmbHkoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6ZnJvbUNvbnRpZ3VvdXMoY3Jl
YXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMCkpOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogfQpAQCAtNTA3LDYgKzY0MiwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1
cmVBcnJheVN0b3JhCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZpY2llbnQsIGlmIHdlIGNhcmVkLgorICAgICAg
ICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCkpOwogICAgICAgICAKQEAgLTUyNiw2ICs2NjUsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJy
YXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7CkBAIC01NjksOCArNzEzLDcgQEAg
dm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YQogICAgIGlmIChzaG91bGRV
c2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7
Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVjdHVyZSk7CisgICAgc3dpdGNo
VG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogfQogCiBib29sIEpTT2JqZWN0Ojpz
ZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFs
dWUgcHJvdG90eXBlKQpAQCAtNzA0LDE2ICs4NDcsMjAgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQwogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAg
CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAg
ICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwotICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAg
ICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKICAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwogICAgICAgICAg
ICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewogICAgICAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQpAQCAtODc3LDYgKzEwMjQsMTcgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG9iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5ndGggPSBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdXNlZExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29udGln
dW91cygpW2ldKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTEyODYsMTEgKzE0NDQs
MTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8g
Z3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxl
bmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgIGlmIChpbmNyZWFzZVZlY3Rvckxl
bmd0aChnbG9iYWxEYXRhLCBpICsgMSkpIHsKICAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVy
ZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBz
dG9yZSB0byB0aGUgdmVjdG9yLgogICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgp
OwogICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRv
LCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUg
YSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KQEAgLTEzMTMsMTYgKzE0NzAsMTQgQEAgdm9p
ZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIH0KIAogICAgIC8vIFdl
IGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQg
dG8gYmUgZG9pbmcgc28uCi0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNl
IG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwg
b3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAt
PnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVl
c0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxl
bmd0aCkpIHsKKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYg
U3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFs
bG9jYXRpb24gZmFpbHMuCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpbmNyZWFzZVZl
Y3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKICAgICAgICAgbWFwLT5w
dXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rv
ckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgLy8gUmVyZWFkIG1fc3Rv
cmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aC4KICAgICBzdG9yYWdlID0gYXJyYXlTdG9y
YWdlKCk7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJy
YXk7CiAKICAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3Rv
ciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9y
ID0gc3RvcmFnZS0+bV92ZWN0b3I7CkBAIC0xMzMzLDExICsxNDg4LDQxIEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KIAogICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJv
cGVydHkgaW50byB0aGUgdmVjdG9yLgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgp
KTsKKyAgICAKKyAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRoZXIg
Z3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyBv
ciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KKyAgICBBU1NFUlQoaSA+PSBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIAorICAgIGlmIChpICsgMSA+PSBNQVhfQVJSQVlfSU5E
RVgKKyAgICAgICAgfHwgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAg
JiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgY291bnRFbGVtZW50c0luQ29udGlndW91cyht
X2J1dHRlcmZseSkpKSkgeworICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAg
ICAgbWFwLT5wdXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgZmFsc2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3RkOjptaW4o
CisgICAgICAgIHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKGkgKyAxKSwKKyAgICAgICAg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
KCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAg
ICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBtX2J1dHRl
cmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgaWYgKGkgPj0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKGkgKyAxKTsKKyAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCB2YWx1ZSk7Cit9CisKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKQEAgLTEzNDgsMTcgKzE1MzMsMjggQEAgdm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAg
aWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkgewotICAgICAgICAgICAgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRo
cm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LAorICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7Cisg
ICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgK
KyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7Ci0gICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNy
ZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVj
dG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9i
YWxEYXRhLCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgICAgICAKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
Y3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgo
MCwgMCwgaSArIDEpKTsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IDE7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4
ZWMsIGksIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTEzODQs
OCArMTU4MCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLQorICAgIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBp
cyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaGFzQXJyYXlTdG9y
YWdlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChhcnJheVN0b3Jh
Z2UoKSA9PSBzdG9yYWdlKTsKICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSB8fCBhdHRyaWJ1dGVzKTsKICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwogCkBA
IC0xNDAzLDEyICsxNjAxLDEwIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG8KICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1
c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KICAgICAgICAg
aWYgKExJS0VMWSgKICAgICAgICAgICAgICAgICAhYXR0cmlidXRlcwotICAgICAgICAgICAgICAg
ICYmIChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IpKQogICAgICAgICAgICAgICAgICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEs
IGkgKyAxKSkpIHsKICAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBz
aW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVj
dG9yLgogICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0
IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBt
YXAgJiBhZGQgdGhlIHZhbHVlLgpAQCAtMTQzMiwxMyArMTYyOCwxMSBAQCBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAKICAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVz
aW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgog
ICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9k
ZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24g
ZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwg
YXR0cmlidXRlcyB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0lu
QXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0
aCkpCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJpYnV0ZXMgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJu
IG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsK
IAotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVw
ZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIg
aW5jcmVhc2VWZWN0b3JMZW5ndGguCiAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwotICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwogCiAgICAg
Ly8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxl
dGUgdGhlIG1hcC4KICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOwpAQCAtMTQ0OSw4ICsxNjQzLDYgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0bwogCiAgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRo
ZSB2ZWN0b3IuCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3Jb
aV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKICAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE0NjcsMTQgKzE2NTksMzEgQEAgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6IHsK
LSAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKQotICAg
ICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKLSAg
ICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUsIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7Ci0gICAgICAgIAot
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOwotICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgaWYgKGluZGV4aW5n
U2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAg
ICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLAorICAgICAgICAgICAgICAg
IGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShn
bG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCkgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwg
YXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3RydWN0dXJlLT5uZWVkc1Nsb3dQdXRJbmRleGluZygp
KSB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOwor
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCBpICsgMSlbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAg
IGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAor
ICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAgICAg
ICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVz
KGV4ZWMsIGksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDk5
LDEyICsxNzA4LDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3Vgog
ICAgIGVsc2UgaWYgKCFjdXJyZW50VmVjdG9yTGVuZ3RoKQogICAgICAgICBpbmNyZWFzZWRMZW5n
dGggPSBzdGQ6Om1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKICAgICBlbHNlIHsK
LSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBp
bmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6
Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3Ro
ICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwg
b3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVz
aXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7CisgICAgICAgIGluY3JlYXNl
ZExlbmd0aCA9IHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5VHdvKGRlc2lyZWRMZW5ndGgpOwog
ICAgIH0KIAogICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CkBA
IC0xNTI0LDkgKzE3MjgsMTAgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0
TmV3VgogICAgICAgICB2ZWN0b3JMZW5ndGggPSAwOwogICAgICAgICBsZW5ndGggPSAwOwogICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZlY3Rvckxl
bmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAg
ICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAg
ICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAg
bGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTUzNSw2ICsxNzQwLDI2IEBAIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICByZXR1cm4gZ2V0TmV3VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKIH0KIAordW5z
aWduZWQgSlNPYmplY3Q6OmNvdW50VmVjdG9yRWxlbWVudHNJbkFycmF5U3RvcmFnZShBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgdW5zaWduZWQgbnVtVmFsdWVzID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpOyBpLS07KSB7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKKyAg
ICAgICAgICAgIG51bVZhbHVlcysrOworICAgIH0KKyAgICByZXR1cm4gbnVtVmFsdWVzOworfQor
Cit1bnNpZ25lZCBKU09iamVjdDo6Y291bnRFbGVtZW50c0luQ29udGlndW91cyhCdXR0ZXJmbHkq
IGJ1dHRlcmZseSkKK3sKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXMgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsKKyAgICAgICAgaWYg
KGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldKQorICAgICAgICAgICAgbnVtVmFsdWVzKys7Cisg
ICAgfQorICAgIHJldHVybiBudW1WYWx1ZXM7Cit9CisKIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNl
VmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3Ro
KQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5h
bGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1
ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCkBAIC0xNTQzLDYgKzE3NjgsMTAgQEAgYm9vbCBKU09i
amVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICBp
ZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKKyAgICAgICAgJiYgIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IobmV3TGVuZ3RoLCBjb3VudFZlY3RvckVsZW1lbnRzSW5BcnJheVN0
b3JhZ2Uoc3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBp
bmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTE1NzQsNiArMTgwMywyMyBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9B
UlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8
IGxlbmd0aCkgeworICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlS
aWdodCgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCisgICAgICAgICAgICBsZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGxlbmd0aCk7Cit9CisKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CkBAIC0xNjAyLDYgKzE4NDgsMTcg
QEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsK
KyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCAwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDggKzE0OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjEsOCArMTYyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTIwNyw2ICsyMDksOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV07CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAg
ICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwogICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTIxOCw2ICsyMjIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICAgICAgewogICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOwogICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTI2Nyw5ICsyNzMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKQpAQCAtMjg1LDggKzI5Miw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjk2LDE1ICszMDQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoaSA+
PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzogewotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICAgICAg
aWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9y
YWdlLT5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpICsgMSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAg
ICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zMTUsMTAgKzMyNywxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC0zMzEsNiArMzQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5p
blNwYXJzZU1vZGUoKTsKQEAgLTUyOCw2ICs1NDcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIC8vIGZvby0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZSguLi4pOwogICAg
ICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUo
RXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIDAg
aWYgY29udGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UK
KyAgICAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBvciBiZWNhdXNlIHdlJ3JlIGhh
dmluZyBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVuc3VyZUNv
bnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxE
YXRhKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9i
amVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQogICAgICAg
ICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBo
YXZlIHJlcXVpcmVkIHRoZQogICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhh
dmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKQEAgLTU0MCw2ICs1NjksMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdl
U2xvdyhnbG9iYWxEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgQnV0dGVyZmx5
KiBlbnN1cmVJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlSW5kZXhlZFN0b3JhZ2VT
bG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQpAQCAtNjAyLDExICs2MzksMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAg
ICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMo
SlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbik7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKIAogICAg
ICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5l
d0xlbmd0aCk7CkBAIC02MTcsNiArNjU5LDQ3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYpOwogICAg
ICAgICAKICAgICAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNrbHkg
dG8gc3VjY2VlZCBhbmQgeW91J3JlIHN1cmUgdGhhdAorICAgICAgICAvLyB0aGUgYXJyYXkgaXMg
Y29udGlndW91cy4KKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjb3Vu
dFZlY3RvckVsZW1lbnRzSW5BcnJheVN0b3JhZ2UoQXJyYXlTdG9yYWdlKiBzdG9yYWdlKTsKKyAg
ICAgICAgdW5zaWduZWQgY291bnRFbGVtZW50c0luQ29udGlndW91cyhCdXR0ZXJmbHkqIGJ1dHRl
cmZseSk7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlPgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGluZGV4aW5nRGF0YSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAg
ICAgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKGluZGV4aW5nVHlwZSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptaW4oCisg
ICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCks
CisgICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNjUxLDcgKzczNCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERh
dGEmKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xv
YmFsRGF0YSYpOworICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhK
U0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBCdXR0ZXJm
bHkqIG1fYnV0dGVyZmx5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBK
U1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoRXhlYwogCiBjaGFyKiBKU1ZhbHVlOjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMTI4Owor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsKICAgICBzdGF0aWMgY2hhciBkZXNj
cmlwdGlvbltzaXplXTsKIAogICAgIGlmICghKnRoaXMpCkBAIC0yMTMsOSArMjEzLDEyIEBAIGNo
YXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKICAgICAgICAgdS5hc0RvdWJsZSA9IGFz
RG91YmxlKCk7CiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAl
MDh4OiUwOHgsICVsZiIsIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0sIGFzRG91
YmxlKCkpOwogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChpc0NlbGwoKSkKLSAgICAgICAgc25wcmlu
dGYoZGVzY3JpcHRpb24sIHNpemUsICJDZWxsOiAlcCIsIGFzQ2VsbCgpKTsKLSAgICBlbHNlIGlm
IChpc1RydWUoKSkKKyAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKSB7CisgICAgICAgIHNucHJpbnRm
KAorICAgICAgICAgICAgZGVzY3JpcHRpb24sIHNpemUsICJDZWxsOiAlcCAoJXA6ICVzLCAlcyki
LAorICAgICAgICAgICAgYXNDZWxsKCksIGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgYXNDZWxsKCkt
PnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLAorICAgICAgICAgICAgaW5kZXhp
bmdUeXBlVG9TdHJpbmcoYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkpKTsKKyAgICB9IGVsc2UgaWYgKGlzVHJ1ZSgpKQogICAgICAgICBzbnByaW50
ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIlRydWUiKTsKICAgICBlbHNlIGlmIChpc0ZhbHNlKCkpCiAg
ICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRmFsc2UiKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI5Njky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIzLDExICszMjMsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdElu
Q2hhaW5NYXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVy
ZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0dXJlOjpu
ZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJbmRleGVkUHJv
cGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWlu
TWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5n
QUJhZFRpbWUoKSkKKyAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpCisgICAgICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1l
KCk7Cit9CisKK05vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5
U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdAoreworICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGlu
ZygpKQogICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIAog
ICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKQEAgLTU0Miw2ICs1NDYsMjUgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgICAgICByZXR1cm4gZXhp
c3RpbmdUcmFuc2l0aW9uOwogICAgIH0KICAgICAKKyAgICAvLyBTZWUgaWYgYW55IHByZXZpb3Vz
IHN0cnVjdHVyZSBoYXMgdGhlIGluZGV4aW5nIHR5cGUgd2Ugd2FudC4gVGVybWluYXRlIHRoZSB3
YWxrIGlmIHdlCisgICAgLy8gZW5jb3VudGVyIGEgdHJhbnNpdGlvbiB0aGF0IGRpZG4ndCBoYXZl
IHRvIGRvIHdpdGggaW5kZXhpbmcgdHlwZS4gVGhpcyByZWxpZXMgb24gdXMKKyAgICAvLyBuZXZl
ciBjaGFuZ2luZyB0aGUgaW5kZXhpbmcgdHlwZSBhbmQgc29tZXRoaW5nIGVsc2UgaW4gb25lIGdv
LgorICAgIGZvciAoU3RydWN0dXJlKiBjdXJyZW50ID0gc3RydWN0dXJlOyA7KSB7CisgICAgICAg
IFN0cnVjdHVyZSogcHJldmlvdXMgPSBjdXJyZW50LT5tX3ByZXZpb3VzLmdldCgpOworICAgICAg
ICBpZiAoIXByZXZpb3VzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChwcmV2aW91
cy0+bV9pbmRleGluZ1R5cGUgPT0gY3VycmVudC0+bV9pbmRleGluZ1R5cGUpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY3VycmVudCA9IHByZXZpb3VzOworICAgICAgICBpZiAoY3VycmVu
dC0+bV9pbmRleGluZ1R5cGUgPT0gaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgY3VycmVudCBzdHJ1Y3R1cmUga25vd3MgdGhhdCBpdCdzIHRoZSBzb3VyY2Ug
b2YgdHJhbnNpdGlvbnMuCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm5vdGlmeVRyYW5zaXRpb25G
cm9tVGhpc1N0cnVjdHVyZSgpOworICAgICAgICAgICAgLy8gTm90ZSwgd2Ugd291bGQgbGlrZSB0
byBhZGQgdGhpcyB0byB0aGUgdHJhbnNpdGlvbiB0YWJsZSwgYnV0IHdlIGNhbid0OiB0aGUgdGFi
bGUKKyAgICAgICAgICAgIC8vIHJlbGllcyBvbiB0cmFuc2l0aW9ucyBiZWluZyBhY3ljbGljLgor
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAg
U3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAg
ICAgdHJhbnNpdGlvbi0+bV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmli
dXRlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAKICAgICAgICAgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhl
ZEFjY2Vzc2VzKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRp
b24gc3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVl
ZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9u
IHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxP
YmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBw
b3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0
ZWQgdG8gcHJvcGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmlu
ZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNp
dGlvbiB7CisgICAgQWxsb2NhdGVDb250aWd1b3VzLAogICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdl
LAogICAgIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICBTd2l0Y2hUb1Nsb3dQdXRB
cnJheVN0b3JhZ2UsCkBAIC01NywxMiArNTgsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHRvQXR0cmli
dXRlcyhOb25Qcm9wZXJ0eQogaW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5k
ZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewog
ICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgQWxsb2NhdGVDb250aWd1b3VzOgor
ICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRB
cnJheVN0b3JhZ2UpKSk7CisgICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQ29udGlndW91czsK
ICAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8
IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3Vv
dXMpIHwgSGFzQXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7Cisg
ICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250aWd1b3VzKSB8IEhhc1Nsb3dQdXRBcnJh
eVN0b3JhZ2U7CiAgICAgY2FzZSBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAg
IEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgQVNTRVJUKCEob2xk
VHlwZSAmIEhhc0NvbnRpZ3VvdXMpKTsKICAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0Fy
cmF5U3RvcmFnZSkgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWRkSW5kZXhl
ZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBNYXlIYXZlSW5kZXhlZEFjY2Vz
c29yczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxNiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBoYXNUd29PCiAgICAgcmV0dXJuICFoYXNa
ZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oVCB2YWx1ZSkKK3sKKyAgICAvLyBNYXRo
ZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgIC8vICAgKHZhbHVlICogMyArIDEpIC8gMjsK
KyAgICAvLyBvcjoKKyAgICAvLyAgICh1bnNpZ25lZCljZWlsKHZhbHVlICogMS41KSk7CisgICAg
Ly8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICByZXR1
cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAodmFsdWUgJiAxKTsKK30KKwogI2lmICFDT01QSUxF
UihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIU9TKFNPTEFSSVMpCiB1c2luZyBzdGQ6Omlz
ZmluaXRlOwogI2lmICFDT01QSUxFUl9RVUlSSyhHQ0MxMV9HTE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166401</attachid>
            <date>2012-09-30 20:24:06 -0700</date>
            <delta_ts>2012-10-04 19:46:40 -0700</delta_ts>
            <desc>it compiles (holy contiguous)</desc>
            <filename>holycontiguous_4.patch</filename>
            <type>text/plain</type>
            <size>244618</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0wOS0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTA5LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNP
YmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSgpIGlnbm9yZXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
ZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcHJldmVudGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDcgQEAKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENENEM0MTVGNkI2QkIw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8q
IExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjEz
RTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAv
KiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNjAxNUQx
NTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNjAxNUExNTYx
OThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9
OwogCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTYzLDYgKzE2NCw3IEBACiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0QzE0QzNDRDQzMDA3
QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYwMjAwMDQ3MkE5IC8qIERGR0J5dGVDb2Rl
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIg
LyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAw
QTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsg
fTsKIAkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3
RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdE
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9OwpAQCAtODQ1LDYgKzg0Nyw3IEBACiAJCTBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQzQ1
ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleGluZ1R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1v
blNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5
OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdD
IC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkzMyw2ICs5MzYsNyBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNh
bXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0
MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBh
dGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEwMiw3ICsyMTA2
LDYgQEAKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlw
ZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAotCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5
Q2FsbGJhY2suaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0
dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVy
LmggKi8sCkBAIC0yMTEwLDYgKzIxMTMsNyBAQAogCQkJCTkzM0EzNDlBMDM4QUU3QzYwMDg2MzVD
RSAvKiBJZGVudGlmaWVyLmggKi8sCiAJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVyLmggKi8sCiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAv
KiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKQEAgLTIyNjcsNiArMjI3MSw3IEBACiAJCQkJMTRC
RkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oICovLAogCQkJCTE0MjBCRTdBMTBB
QTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAw
OTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0
NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBydW50aW1l
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0NzIsNTYgKzI0NzcsNTcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
aCAqLywKLQkJCQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5j
cHAgKi8sCi0JCQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIu
aCAqLywKLQkJCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLywKLQkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAotCQkJCTBGQjU0Njc2MTRGNTlB
RDEwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAogCQkJCTBGMjFDMjdF
MTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8sCi0JCQkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8sCi0JCQkJMEYyQkRD
MkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggKi8sCi0JCQkJMEY5RkM4QkYxNEUxQjVG
QjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwICovLAotCQkJCTBGOUZDOEMw
MTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggKi8sCi0JCQkJMEY5
RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKKwkJCQkwRjgwMjNFOTE2MTM4
MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCisJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1
QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCisJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5jcHAgKi8sCiAJCQkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5
SWRTdGF0dXMuY3BwICovLAotCQkJCTBGOTMzMjk2MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlk
U3RhdHVzLmggKi8sCi0JCQkJMEY5MzMyOTcxNENBN0RDMTAwODVGM0M2IC8qIE1ldGhvZENhbGxM
aW5rU3RhdHVzLmNwcCAqLywKLQkJCQkwRjkzMzI5ODE0Q0E3REMxMDA4NUYzQzYgLyogTWV0aG9k
Q2FsbExpbmtTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5jcHAgKi8sCi0JCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuaCAqLywKLQkJCQkwRkY0Mjc2RTE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUds
b2JhbFN0YXR1cy5jcHAgKi8sCi0JCQkJMEZGNDI3NkYxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29s
dmVHbG9iYWxTdGF0dXMuaCAqLywKLQkJCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggKi8sCiAJCQkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi8sCi0JCQkJMEYwQjgzQjYxNEJDRjhERjAwODg1
QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8sCi0JCQkJMEYwQjgzQjIxNEJDRjg1RTAwODg1
QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5jcHAgKi8sCi0JCQkJMEYwQjgzQjMxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovLAotCQkJCTBGMEI4M0FFMTRCQ0Y3MTQw
MDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAotCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywKLQkJCQlGRUI2M0FBMjE1OUI5REEzMDA4OTMyQTYg
LyogQ29tbWVudC5oICovLAotCQkJCTBGMEI4M0FDMTRCQ0Y2MDIwMDg4NUI0RiAvKiBMaW5lSW5m
by5oICovLAotCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJ
bmZvLmggKi8sCi0JCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZvLmgg
Ki8sCi0JCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1QjRGIC8qIENvZGVUeXBlLmggKi8sCiAJCQkJ
OTY5QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi8sCiAJCQkJOTY5QTA3
OTEwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGQkQ3RTY3MTQ0Nzk5
OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8sCisJCQkJMEYwQjgzQTUxNEJDRjUwNDAwODg1
QjRGIC8qIENvZGVUeXBlLmggKi8sCisJCQkJRkVCNjNBQTIxNTlCOURBMzAwODkzMkE2IC8qIENv
bW1lbnQuaCAqLywKIAkJCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovLAogCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAg
Ki8sCiAJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8s
CiAJCQkJOTY5QTA3OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKKwkJ
CQkwRjU2QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCisJ
CQkJMEY1NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKKwkJ
CQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLAor
CQkJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJ
CQkwRjkzMzI5NjE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5oICovLAorCQkJCTBG
MEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oICovLAorCQkJCTBG
MEI4M0E4MTRCQ0Y1NUUwMDg4NUI0RiAvKiBIYW5kbGVySW5mby5oICovLAogCQkJCTk2OUEwNzkz
MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oICovLAogCQkJCUJDRkQ4QzkwMEVFQjJF
RTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovLAogCQkJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuaCAqLywKKwkJCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovLAorCQkJCTBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovLAorCQkJCTBGMEI4M0FDMTRCQ0Y2
MDIwMDg4NUI0RiAvKiBMaW5lSW5mby5oICovLAorCQkJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1
NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovLAorCQkJCTBGMEI4M0IyMTRCQ0Y4NUUwMDg4NUI0
RiAvKiBNZXRob2RDYWxsTGlua0luZm8uY3BwICovLAorCQkJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4
NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAqLywKKwkJCQkwRjkzMzI5NzE0Q0E3REMxMDA4
NUYzQzYgLyogTWV0aG9kQ2FsbExpbmtTdGF0dXMuY3BwICovLAorCQkJCTBGOTMzMjk4MTRDQTdE
QzEwMDg1RjNDNiAvKiBNZXRob2RDYWxsTGlua1N0YXR1cy5oICovLAorCQkJCTBGQjU0NjdDMTRG
NUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLywKKwkJ
CQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oICovLAogCQkJCTk2OUEwNzk0MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuY3BwICovLAog
CQkJCTk2OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKLQkJCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovLAotCQkJCTBGRDgyRTRG
MTQxREFFQTEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oICovLAorCQkJCTBGMkJEQzJCMTUx
RkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAorCQkJCTBGOUZDOEJGMTRFMUI1RkIwMEQ1
MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLywKKwkJCQkwRjlGQzhDMDE0RTFC
NUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovLAorCQkJCTBGOTMzMjk5
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLywKKwkJCQkwRjkzMzI5QTE0
Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovLAorCQkJCTBGOUZDOEMxMTRFMUI1
RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCisJCQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZG
IC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwICovLAorCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRD
QjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggKi8sCiAJCQkJMTQyOUQ4ODMwRUQyMUMzRDAw
Qjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgKi8sCiAJCQkJMTQyOUQ4ODQwRUQyMUMzRDAwQjg5
NjE5IC8qIFNhbXBsaW5nVG9vbC5oICovLAorCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAv
KiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8sCisJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8q
IFNwZWN1bGF0ZWRUeXBlLmggKi8sCisJCQkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0
cnVjdHVyZVNldC5oICovLAogCQkJCTBGNzY2RDM2MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLywKIAkJCQkwRjc2NkQzNzE1QUU0QTFBMDA4
RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oICovLAogCQkJCUJDQ0Yw
RDBCMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgKi8sCkBAIC0yOTQ5
LDYgKzI5NTUsNyBAQAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgwMjNFQTE2MTM4
MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zNTU0LDYgKzM1NjEsNyBA
QAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhp
bmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikKKyAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2p1bXBzLmFw
cGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1fanVtcHMuc2l6ZSgpKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5LDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAoKSk7
CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFuY2hU
ZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1bXAo
TGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFs
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisjZGVm
aW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5
cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsKKwor
aW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBqaXRB
cnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklUQXJy
YXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAgQnlW
YWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
CisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJhZFR5
cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAg
ICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkp1
bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFycmF5
IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGludDE2
X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0
aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworaW5saW5l
IHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZvKQorewor
ICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAx
Mjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgpAQCAtMjA5LDYgKzIxMCwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBy
ZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFsSW5m
byYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRCeVZh
bEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNp
emUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJbmZv
JiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAg
ICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNl
dE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJlU3R1
YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1
YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CiAg
ICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9zLmdy
b3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0IHsg
cmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbElu
Zm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAgICAg
ICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZh
bEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVzb2x2
ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZvczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTksMTcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01P
REVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMyw5IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkxNSw2ICs5MjMsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBQdXRCeVZhbDoK
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OworICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAg
ICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBz
d2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsKQEAgLTkyNCwxMSArOTMzLDE4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
ICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzODMsOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1P
UlBISUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlM
ZW5ndGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmlu
Z2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRy
YWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0
LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBB
cnJheTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAg
ICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5
U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1
dCBtb2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBk
b24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1
ZXNzaW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5
OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1h
eVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZl
ID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6
CkBAIC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxl
KiBwCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Up
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJy
YXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgor
ICAgICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7
CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAh
cHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1
cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVu
ZGVjaWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwy
MiBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9m
Qm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSAmIElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChB
YnN0cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAg
ICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CkBAIC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9k
ZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091
dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1Rv
VGFpbCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAg
ICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRv
SG9sZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJh
eTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAg
ICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAi
QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAi
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsK
ICAgICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRp
Z3VvdXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMs
CisgICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
LAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAor
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3Rv
cmFnZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwK
QEAgLTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwg
aW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBC
bGFua1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2Us
CisgICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9y
YWdlLiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3Rv
cmFnZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAt
ODksNiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3Jh
Z2UiIGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3Rpbmcg
Y2hlY2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJv
dW5kczogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhf
Q09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9D
T05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGln
dW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNf
VE9fVEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29u
dGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9V
VF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMKICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVm
aW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCisjZGVmaW5lIElO
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZp
bmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRv
SG9sZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JB
R0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwogCiAv
LyBOZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIEVGRkVD
VEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJyYXk6OkJsYW5rVG9B
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgIFwK
KyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAg
ICAgXAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUwotI2RlZmlu
ZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAorI2RlZmluZSBTTE9X
X1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICBcCiAgICAgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfRUZGRUNURlVMX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBI
SUNfRUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhlbHBlcnMgZm9yIHBvbHltb3JwaGlj
IGFycmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9QT0xZTU9SUEhJ
Q19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19F
RkZFQ1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9M
WU1PUlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSos
IEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNl
c0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZs
eShBcnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUg
YXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQog
ewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFS
UkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4
ICsyNDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAg
IH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
KQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RB
SUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1P
UlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNh
c2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgbW9kZUlz
UG9seW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wg
cG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRl
c0FycmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNF
RChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0
cnVlOworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtMjA0LDYgKzMwNiw3IEBAIGlubGlu
ZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OSw3ICszNTIsMTEg
QEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzoKICAgICBj
YXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBt
b2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNl
IFBPTFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKQEAgLTI3Myw3
ICszODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBCiBpbmxp
bmUgYm9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9k
ZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTcxLDYgKzE1NzEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRv
R3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0xNTk0LDYgKzE1OTYsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5
TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDkgKzM1OSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBw
cm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZh
bC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgot
ICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rp
bmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxk
KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSAr
MTIxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAg
IGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0u
cHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNo
b3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFn
ZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4
KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBu
b2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVk
c1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwg
bm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9Ob2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5v
ZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEz
NywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNo
aWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIDMpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAg
ICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2Rl
IGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wg
KCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRl
eCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFn
ZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQobW9k
ZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihh
cnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAg
ICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUp
LCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlp
ZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAg
ICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2UgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0
ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2Ug
aXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCArNDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9y
YWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRn
ZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQogICAgIHsKICAgICAgICAgaWYgKG1f
Z3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9
PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2Rl
IGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAgICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4
ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUgKzQzMywyNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRl
eCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
ICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9m
aWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJh
eShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgp
KTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5v
ZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGlu
ZGV4LmluZGV4VW5jaGVja2VkKCkpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9n
cmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVk
Z2Uoc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQogICAgIH0KICAg
ICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJ
R1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgog
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xP
V19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01P
REVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4g
bm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3Rpbmcg
dmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgp
KTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBh
cnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTYwMSw2
ICs1OTcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAor
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgYXJyYXktPmJ1dHRl
cmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXktPmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgo
KSArIDEpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVj
KSk7Cit9CisgICAgICAgIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50
KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
QEAgLTEzMDksNiArMTMxNSwxNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
K2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Jmdsb2JhbERhdGEsIGV4ZWMpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsxMzMxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgpCit7CisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworCisgICAgaWYgKGluZGV4
KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihvYmplY3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91
YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3Qg
YikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgs
NyBAQCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0
ZSosIHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNm
WikoRXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0x
MTAsNiArMTEwLDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAog
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRl
Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBA
IC0xNDgsNiArMTQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
bwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNv
dmVyTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTE5
Miw3ICsxOTQsOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiBj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlT
dG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3Rh
dGUqLCBKU09iamVjdCopOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK2NoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgaW50MzJfdCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2Vw
dGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0
dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxw
ZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1
YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSB8IEhhc0NvbnRpZ3VvdXMpKSk7CiAgICAgICAgIAogICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwOSwx
MCArMjEwOSwxMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwog
ICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywg
R1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1
bHRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsK
K30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJy
YXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJS
ZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgCisgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSksIHJlc3VsdFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZyk7Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQ
UlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BS
UmVnIHRlbXBSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1v
ZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IAorICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJ
bkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAK
KyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJl
Zyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAg
ICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAKKyAgICBpZiAoaXNJbkJvdW5k
c0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYgbm9k
ZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcg
dmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9
IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2Rl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRp
bmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBp
ZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNv
dW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBK
SVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28g
dGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcuCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUp
KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVk
IHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKKyAgICAgICAgICAg
IC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2Ug
dGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2aW5n
IGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bnVt
VmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJy
YXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRV
cGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHBy
b3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5l
ZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5vdEhvbGVWYWx1ZS5s
aW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUg
YXJyYXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgCisgICAg
cmV0dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCisgICAgCiAgICAgc3dp
dGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgaW5pdENvbnN0YW50SW5m
byhtX2NvbXBpbGVJbmRleCk7CkBAIC0yNTk1LDYgKzI2OTYsNTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJl
c3VsdC5ncHIoKSkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNf
Q09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNf
TU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzR2V0
QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7
CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKQEAgLTI2MTUsNiArMjc2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNM
T1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjYyNywyMSArMjc3
NCw2NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAg
ICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHBy
b3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOworICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxM
X1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgCisg
ICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBo
b2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0Lmdw
cigpKTsKLQorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsK
KyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1
ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChm
YWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygm
bV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9
IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNv
bXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3Rv
cmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQo
ZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQp
OworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7CiAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJh
eUludCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZykpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3MzUsOCArMjkyNiw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19N
T0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjc1Niw1OSArMjk0Nyw3NiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAg
ICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcg
dmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAo
aXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3Vu
ZHMpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZTsg
aWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBpc0hvbGVWYWx1ZTsKLSAgICAgICAgICAgIGlmICghbWF5U3RvcmVUb0hv
bGUoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdW5jb3VudGFibGUg
YmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUgYmFzZWxpbmUgSklUCi0gICAg
ICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28g
dGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAotICAgICAgICAgICAgICAgIC8vIHByb2ZpbGluZy4K
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdl
IHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qg
d29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAg
aXNIb2xlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRo
ZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0
aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0g
dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUpOworCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAg
ICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZyk7
CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsK
KyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5v
UmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcg
PSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChIZWFw
Ojppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2
YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRj
aC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgY2hpbGQ0KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFz
KSB7CisgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAg
ICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub3RIb2xlVmFsdWUubGluaygmbV9q
aXQpOworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcg
PSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZSk7CisKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlS
ZWcpOworCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNl
KCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7
Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLQotICAgICAgICAgICAgaWYg
KCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRB
Y2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChp
c0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLApAQCAtMjgyMCw2ICszMDI4LDYzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFy
eVJlZyA9IHRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBvcmFyeVJlZyk7
CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAg
ICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcG9yYXJ5UmVnLCBTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcG9yYXJ5UmVnKTsKKyAgICAgICAgICAg
IGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgewor
ICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgdGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRp
Z3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1
b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
UmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb2x5
bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxs
VGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0
ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdl
KSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9yYWdl
UHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVn
LCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxs
VGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKworICAgICAgICAgICAg
YmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAgdmFs
dWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgZGVjaXNpb24gb2Ygd2hldGhl
ciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUgc2hvdWxkIGJlIG1hZGUKKyAgICAgICAgICAg
IC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSwgbm90IHRoZSBtYWNoaW5lIGNvZGUg
YmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwpAQCAtMjk3MywyNiArMzIzOCw1NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGls
ZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBz
d2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9m
Qm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0
Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgIAorICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICAvLyBSZWZ1c2UgdG8g
aGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwor
ICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwg
VHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsK
LSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVl
c0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAotICAgICAgICAg
ICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVu
Z3RoR1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOwogICAgICAg
ICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzAwMiw0MSAr
MzI5NSw3NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VM
ZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlTGVu
Z3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB1bmRlZmluZWRDYXNl
ID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICB2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgdmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksCisgICAgICAgICAgICAgICAgdmFsdWVHUFIp
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisKKyAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAg
ICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwgdmFsdWVHUFIsIGJh
c2VHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQ
UiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7Ci0gICAgICAgIHNl
dFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAg
ICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAg
ICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAg
IAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoTW92
ZSgKLSAgICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgICAgICB1bmRl
ZmluZWRDYXNlLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwog
ICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5
UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOwog
Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTMyMTAsOCArMzUzOSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5n
cHIoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
LCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgc2l6ZUdQUik7
Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdHJ1
Y3R1cmVHUFIgPSBzZWxlY3RTY3JhdGNoR1BSKHNpemVHUFIpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiaWdMZW5ndGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkp
OworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgYmlnTGVuZ3RoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVXaXRoQXJyYXlTdG9yYWdlKCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
LCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6ZUdQUik7CisgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2ICszMTUsNDEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsK
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzogewor
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
KyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CisgICAgICAgIAorICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBj
YW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJhbmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUg
bm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBkb2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxl
LCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdpdGggdGhlIHByZXNlbnQgdGVzdAorICAgICAg
ICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBhdGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkp
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CisgICAgICAgIAorICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2Fz
ZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTM1Miw2ICszODcsMjkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBQT0xZ
TU9SUEhJQ19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwg
dGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJuZWQgaW50byBhIHNp
bmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5jZQorICAgICAgICAv
LyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJIGZlZWwgY29tZm9y
dGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVyYWdlIGZvciB0aGlz
IGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoCisg
ICAgICAgICAgICAgICAgICAgIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFy
cmF5TW9kZSgpKSA/IEhhc0NvbnRpZ3VvdXMgOiAwKQorICAgICAgICAgICAgICAgICAgICB8IChw
b2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpID8gSGFzQXJy
YXlTdG9yYWdlIDogMCkpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKICAgICAg
ICAgYnJlYWs7CkBAIC0zOTAsNzIgKzQ0OCw5OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJh
eWlmeShOb2RlJiBub2RlCiAgICAgQVNTRVJUKCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgCiAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgCisgICAgSW5kZXhpbmdUeXBlIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNr
OwogICAgIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgRUZGRUNU
RlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAg
ICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwotICAgICAgICBHUFJS
ZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3Vv
dXM6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91czsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICAg
ICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNBcnJheVN0b3JhZ2U7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAg
ICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRB
cnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0g
SGFzQ29udGlndW91cyB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICBHUFJS
ZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRy
KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgbV9qaXQubG9hZFB0cigKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIAotICAgICAgICAvLyBXZSBjYW4gc2tp
cCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdlLgot
ICAgICAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPQotICAgICAgICAg
ICAgaXNTbG93UHV0QWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpID8gKEhhc0FycmF5U3RvcmFnZSB8
IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpIDogSGFzQXJyYXlTdG9yYWdlOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBl
TWFzaykpOworICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxy
ZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nh
c2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lmxv
YWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0
KTsKKyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICAvLyBOZXh0
IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nlc3Nl
cy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4KLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8p
KSk7CisgICAgLy8gTmV4dCBjaGVjayB0aGF0IHRoZSBvYmplY3QgZG9lcyBub3QgaW50ZXJjZXB0
IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0IGRvZXMsCisgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29u
J3Qgd29yay4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CiAgICAgICAg
IAotICAgICAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgot
ICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAvLyBOb3cgY2Fs
bCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgorICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKHRlbXBHUFIpOworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIGNh
c2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VSZWcpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OkJs
YW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkVuc3VyZUFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZyk7Ci0gICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnModGVtcEdQUik7Ci0KLSAgICAgICAgLy8gQWxhcywgd2UgbmVlZCB0byBy
ZWxvYWQgdGhlIHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZl
Ci0gICAgICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0
byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCi0gICAgICAgIC8vIGFib3V0IGEgbG9h
ZC4KLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIp
OwotICAgICAgICAKLSAgICAgICAgLy8gRmluYWxseSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBr
aW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQgdG8gZ2V0LgotICAgICAgICAvLyBO
b3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVjaywgd2hpY2ggd2ls
bCByZXN1bHQgaW4gdGhlIAotICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9u
ZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCi0gICAgICAgIC8v
IFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3QgdXNlci12aXNpYmxlLgot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNp
cmVkSW5kZXhpbmdUeXBlTWFzaykpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9q
aXQpOwotICAgICAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGln
dW91c09yQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7CisgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBDUkFTSCgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyh0ZW1wR1BSKTsKKworICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVsb2FkIHRo
ZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQorICAgIC8v
IHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0
aGVyIHdheSB3ZSdyZSB0YWxraW5nCisgICAgLy8gYWJvdXQgYSBsb2FkLgorICAgIG1faml0Lmxv
YWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAKKyAgICAvLyBGaW5h
bGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdl
IHdhbnRlZCB0byBnZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3Bl
Y3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwgcmVzdWx0IGluIHRoZSAKKyAgICAvLyBieXRlY29k
ZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJl
ZXhlY3V0ZWQuCisgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5v
dCB1c2VyLXZpc2libGUuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRl
eGluZ1R5cGVNYXNrKSkpOworICAgICAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBz
dG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQpAQCAtMzIwNSwxMiAr
MzI4OSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3Jp
cHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkg
ewotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgY2FzZSBB
UlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgCisgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBzdG9yYWdlKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKQEAgLTMzOTks
NiArMzQ5NCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAg
ICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxlSW5kZXgpOwogfQogCitHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9y
YXJ5JiB0ZW1wb3JhcnksIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBpZiAoIXB1dEJ5
VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkpCisgICAgICAgIHJldHVybiBJbnZh
bGlkR1BSUmVnOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZWFsVGVtcG9yYXJ5KHRoaXMpOwor
ICAgIHRlbXBvcmFyeS5hZG9wdChyZWFsVGVtcG9yYXJ5KTsKKyAgICByZXR1cm4gdGVtcG9yYXJ5
LmdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR1BSVGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJh
bmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAt
MTE2Niw2ICsxMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJh
dGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90
IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
b2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0
cihzaXplKSk7CkBAIC0xMjE4LDExICsxMjI0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNp
emVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1
c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNDY4LDYgKzE0NzksMTEgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihh
cmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSwgaW50MzJfdCBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdP
cGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90
IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
b2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTE1MzEsMTEgKzE1NDcsMTYgQEAgcHVibGlj
OgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdEkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRU
YWcpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3Bl
cmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNp
emVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1
c3RlZEltbVB0cihzaXplKSk7CkBAIC0yMTQ5LDYgKzIxNzAsNDIgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBp
bGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJh
c2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1
bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdl
R2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyAgICAKKyAgICBib29sIHB1dEJ5VmFs
V2lsbE5lZWRFeHRyYVJlZ2lzdGVyKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIC8vIEZvciBBcnJheVN0b3JhZ2UsIHdl
IG5lZWQgYW4gZXh0cmEgcmVnIGZvciBzdG9yZXMgdG8gaG9sZXMgZXhjZXB0IGlmCisgICAgICAg
IC8vIHdlJ3JlIGluIFNsb3dQdXQgbW9kZS4KKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RP
X0hPTEVfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEZvciBDb250
aWd1b3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3IgYW55IGFjY2VzcyB0aGF0IG1heSBzdG9y
ZQorICAgICAgICAvLyB0byB0aGUgdGFpbC4KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RB
SUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgor
ICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEFsbCBwb2x5bW9ycGhpYyBt
b2RlcyBuZWVkIGFuIGV4dHJhIHJlZy4KKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9E
RVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIEdQ
UlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYsIEFycmF5OjpN
b2RlKTsKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3Jh
cnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZW1wb3Jh
cnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1vZGUoKSk7CisgICAg
fQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFn
ZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJh
c2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1
ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIAogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2Rl
QXQoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0
MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOwogCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOworICAgIG1f
YnlWYWxJbnN0cnVjdGlvbkluZGV4ID0gMDsKICAgICBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXgg
PSAwOwogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogICAgIApAQCAtNzM4LDYgKzczOSwy
MCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgbV9jb2Rl
QmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3NDb21w
aWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkKICAgICAgICAgbV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHViSW5mbyhtX2NvZGVCbG9jay0+c3Ry
dWN0dXJlU3R1YkluZm8oaSksIHBhdGNoQnVmZmVyKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0TnVt
YmVyT2ZCeVZhbEluZm9zKG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkg
eworICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wID0gQ29kZUxvY2F0aW9uSnVt
cChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uYmFkVHlw
ZUp1bXApKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5kb25lVGFyZ2V0KTsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uc2xvd1BhdGhUYXJnZXQpOworICAgICAg
ICBDb2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
KG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0ucmV0dXJuQWRkcmVzcyk7CisgICAgICAgIAorICAg
ICAgICBtX2NvZGVCbG9jay0+YnlWYWxJbmZvKGkpID0gQnlWYWxJbmZvKAorICAgICAgICAgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4LAorICAgICAgICAgICAgYmFk
VHlwZUp1bXAsCisgICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmFycmF5TW9k
ZSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihiYWRUeXBlSnVtcCwgZG9u
ZVRhcmdldCksCisgICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIocmV0dXJuQWRk
cmVzcywgc2xvd1BhdGhUYXJnZXQpKTsKKyAgICB9CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJl
ck9mQ2FsbExpbmtJbmZvcyhtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUo
KSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNh
bGxMaW5rSW5mb3MoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29k
ZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2NCw2ICsyNjQsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgY29weVRvU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIGluZm8sIExpbmtCdWZmZXIgJnBh
dGNoQnVmZmVyKTsKICAgICB9OwogCisgICAgc3RydWN0IEJ5VmFsQ29tcGlsYXRpb25JbmZvIHsK
KyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oKSB7IH0KKyAgICAgICAgCisgICAgICAgIEJ5
VmFsQ29tcGlsYXRpb25JbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRl
eChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkK
KyAgICAgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAgICAgICAgICwgZG9uZVRh
cmdldChkb25lVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIGJhZFR5cGVKdW1wOworICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIHNsb3dQYXRoVGFyZ2V0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCByZXR1cm5BZGRyZXNzOworICAgIH07CisKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0
aEJlZ2luOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7CkBAIC0z
NDgsNiArMzY3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0Lm1fYnl0ZWNv
ZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2
YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0
cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyog
YnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5t
X2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJh
eU1vZGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZT4gY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogICAgICAgICB7
CkBAIC0zOTcsNiArNDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNp
emVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3Bl
cnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1
Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwg
Q2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
bihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5BZGRyZXNzUHRyLCBib29s
IGRpcmVjdCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwo
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJ
VEFycmF5TW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFt
cG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwpAQCAtNDUyLDYg
KzQ4OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNj
cmF0Y2gsIEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBS
ZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOwor
ICAgICAgICAKKyAgICAgICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2Zp
bGUqKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlz
IGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRleGluZyB0eXBlLgorICAgICAgICAvLyBQcm9w
ZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNr
ZWQuCisgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRo
ZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKKyAgICAgICAgLy8gY2FzZSBjb250YWlucyByZXN1
bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2ZpbGVkLgorICAgICAgICBKdW1wTGlz
dCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICAKKyAgICAgICAgLy8gUHJv
cGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVj
aW5nIHR5cGUuCisgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRl
ZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCisgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQu
IEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KKyAg
ICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KKyAgICAgICAgSnVtcExpc3QgZW1pdENv
bnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwor
ICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7
IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApAQCAtODcwLDYgKzkyMiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAgICAg
VmVjdG9yPExhYmVsPiBtX2xhYmVsczsKICAgICAgICAgVmVjdG9yPFByb3BlcnR5U3R1YkNvbXBp
bGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbzsKKyAgICAgICAgVmVj
dG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvOwogICAgICAg
ICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxDb21waWxhdGlvbklu
Zm8+IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJs
ZT4gbV9qbXBUYWJsZTsKQEAgLTg3OSw2ICs5MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICB1bnNpZ25lZCBt
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9ieVZh
bEluc3RydWN0aW9uSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZUluZm9J
bmRleDsKICAgICAgICAgdW5zaWduZWQgbV9jYWxsTGlua0luZm9JbmRleDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEy
OTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NDUsMjMgKzQ0NSwyMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJh
eSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNl
bGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRy
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IHN0
ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihpbml0aWFsTGVu
Z3RoKSk7CisgICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFT
RV9WRUNUT1JfTEVOKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCBpbml0aWFsTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CisKKyAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09m
QXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSB0aGUg
YmFja2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gCiAg
ICAgLy8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24uCiAgICAg
ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRlIHRoZSBjZWxsIGZvciB0
aGUgYXJyYXkuCi0gICAgbG9hZFB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJl
c3NPZkFycmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOwogICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNP
YmplY3Q8SlNBcnJheSwgZmFsc2U+KHNjcmF0Y2gsIGNlbGxSZXN1bHQsIHN0b3JhZ2VQdHIpOwog
Ci0gICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbyBpbiB0aGUgQXJyYXlTdG9yYWdl
LgotICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBB
ZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZz
ZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Moc3RvcmFn
ZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6
aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRy
ZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFwT2Zmc2V0KCkpKTsKKyAg
ICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBpbmRleGluZyBoZWFkZXIu
CisgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlh
bExlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3bHkgYWxsb2NhdGVkIEFycmF5U3Rv
cmFnZS4KICAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtNDcwLDEyICs0NjksMTIgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIs
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOworICAgICAgICBzdG9yZVB0cihzdG9y
YWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICogaSkpOwogI2Vsc2UKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIp
OwotICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICogaSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihS
ZWdpc3RlcikgKyBzaXplb2YodWludDMyX3QpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3Jl
MzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgc2l6ZW9mKHVp
bnQzMl90KSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgc2l6ZW9mKHVpbnQzMl90
KSkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNTU5LDEwICs1NTgsMjUgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRgogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
KQogewotICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAor
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCiAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigx
KSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKKyNlbmRpZgorfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5UHJvZmlsZSogcHJvZmls
ZSwgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQorICAgIHJldHVybiAhIShwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSAmIChhc0FycmF5
TW9kZXMoTm9uQXJyYXkgfCBjYXBhYmlsaXR5KSB8IGFzQXJyYXlNb2RlcyhBcnJheUNsYXNzIHwg
Y2FwYWJpbGl0eSkpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lu
bGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9m
aWxlKQoreworICAgIGlmIChhcnJheVByb2ZpbGVTYXcocHJvZmlsZSwgSGFzQXJyYXlTdG9yYWdl
KSkKKyAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAgICByZXR1cm4gSklUQ29udGln
dW91czsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjEsNyAr
MTY2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jX2V4cChJbnN0cnVjdGkKIHZvaWQg
SklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
IGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKSB7CisgICAgaWYgKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpCisgICAgICAgIHx8IENvcGll
ZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKSk7CkBAIC0xNjgwLDggKzE2ODEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19hcnJheShJbnN0cnVjdAogICAgIC8vIElmIHRoZSBhbGxvY2F0aW9uIHdvdWxkIGJlIG92
ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFrZSB0aGUgcHJvcGVyIHN0dWIgY2FsbCBhYm92ZSBp
biAKICAgICAvLyBlbWl0X29wX25ld19hcnJheS4KICAgICBpbnQgbGVuZ3RoID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUo
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxl
bmd0aCkpKSkKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FC
YWRUaW1lKCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKICAg
ICAgICAgcmV0dXJuOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gV2UncmUgaGF2aW5nIGEg
YmFkIHRpbWUuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGlu
IENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTm90
IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEy
OTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24KICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNl
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1l
ZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTExMSwxNyArMTEyLDY0IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVn
VDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5
U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgcHJv
ZmlsZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSkpOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIEpJVEFycmF5TW9kZSBtb2Rl
ID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFn
ZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBKdW1wIHJlc3VsdE9LID0gYnJhbmNoVGVzdFB0cihOb25aZXJv
LCByZWdUMCk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7Cisj
ZW5kaWYKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQo
QnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9u
ZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwor
fQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsK
KworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKKworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTE0NiwxNCArMTk0LDkwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3Ry
dWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCisgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7CiAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5j
YWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJn
ZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQogCit2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAo
YXJyYXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2Rl
QmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9u
TGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywg
Q29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5
VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAg
ICAoIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9p
bnQgJXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOwor
ICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0
cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsg
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250
aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7Cisg
ICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRp
b25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9u
ZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxp
bmUgcHV0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisg
ICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZh
bEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9w
dXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBvZmZzZXQs
IFJlZ2lzdGVySUQgc2NyYXRjaCwgRmluYWxPYmplY3RNb2RlIGZpbmFsT2JqZWN0TW9kZSkKIHsK
ICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwpAQCAtMjI2LDcgKzM1MCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMjM0LDEw
ICszNTgsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAg
IHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFz
QXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1Qz
LCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlN
b2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91
czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3Rv
cmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAg
ICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAg
IAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5
cGUsIG1vZGUsIGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCBy
ZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
YXJyYXlQcm9maWxlOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIo
WmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7
CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAg
TGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdU
MSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgb3V0T2ZC
b3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAgZW1pdEFy
cmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVnVDMsIEFk
ZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIGp1
bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRl
c3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCkBAIC0yNDcsOCArNDMzLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIEp1bXAgZW5kID0g
anVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmls
ZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgZW1pdEFy
cmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVj
dG9yT2Zmc2V0KCkpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMp
OwogCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CkBAIC0yNTcsOCArNDQzLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGp1bXAoKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7Ci0KLSAgICBl
bWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJ
bW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgCisgICAgcmV0
dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKQEAgLTI3MCwxMyArNDU2LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGlu
dDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJh
c2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkg
Y2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBjaGVjaworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcworICAgIAorICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRCeVZhbENhbGwodGhpcywg
Y3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocmVn
VDApOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsK
ICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0gICAgc3R1
YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5VmFsQ2FsbC5j
YWxsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1f
YnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
bmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjU2LDcgKzg0OCw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDIsIHJlZ1QxLCBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSXNBcnJheSkpOwotICAgIEp1bXAgZmFpbHVyZUNh
c2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3Rv
cmFnZSkpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMpKTsKIAogICAg
IC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0MTQsNiArMjQxNCwzMCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihF
bmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCitzdGF0aWMg
SlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
Cit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3Ry
aW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFs
dWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBpID0gc3Vic2Ny
aXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNT
dHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCByZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKKyAgICAgICAgICAgIHJl
dHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJhbWUsIGkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7CisgICAgfQor
CisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdl
dChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5w
cml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJz
Y3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJu
IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Cit9CisKIERFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsKQogewogICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTI0MjMsMzUgKzI0NDcsMzcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgCi0gICAgaWYgKExJS0VMWShiYXNlVmFs
dWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7Ci0gICAgICAgIGlmIChKU1Zh
bHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxG
cmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpIHsKLSAgICAgICAg
ICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0
LmlzSW50MzIoKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25E
RkdDb2RlKCk7CisgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgICAgIEJ5VmFs
SW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5
dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5l
KTsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAg
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoaW5kZXhp
bmdUeXBlKSkgeworICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5
TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAgICAgICAgaWYgKGFycmF5
TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgIEpJVDo6Y29tcGls
ZUdldEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2RlKTsKICAgICAgICAg
fQogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwg
YmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9Cisg
ICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9n
ZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAg
IGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBpID0gc3Vic2Ny
aXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNT
dHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKLSAgICAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZy
YW1lLCBpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Ci0gICAgfQotCi0gICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKSB7Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihz
dWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAg
fQorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAKLSAg
ICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxG
cmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVl
LmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VO
RCgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7
CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogICAgIApAQCAt
MjUwMiwyMyArMjUyOCwxNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCi1ERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQorc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLQotICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBK
U1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7Ci0KICAgICBpZiAoTElL
RUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2Ny
aXB0LmFzVUludDMyKCk7CiAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCi0gICAgICAgICAgICAgICAg
b2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
aSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgfSBlbHNlCkBAIC0y
NTI4LDExICsyNTQ1LDU0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92
YWwKICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2Uq
PihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpLCB2YWx1ZSwgc2xvdCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlw
dC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICAgICAgaWYgKCFz
dGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2Jq
ZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKCFjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBp
ZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAg
ICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKICAg
ICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5
X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKKworICAgIGlmIChiYXNlVmFsdWUu
aXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIEF0dGVtcHQg
dG8gb3B0aW1pemUuCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1l
LT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAgQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAgQVNTRVJU
KCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG9i
amVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAgICBpZiAoaXNPcHRpbWl6
YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7
CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpCisgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBhcnJheU1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1dEJ5VmFsKGNhbGxG
cmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKKworICAgIENIRUNLX0ZPUl9FWENF
UFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9i
eV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBw
dXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAKICAgICBD
SEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJu
ICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxm
X2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpT
VmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVC
IGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3Rp
X29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00
NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0
X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFs
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIg
Y3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRF
Uk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
dXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
ICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEyOTY5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBfbGxpbnRfb3BfZ2V0X2Fy
cmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBh
cnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJh
eUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVu
Z3RoU2xvdworICAgIGJ0aXogdDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwg
SGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRp
cyA4W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZHAgNjRbUEIsIFBDLCA4XSwgdDIKICAgICBsb2Fk
cCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAtMTE0NywxNCArMTE0NywyNSBAQCBf
bGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MwogICAgIGFy
cmF5UHJvZmlsZSh0MiwgdDMsIHQxKQogICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwotICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4aTJwIHQx
LCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYnRpeiB0
MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCisKKyAgICBiaWFlcSB0
MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0
aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCisgICAg
bG9hZHAgW3QzLCB0MSwgOF0sIHQyCisgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CisgICAg
am1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRp
eiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSwgLm9wR2V0QnlW
YWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQ
QiwgUEMsIDhdLCB0MAogICAgIGxvYWRwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4
XSwgdDIKICAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKworLm9wR2V0QnlWYWxEb25lOgog
ICAgIHN0b3JlcCB0MiwgW2NmciwgdDAsIDhdCiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4XSwgdDAK
ICAgICB2YWx1ZVByb2ZpbGUodDIsIHQwKQpAQCAtMTIyNiwyOSArMTIzNyw1MSBAQCBfbGxpbnRf
b3BfcHV0X2J5X3ZhbDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAg
ICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQwKQot
ICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9hZGlz
IDE2W1BCLCBQQywgOF0sIHQwCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0
MiwgLm9wUHV0QnlWYWxTbG93KQotICAgIHN4aTJwIHQyLCB0MgorICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGVJbnQzMih0MCwgdDMsIC5vcFB1dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0MywgdDMK
ICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQyLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0
MiwgOF0sIC5vcFB1dEJ5VmFsRW1wdHkKLS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9h
ZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MywgdDEp
CisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisg
ICAgCisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kcwor
Lm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywg
OF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCisgICAgd3JpdGVCYXJy
aWVyKHQxKQorICAgIHN0b3JlcCB0MSwgW3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQorCisu
b3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1
dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BST0ZJTEVSCisgICAgICAgIGxvYWRwIDMyW1BCLCBQ
QywgOF0sIHQyCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hv
bGVbdDJdCisgICAgZW5kCisgICAgYWRkaSAxLCB0MywgdDIKKyAgICBzdG9yZWkgdDIsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCisg
ICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90
Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xv
dworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYnRweiBBcnJheVN0b3Jh
Z2U6Om1fdmVjdG9yW3QwLCB0MywgOF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5v
cFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywg
OF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCiAgICAgd3JpdGVCYXJy
aWVyKHQxKQotICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhd
CisgICAgc3RvcmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0KICAgICBk
aXNwYXRjaCg1KQogCi0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VF
bXB0eToKICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9m
aWxlOjptX21heVN0b3JlVG9Ib2xlW3QzXQorICAgICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0
MQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QxXQog
ICAgIGVuZAogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3Qw
XQotICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjpt
X3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEsIHQy
LCB0MQorICAgIGJpYiB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
OjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQK
KyAgICBhZGRpIDEsIHQzLCB0MQogICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlW
YWxTdG9yZVJlc3VsdAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0
CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9w
dXRfYnlfdmFsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw4ICs2Myw5IEBAIGVuZAogCiAjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0
dGVyZmxpZXMuCiBjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQ29udGlndW91cyA9IDIKIGNv
bnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKLWNvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorY29uc3Qg
SGFzU2xvd1B1dEFycmF5U3RvcmFnZSA9IDE2CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBT
dHJpbmdUeXBlID0gNQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlD
b252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGkKIAogaW5s
aW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IG51bVZhbHVlcykKIHsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworICAgIHJl
dHVybiBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CiB9CiAKIGlu
bGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5
Q2FwYWNpdHkgKyAxKTsKICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBtZXRob2QgaXMgaGVyZSBu
b3QganVzdCBiZWNhdXNlIGl0J3MgaGFuZHksIGJ1dCB0byByZW1pbmQgeW91IHRoYXQKKyAgICAv
LyB0aGUgd2hvbGUgcG9pbnQgb2YgYnV0dGVyZmxpZXMgaXMgdG8gZG8gZXZpbCBwb2ludGVyIGFy
aXRobWV0aWMuCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbVBvaW50ZXIoY2hhciogcHRyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4ocHRyKTsK
KyAgICB9CisgICAgCisgICAgY2hhciogcG9pbnRlcigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHRoaXMpOyB9CisgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklu
ZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdI
ZWFkZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSB7
IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRl
cjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQpAQCAtNzAsOSArNzksMjEgQEAgcHVibGljOgog
ICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgUHJvcGVydHlTdG9yYWdlIHByb3Bl
cnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgp
OyB9CiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyBy
ZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICB1
aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wdWJsaWNM
ZW5ndGgoKTsgfQorICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWlu
dDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3RoKHZhbHVlKTsg
fQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4aW5nSGVh
ZGVyKCktPnNldFZlY3Rvckxlbmd0aCh2YWx1ZSk7IH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VCo+KHRoaXMpOyB9CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjb250aWd1b3VzKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmll
cjxVbmtub3duPiA+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQ29udGln
dW91cyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihjb250aWd1b3VzKTsKKyAgICB9CiAg
ICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0
dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CiAg
ICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKIAogaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVy
T2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgIEFTU0VSVChudW1iZXJPZlNsb3RzIDw9IGluZGV4aW5nSGVhZGVy
KCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IEl0IHdv
dWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFzIGEgbG9vcCBzaW5jZSAoMSkg
d2Uga25vdyBpbiB3aGljaApAQCAtMTYzLDcgKzE2Myw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6dW5zaGlmdChTdHIKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OwogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgogICAgIG1l
bW1vdmUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI5NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxNyBAQCBpbmxpbmUgc2l6ZV90IEluZGV4
aW5nSGVhZGVyOjpwcmVDYXBhY2l0CiAKIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlm
IChMSUtFTFkoIWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpCisg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHZlY3Rvckxlbmd0aCgpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIH0KIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IGNoYXIqIGluZGV4aW5nVHlwZVRvU3RyaW5nKEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUpCit7CisgICAgc3RhdGljIGNoYXIgcmVzdWx0WzEyOF07CisgICAgY29uc3QgY2hh
ciogYmFzaWNOYW1lOworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlICYgQWxsQXJyYXlUeXBlcykg
eworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheSI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAg
YmFzaWNOYW1lID0gIk5vbkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5
Q2xhc3M6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheUNsYXNzIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBiYXNpY05hbWUgPSAiQXJy
YXlXaXRoQ29udGlndW91cyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgor
ICAgICAgICBiYXNpY05hbWUgPSAiQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJhc2ljTmFtZSA9ICJVbmtub3duISI7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzbnByaW50ZigKKyAgICAgICAgcmVz
dWx0LCBzaXplb2YocmVzdWx0KSwgIiVzJXMiLCBiYXNpY05hbWUsCisgICAgICAgIChpbmRleGlu
Z1R5cGUgJiBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycykgPyAifE1heUhhdmVJbmRleGVkQWNjZXNz
b3JzIiA6ICIiKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdU
eXBlLmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOSArMzIsMjEgQEAgdHlwZWRl
ZiB1aW50OF90IEluZGV4aW5nVHlwZTsKIAogLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNl
bmNlIG9mIGNhcGFiaWxpdGllcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSXNBcnJheSAg
ICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzQ29udGln
dW91cyAgICAgICAgICAgID0gMjsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzQXJyYXlT
dG9yYWdlICAgICAgICAgID0gODsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZSAgID0gMTY7CiAKIC8vIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5n
IHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUgdXN1YWxseQogLy8gbWFza2VkIG9m
ZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4KLXN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgSGFkQXJyYXlTdG9yYWdlICAgICAgICAgID0gMzI7IC8vIE1lYW5zIHRoYXQgdGhpcyBv
YmplY3QgZGlkIGhhdmUgYXJyYXkgc3RvcmFnZSBpbiB0aGUgcGFzdC4KLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMgID0gNjQ7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICA9IDMyOwogCiAvLyBMaXN0IG9m
IGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFy
cmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBOb25BcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgID0gSGFzQ29udGlndW91czsKIHN0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgICAgICA9IEhh
c0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZSA9IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEFycmF5Q2xhc3MgICAgICAgICAgICAgICAgICAgICAgPSBJc0FycmF5OyAv
LyBJJ2Qgd2FudCB0byBjYWxsIHRoaXMgIkFycmF5IiBidXQgdGhpcyB3b3VsZCBsZWFkIHRvIGRp
c2FzdHJvdXMgbmFtZXNwYWNlIHBvbGx1dGlvbi4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
QXJyYXlXaXRoQ29udGlndW91cyAgICAgICAgICAgICA9IElzQXJyYXkgfCBIYXNDb250aWd1b3Vz
Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAg
ICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkgfCBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlOwogCkBAIC01Miw2ICs1NCwxMCBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEFycmF5V2l0aFNsb3dQCiAgICAgTm9uQXJyYXk6ICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgY2FzZSBBcnJheUNsYXNzCiAKKyNkZWZpbmUgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVMgXAorICAgIE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICBcCisgICAgY2FzZSBB
cnJheVdpdGhDb250aWd1b3VzCisKICNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTIFwKICAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKQEAgLTc2LDYg
KzgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihJbmQKICAgICBy
ZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXModHlwZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9v
bCBoYXNDb250aWd1b3VzKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAgcmV0dXJu
ICEhKGluZGV4aW5nVHlwZSAmIEhhc0NvbnRpZ3VvdXMpOworfQorCiBzdGF0aWMgaW5saW5lIGJv
b2wgaGFzQXJyYXlTdG9yYWdlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiB7CiAgICAgcmV0
dXJuICEhKGluZGV4aW5nVHlwZSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSk7CkBAIC04Niw2ICs5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRVc2VT
bG93UHV0KEluZGUKICAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzU2xvd1B1dEFycmF5
U3RvcmFnZSk7CiB9CiAKK2NvbnN0IGNoYXIqIGluZGV4aW5nVHlwZVRvU3RyaW5nKEluZGV4aW5n
VHlwZSk7CisKIC8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzLgogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzICAgICAgICAgICAgPSAzMTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzEsOSArMzMxLDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShK
U0dsbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBz
cGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KQEAgLTM5Niwx
MiArMzk1LDY5IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6
CisgICAgICAgIGlmICghbmV3TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgeworICAgICAgICAg
ICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhl
YywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICBjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICB9Cisg
ICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3TGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
Q29udGlndW91czoKKyAgICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNQVhfQVJSQVlfSU5ERVggLy8g
VGhpcyBjYXNlIGVuc3VyZXMgdGhhdCB3ZSBjYW4gZG8gZmFzdCBwdXNoLgorICAgICAgICAgICAg
fHwgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYCisgICAgICAgICAgICAgICAg
JiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobmV3TGVuZ3RoLCBjb3VudEVsZW1lbnRzSW5Db250
aWd1b3VzKG1fYnV0dGVyZmx5KSkpKSB7CisgICAgICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0
aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhj
ZXB0aW9uLAorICAgICAgICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld0xlbmd0aCA+
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgZW5zdXJlQ29udGln
dW91c0xlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCisgICAgICAgICAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgobmV3TGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwgYXJyYXlTdG9yYWdlKCkpOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlD
bGFzczoKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aC0tKQor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICBBU1NF
UlQobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICAg
ICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xl
bmd0aF0uY2xlYXIoKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
bGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAKQEAgLTQyNSwyNiArNDgxLDI4IEBAIEpTVmFs
dWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbWVudDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIExldCBlbGVt
ZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCi0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChl
eGVjLCBpbmRleCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAg
ICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHku
Iik7Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRz
ICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KLSAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4
LCB0cnVlKTsKLSAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQuCi0gICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGdldEFycmF5
TGVuZ3RoKCk7CisgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICBK
U1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgLy8gQ2FsbCB0aGUg
W1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0
cnVlLgorICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkg
eworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0
eS4iKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIC8vIENhbGwg
dGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIs
IGluZHgsIGFuZCB0cnVlLgorICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7CisgICAg
Ly8gUmV0dXJuIGVsZW1lbnQuCisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBw
dXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMu
CkBAIC00NTgsNiArNTE2LDI2IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmEKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtX2J1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVY
KSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxl
bmd0aCwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGln
dW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZTogewogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgaWYg
KGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1
ZSwgdHJ1ZSkpIHsKQEAgLTU5Miw2ICs2NzAsNDYgQEAgc3RhdGljIGludCBjb21wYXJlQnlTdHJp
bmdQYWlyRm9yUVNvcnQoYwogICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKHZhLT5zZWNvbmQs
IHZiLT5zZWNvbmQpOwogfQogCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgor
dm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpY1ZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
Y29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxE
YXRhKQoreworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQ29udGlndW91cyB8
fCBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgdW5zaWduZWQgbmV3UmVsZXZh
bnRMZW5ndGg7CisgICAgY29tcGFjdEZvclNvcnRpbmc8aW5kZXhpbmdUeXBlPigKKyAgICAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAgICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQs
CisgICAgICAgIG5ld1JlbGV2YW50TGVuZ3RoKTsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGRhdGEgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpOworICAgIAorICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlICYmIGFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGFsbFZhbHVl
c0FyZU51bWJlcnMgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3UmVsZXZh
bnRMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWRhdGFbaV0uaXNOdW1iZXIoKSkgeworICAg
ICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQor
ICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSk7CisgICAgCisgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFz
dCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQorICAgIC8vIGFsc28gZG9uJ3Qg
cmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNp
YmxlCisgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwg
cHJpbWl0aXZlIHZhbHVlcy4KKyAgICBxc29ydChkYXRhLCBuZXdSZWxldmFudExlbmd0aCwgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAg
IHJldHVybjsKK30KKwogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERh
dGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CkBA
IC02MDAsNDEgKzcxOCw5OCBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSog
ZXhlCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEo
KSk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHNvcnROdW1l
cmljVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYg
KHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgc29ydE51bWVyaWNWZWN0b3I8QXJyYXlX
aXRoQXJyYXlTdG9yYWdlPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGlmICghbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCBy
ZWxldmFudExlbmd0aCkKK3sKKyAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworCisgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNh
biBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQg
b24gdGhhdC4KKyAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIg
ZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdl
IHRlbXBvcmFyeQorICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9t
IGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRo
YXQgcmV0dXJuCisgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBl
ZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCiAgICAgICAg
IAotICAgICAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1i
ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMocmVsZXZhbnRMZW5ndGgp
OworICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CiAgICAgICAgIAotICAgICAg
ICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCi0gICAgICAgICAgICByZXR1cm4gc29ydChleGVj
LCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgYm9vbCBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVs
ZXZhbnRMZW5ndGg7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYmVnaW5baV0uZ2V0
KCk7CisgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7CisgICAgICAgIHZhbHVl
c1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNh
bGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9T
dHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAgICAKLSAgICAgICAgLy8gRm9y
IG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4g
bWVyZ2Vzb3J0LiBXZQotICAgICAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mg
c3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQotICAgICAgICAvLyBzaWRl
LWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVz
LgotICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgdmFsdWVzW2ldLnNlY29u
ZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKICAgICAgICAgCisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEhlYXA6OmhlYXAodGhpcykt
PnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKKyAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFz
dCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBP
KE4pIHJhdGhlcgorICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAgICAgCisjaWYgSEFWRShN
RVJHRVNPUlQpCisgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKKyAgICAgICAgcXNv
cnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIp
LCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgIGVsc2UKKyAgICAgICAgbWVyZ2Vz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbHNlCisgICAgLy8gRklYTUU6IFRo
ZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29y
dC4KKyAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQs
IGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIHFz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbmRpZgorICAgIAorICAgIC8vIElm
IHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9y
IHZlY3RvciBzdG9yYWdlLAorICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRo
ZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKSB7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBlbnN1cmVDb250
aWd1b3VzTGVuZ3RoKGdsb2JhbERhdGEsIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBpZiAo
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpIHsKKyAgICAg
ICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVsZXZhbnRM
ZW5ndGgpOworICAgICAgICAgICAgYmVnaW4gPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8IHJlbGV2YW50
TGVuZ3RoKQorICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChyZWxldmFudExl
bmd0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJlZ2luW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAgIEhlYXA6
OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogfQogCiB2b2lkIEpTQXJy
YXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQpAQCAtNjQ1LDc4ICs4MjAsMzAgQEAgdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWdu
ZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0
aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQsIG5ld1JlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAg
IHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oCisgICAgICAgICAgICBl
eGVjLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICB1
bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAgIHVuc2lnbmVkIG5l
d1JlbGV2YW50TGVuZ3RoOworICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxBcnJheVdpdGhBcnJh
eVN0b3JhZ2U+KAorICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQsIG5ld1JlbGV2YW50TGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoc3Rv
cmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgICAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRv
IHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQg
c29ydCBiYXNlZCBvbiB0aGF0LgotICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGlt
cHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCBy
ZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRo
aXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20g
dG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3
aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9u
IGluY29uc2lzdGVudC4KLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+
IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgICAgICBpZiAoIXZhbHVl
cy5iZWdpbigpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEhlYXA6Omhl
YXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAgICAgCi0gICAgICAg
IGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIHZhbHVlc1tp
XS5maXJzdCA9IHZhbHVlOwotICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0g
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGlu
dWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAg
ICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgCi0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
OyBpKyspCi0gICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRv
V1RGU3RyaW5nSW5saW5lKGV4ZWMpOwotICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZl
Y3RvcigmdmFsdWVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3Qg
YWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhO
KSByYXRoZXIKLSAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgotICAgICAgICAKLSNpZiBIQVZF
KE1FUkdFU09SVCkKLSAgICAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAg
ICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSNlbHNl
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkg
dG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCi0gICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMg
bm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJm
b3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMu
c2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFT
b3J0KTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0
aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCi0g
ICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJl
ciBvZiBhY3R1YWwgdmFsdWVzLgotICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkg
PCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsKLSAgICAgICAgICAgIGluY3JlYXNlVmVj
dG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KTsKLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKLSAg
ICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOwotICAgICAgICAKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250
aWd1b3VzPigKKyAgICAgICAgICAgIGV4ZWMsIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAg
LTgwMiw3NSArOTI5LDcyIEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFy
ZSAKICAgICBzdGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAweDdGRkZGRkZGOyB9CiB9Owog
Ci12b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5j
dGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3RlbXBs
YXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnRWZWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5k
ZXhpbmdNb2RlKCkpOworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKTsKICAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewotICAgIGNhc2UgQXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJl
IGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhj
ZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCiAg
ICAgICAgIAotICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGlu
IC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCi0gICAgICAgIC8vIGlm
IGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxlbmd0
aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSk7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRo
ZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgLy8gaWYgYSBsYXJnZXIgYXJy
YXkgaXMgcGFzc2VkLgorICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsK
KyAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
Pmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIG5v
ZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9y
YWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKKyAgICB1bnNpZ25lZCBub2Rl
Q291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsgKGhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUp
ICYmIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCA/IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcC0+c2l6ZSgpIDogMCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIW5vZGVDb3VudCkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW5vZGVDb3VudCkKKyAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFy
ZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcwotICAgICAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOwotICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKLSAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKLSAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7Ci0gICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOworICAgIEFWTFRyZWU8QVZMVHJl
ZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91
Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOwor
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9u
OworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7Cisg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOworICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZUpTKQorICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBh
ZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVG
dW5jdGlvbiksIDIpKTsKICAgICAgICAgCi0gICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlcy5iZWdpbigpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoIXRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9y
LCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKLSAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20g
dW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9y
LCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRl
ciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgogICAgICAgICAKLSAgICAg
ICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5l
ZCA9IDA7CisgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgdW5zaWduZWQgbnVtVW5k
ZWZpbmVkID0gMDsKICAgICAgICAgCi0gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXks
IGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGlu
c2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgotICAgICAgICBmb3IgKDsgbnVt
RGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICAgICAg
SlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAg
ICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9
IHY7Ci0gICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgfQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKLSAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNb
bnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgICAgICB0cmVlLmluc2VydChu
dW1EZWZpbmVkKTsKLSAgICAgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5n
IHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVy
IG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8
aW5kZXhpbmdUeXBlPigpW251bURlZmluZWRdLmdldCgpOworICAgICAgICBpZiAoIXYgfHwgdi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICB0cmVlLmluc2VydChu
dW1EZWZpbmVkKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0Rh
dGE8aW5kZXhpbmdUeXBlPigpW2ldLmdldCgpOworICAgICAgICBpZiAodikgeworICAgICAgICAg
ICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0
KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG5ld1VzZWRW
ZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgIHVuc2lnbmVkIG5l
d1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwogICAgICAgICAK
KyAgICBpZiAoaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAg
ICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKICAgICAgICAgICAgIGlmIChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKQEAgLTg3OSw3
ICsxMDAzLDcgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAg
ICAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5k
KCk7CkBAIC04OTEsMzMgKzEwMTUsNDkgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYQogICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5k
ZXhNYXAoKTsKICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVCh0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgICAgIC8vIG1vZGlm
eWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgotICAgICAgICAKLSAgICAgICAgLy8gQ29weSB0
aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCi0gICAgICAgIEFWTFRyZWU8QVZMVHJlZUFi
c3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKLSAgICAgICAgaXRl
ci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1EZWZpbmVkOyArK2kpIHsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1
ZSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8v
IFB1dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICBBU1NFUlQodHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7CiAgICAgICAgIAotICAgICAg
ICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBv
dXQuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5j
bGVhcigpOworICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRo
ZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCisgICAgLy8gbW9k
aWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCiAgICAgICAgIAotICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKKyAgICAvLyBDb3B5
IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KKyAgICBBVkxUcmVlPEFWTFRyZWVBYnN0
cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgaXRlci5zdGFy
dF9pdGVyX2xlYXN0KHRyZWUpOworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsg
KytpKSB7CisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAg
ICAgICAgKytpdGVyOworICAgIH0KKyAgICAgICAgCisgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1
ZXMgYmFjayBpbi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigp
W2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQg
dmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAg
ICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5jbGVhcigpOworICAgIAorICAgIGlm
IChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlKCkt
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworfQorCit2b2lkIEpT
QXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2Fs
bFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBBU1NFUlQo
IWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm47
CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgc29ydFZl
Y3RvcjxBcnJheVdpdGhDb250aWd1b3VzPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICBzb3J0VmVjdG9yPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oZXhlYywg
Y29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTkyNiwxMDMgKzEwNjYsMTIyIEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmEKIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMs
IE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAg
IHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsK
KyAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNh
c2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICAgICAgdW5zaWdu
ZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IHZlY3Rv
ckVuZDsgKytpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0
b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgZm9yICg7IGkgPCBzdG9yYWdlLT5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgYXJncy5h
cHBlbmQoZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBz
dG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0
aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIENSQVNIKCk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kp
IHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAg
ICBpZiAoIXYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXJncy5hcHBlbmQodi5nZXQo
KSk7CisgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3RoKCk7ICsraSkKKyAgICAgICAg
YXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1
bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVu
Z3RoKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yOworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICAKICAgICBBU1NFUlQobGVuZ3Ro
ID09IHRoaXMtPmxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yID0gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
QVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAg
dW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0g
c3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5n
dGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9y
W2ldOwotICAgICAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWlu
KGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsg
KytpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAg
ICAgICAgaWYgKCF2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhbGxGcmFtZS0+c2V0
QXJndW1lbnQoaSwgdi5nZXQoKSk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsK
IH0KIAotdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNB
cnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKQogewogICAgIEFTU0VS
VCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9PSBz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6Ci0gICAgICAgIHJldHVybiAw
OwotCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIG15UmVsZXZhbnRMZW5ndGgg
PSByZWxldmFudExlbmd0aDxpbmRleGluZ1R5cGU+KCk7CisgICAgCisgICAgbnVtRGVmaW5lZCA9
IDA7CisgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKICAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAw
OworICAgIGZvciAoOyBudW1EZWZpbmVkIDwgbXlSZWxldmFudExlbmd0aDsgKytudW1EZWZpbmVk
KSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVt
RGVmaW5lZF0uZ2V0KCk7CisgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKDsgbnVtRGVmaW5l
ZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICAgICAgSlNWYWx1
ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgICAgICBp
ZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmlu
ZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Ci0gICAgICAg
ICAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG15UmVsZXZhbnRM
ZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdU
eXBlPigpW2ldLmdldCgpOworICAgICAgICBpZiAodikgeworICAgICAgICAgICAgaWYgKHYuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251bURl
ZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgfQorICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVk
ICsgbnVtVW5kZWZpbmVkOwotICAgICAgICAKKyAgICBuZXdSZWxldmFudExlbmd0aCA9IG51bURl
ZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRl
eGluZ1R5cGUpKSB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOwogICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9z
cGFyc2VNYXAuZ2V0KCkpIHsKLSAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFw
LT5zaXplKCk7Ci0gICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBuZXdSZWxldmFudExlbmd0aCArPSBtYXAt
PnNpemUoKTsKKyAgICAgICAgICAgIGlmIChuZXdSZWxldmFudExlbmd0aCA+IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3Nz
aWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVu
dHJpZXMgLSBpZiBub3QsCiAgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBi
eSBjYWxsZXIuCi0gICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICBpZiAoKG5ld1JlbGV2YW50TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1JlbGV2
YW50TGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICBudW1EZWZpbmVkID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgICAgICAgICAgfQpAQCAtMTAzMywyMiArMTE5MiwxNSBAQCB1bnNpZ25lZCBKU0FycmF5
Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlYWxs
b2NhdGVTcGFyc2VJbmRleE1hcCgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotICAg
ICAgICAKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0
b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9CiAg
ICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci19CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5l
ZDsgaSA8IG5ld1JlbGV2YW50TGVuZ3RoOyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRl
eGluZ1R5cGU+KClbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3
UmVsZXZhbnRMZW5ndGg7IGkgPCBteVJlbGV2YW50TGVuZ3RoOyArK2kpCisgICAgICAgIGluZGV4
aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uY2xlYXIoKTsKIAorICAgIGlmIChoYXNBcnJheVN0
b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBuZXdSZWxldmFudExlbmd0aDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjk2
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDEzICs5OSwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCisgICAg
ICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgc29y
dE51bWVyaWNWZWN0b3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxU
eXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpOworICAgICAgICAKKyAgICAg
ICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0
Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSosIFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4s
IHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgc29ydFZlY3RvcihFeGVjU3Rh
dGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJik7
CisKKyAgICAgICAgYm9vbCBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgQXJyYXlTdG9yYWdlKik7CiAg
ICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7
CiAKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCBib29s
LCB1bnNpZ25lZCk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGlu
ZyhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZT4KKyAgICAgICAgdm9pZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmLCB1bnNp
Z25lZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKTsKICAgICB9Owog
CisgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAg
SW5kZXhpbmdIZWFkZXIgaGVhZGVyOworICAgICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHN0
ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKSk7CisgICAgICAgIGhlYWRlci5zZXRQdWJs
aWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlKAorICAg
ICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgaGVhZGVyLCBoZWFkZXIudmVjdG9yTGVu
Z3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisKICAgICBpbmxpbmUgQnV0
dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewogICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlKApAQCAtMTIxLDcgKzE0MSwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkK
ICAgICB7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJy
YXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUNvbnRp
Z3VvdXNBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpbml0aWFsTGVuZ3RoIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSA9PSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCisgICAgICAgICAgICAgICAgICAgfHwg
KGluaXRpYWxMZW5ndGggJiYgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhB
cnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICB9CiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0
YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAg
ICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGFy
cmF5OwpAQCAtMTMzLDE1ICsxNjEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICh2
ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIAotICAgICAgICB2b2lkKiB0ZW1wOwotICAgICAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOwotICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5n
dGgpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwotICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7Ci0gICAgICAgIHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseTsKKyAg
ICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENv
bnRpZ3VvdXMpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAg
ICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksICZ0ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICBi
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAgICAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICAgICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7CiAgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw4IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2NhbGxiYWNr
T2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tP
YmplY3Q8SlNOb25GaW5hbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX2FycmF5UHJvdG90
eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYywgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fYXJyYXlTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1b3VzKSk7
CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAg
ICAgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9h
cnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOwogICAg
IG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCkBAIC00MDcsNiArNDA4LDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGFsbCBKU0FycmF5IGFsbG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBwcm9wcmlhdGUg
c3RydWN0dXJlIGZyb20KICAgICAvLyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0cnVjdHVyZSB0
aGF0IHVzZXMgU2xvd1B1dC4KICAgICBtX2FycmF5U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CisgICAgbV9hcnJheVN0cnVj
dHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1
cmVGb3JTbG93UHV0LmdldCgpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2Jq
ZWN0cyB0aGF0IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xvdyBraW5kIG9m
CiAgICAgLy8gaW5kZXhlZCBzdG9yYWdlLgpAQCAtNDgyLDYgKzQ4NCw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9uYW1lU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2FyZ3VtZW50c1N0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fYXJyYXlTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0KTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9ib29sZWFuT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2
aXNpb24gMTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25hbWVTY29wZVN0cnVjdHVyZTsK
ICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcmd1bWVudHNTdHJ1Y3R1cmU7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmU7IC8vIFRoaXMg
Z2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBkZWNp
ZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2Fy
cmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFk
IHRpbWUuCiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVG
b3JTbG93UHV0OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Jvb2xlYW5PYmpl
Y3RTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tD
b25zdHJ1Y3RvclN0cnVjdHVyZTsKQEAgLTI2MSw3ICsyNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgU3RydWN0dXJlKiBuYW1lU2NvcGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X25hbWVTY29wZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFyZ3VtZW50
c1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzU3RydWN0dXJlLmdldCgpOyB9
CiAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Fy
cmF5U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmVX
aXRoQXJyYXlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJh
eVN0b3JhZ2UuZ2V0KCk7IH0KICAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUo
KSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiBhZGRyZXNzT2ZB
cnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVy
ZVdpdGhBcnJheVN0b3JhZ2U7IH0KICAgICAgICAgU3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9
CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAg
ICBTdHJ1Y3R1cmUqIGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAgLTQ2Niw3ICs0NjksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0
aWFsTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxE
YXRhKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA/IGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgOiBnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOwogICAgIH0KIAogICAgIGlubGluZSBKU0Fy
cmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCA9IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCArMTMxLDQwIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBh
cHByb3ByaWF0ZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjdXJyZW50VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
dXJyZW50U291cmNlOworICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAg
ICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsK
LSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgewot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAg
ICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCk7IC8vIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuIFdoeSBpc24ndCB0aGlzIHB1Ymxp
Y0xlbmd0aCgpPwogICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CkBAIC0xNTgsNiAr
MTc0LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAg
ICAKICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMo
YnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwKQpAQCAtMjM0LDYgKzI1MywyMCBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJm
bHk7CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAg
ICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpAQCAtMzUxLDYg
KzM4NCwxNiBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChw
cm9wZXJ0eU5hbWUgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgaWYgKHByb3Bl
cnR5TmFtZSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgYnV0dGVy
Zmx5LT5zZXRQdWJsaWNMZW5ndGgocHJvcGVydHlOYW1lICsgMSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTQ0Myw2
ICs0ODYsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogdm9p
ZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIE5PVEU6
IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQsIGFzIGl0IHdpbGwgcGVyZm9ybSB0d28gY29u
dmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCisgICAgICAgIC8vIHRoaXMgY2FzZSBpZiB3ZSBl
dmVyIGNhcmVkLgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlT
dG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjUsNiArNTEzLDI0IEBAIHZv
aWQgSlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWMKICAgICBnbG9iYWxPYmplY3Qo
KS0+aGF2ZUFCYWRUaW1lKGdsb2JhbERhdGEpOwogfQogCitXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lO
REVYKTsKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhv
bGRUeXBlKSk7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmco
KSk7CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAg
ICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rv
ckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAg
ICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4g
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cit9CisKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBl
ID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOwpAQCAtNDgwLDcgKzU0Niw3IEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNl
TWFwLmNsZWFyKCk7CiAgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICBy
ZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBz
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkpOworICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFu
c2l0aW9uKCkpOwogICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5l
d1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ5MCwxNiArNTU2LDk2IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKICAgICByZXR1cm4gY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7CiB9CiAKK0Fy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiwg
dW5zaWduZWQgbmVlZGVkTGVuZ3RoKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0
aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNh
cGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQg
cHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAKKyAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAgICAgICAg
bmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAg
bV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBw
cm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBBcnJheVN0
b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5l
d1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChuZWVkZWRMZW5ndGgpOworICAgIG5ld1N0b3JhZ2Ut
PnNldExlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNs
ZWFyKCk7CisgICAgbmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld1N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IHB1YmxpY0xl
bmd0aDsgaS0tOykgeworICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLmdldCgpOworICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsK
KyAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgIH0KKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVy
biBuZXdTdG9yYWdlOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPnN1
Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Cit9CisKK1dyaXRlQmFycmllcjxVbmtu
b3duPiogSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBpZiAoVU5MSUtFTFkoaW5k
ZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGlu
ZygpKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlh
bENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMCk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
QVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgICAgICBBU1NFUlQoIXN0cnVj
dHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIAogICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdT
aG91bGRCZVNwYXJzZSgpKSkKICAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgICAg
IHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogICAgICAgICAK
ICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0
OjplbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorewor
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUoKS0+
bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKS0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChVTkxJ
S0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGVuc3Vy
ZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxE
YXRhKS0+YnV0dGVyZmx5KCk7CisgICAgICAgIHJldHVybiBCdXR0ZXJmbHk6OmZyb21Db250aWd1
b3VzKGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApKTsKKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIH0KQEAgLTUwNyw2ICs2NTMsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6ZW5zdXJlQXJyYXlTdG9yYQogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgd2F5IG1vcmUgZWZmaWNpZW50LCBpZiB3ZSBjYXJlZC4K
KyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKICAgICAgICAgCkBAIC01MjYsNiArNjc2LDExIEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKIHZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwpAQCAtNTY5LDggKzcy
NCw3IEBAIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2JhbERhdGEKICAgICBpZiAo
c2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24oZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0
b3JhZ2UpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAg
IHN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKIH0KIAogYm9vbCBKU09i
amVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTcwNCw2ICs4NTgsMTQgQEAgYm9vbCBKU09iamVjdDo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtODc3LDYgKzEwMzksMTcgQEAgdm9pZCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVj
dC0+bV9idXR0ZXJmbHk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5ndGggPSBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTEyNjYsNiArMTQzOSw0MCBAQCBib29s
IEpTT2JqZWN0OjphdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluCiAgICAgcmV0dXJuIGFzT2JqZWN0
KHByb3RvdHlwZVZhbHVlKS0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclBy
b3RvdHlwZShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCit2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRy
aWJ1dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAg
ICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgCisgICAgLy8gRm9yIHVz
IHRvIGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGlj
IGxlbmd0aCwgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBs
ZW5ndGguCisgICAgQVNTRVJUKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisK
KyAgICBpZiAoaSArIDEgPj0gTUFYX0FSUkFZX0lOREVYCisgICAgICAgIHx8IChpID49IE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVgKKyAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9y
KGksIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMobV9idXR0ZXJmbHkpKSkpIHsKKyAgICAgICAg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZUFycmF5
U3RvcmFnZSk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhp
cywgaSwgdmFsdWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2ln
bmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKAorICAgICAgICB0aW1lc1RocmVlUGx1c09u
ZURpdmlkZWRCeVR3byhpICsgMSksCisgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
OworICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAg
ICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHRydWUsCisgICAgICAgIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSksCisgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOworICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVu
Z3RoKTsKKyAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAg
IG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgIEFTU0VSVChpIDwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisKIHZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlKQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKQEAgLTEzNDgsMTcgKzE1NTUsMjkgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3RvckxlbgogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYg
KGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkgewotICAgICAgICAgICAgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93
LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
Z2xvYmFsRGF0YSkpOworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRo
cm93LAorICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAg
ICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAg
ICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3Rv
cmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB7Ci0gICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUo
KS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgeworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0
b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIGkgKyAx
KVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgICAgIAotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkp
OwotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFsdWUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4NCw4ICsxNjAzLDEwIEBA
IHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFB1dERpcmVjdEluZGV4TW9kZSBtb2RlLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCisgICAgCiAg
ICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2Yg
dGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGFycmF5U3RvcmFnZSgpID09IHN0b3Jh
Z2UpOwogICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIHx8IGF0dHJpYnV0
ZXMpOwogICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAKQEAgLTE0NjcsMTQgKzE2
ODgsMzIgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgIAog
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFy
c2UoKSB8fCBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRl
cywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKGdsb2JhbERhdGEpKTsKLSAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9y
KGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhl
YywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxE
YXRhLCAwLCAwKSk7Ci0gICAgICAgIAotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBj
cmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgw
LCAwLCBpICsgMSkpOwotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdmFsdWUpOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
MTsKKyAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKSB7
CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlLAorICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgeworICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAg
ICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RydWN0dXJl
KCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVj
dG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIGkg
KyAxKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpIHsK
KyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAg
ICAgICB9CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0
aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTE0OTksMTIgKzE3MzgsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2Jq
ZWN0OjpnZXROZXdWCiAgICAgZWxzZSBpZiAoIWN1cnJlbnRWZWN0b3JMZW5ndGgpCiAgICAgICAg
IGluY3JlYXNlZExlbmd0aCA9IHN0ZDo6bWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUp
OwogICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgot
ICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOwot
ICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQp
Y2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9u
ZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJl
ZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKKyAg
ICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oZGVz
aXJlZExlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNp
cmVkTGVuZ3RoKTsKQEAgLTE1MjQsOSArMTc1OCwxMCBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVk
IEpTT2JqZWN0OjpnZXROZXdWCiAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDA7CiAgICAgICAgIGxl
bmd0aCA9IDA7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5s
ZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xNTM1LDYgKzE3
NzAsMTYgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIHJl
dHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5n
dGgpOwogfQogCit1bnNpZ25lZCBKU09iamVjdDo6Y291bnRFbGVtZW50c0luQ29udGlndW91cyhC
dXR0ZXJmbHkqIGJ1dHRlcmZseSkKK3sKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXMgPSAwOworICAg
IGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLTspIHsKKyAg
ICAgICAgaWYgKGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldKQorICAgICAgICAgICAgbnVtVmFs
dWVzKys7CisgICAgfQorICAgIHJldHVybiBudW1WYWx1ZXM7Cit9CisKIGJvb2wgSlNPYmplY3Q6
OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
bmV3TGVuZ3RoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBh
biBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3Zl
IGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCkBAIC0xNTQzLDYgKzE3ODgsMTAgQEAg
Ym9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAg
ICAKKyAgICBpZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKKyAgICAgICAg
JiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobmV3TGVuZ3RoLCBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgaW5kZXhC
aWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CkBAIC0xNTc0LDYgKzE4MjMsMjMgQEAgYm9vbCBKU09i
amVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbAogICAgIHJldHVybiB0cnVlOwogfQogCit2
b2lkIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlf
SU5ERVgpOworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkpOworICAgIAorICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5n
dGgpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQo
CisgICAgICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICAgICAgbGVuZ3RoICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgobGVuZ3RoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSA8IGxlbmd0aCkKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5n
dGgpOworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsK
ICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTYwMiw2ICsxODY4LDE3IEBAIGJv
b2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjk2OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsOCArMTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKQEAgLTE2MSw4ICsxNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjA3LDYgKzIwOSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKICAgICAgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVl
IGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMjY3LDkgKzI3MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFM
TF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCkBAIC0yODUsOCArMjkyLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpIDwg
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yOTYsMTUgKzMwNCwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID49IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzEsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEFT
U0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwpAQCAtMzMxLDYgKzM1Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CkBAIC01MjgsNiArNTUxLDE2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBmb28tPmF0dGVtcHRUb0ludGVyY2VwdFB1
dEJ5SW5kZXhPbkhvbGUoLi4uKTsKICAgICAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRC
eUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAg
ICAKKyAgICAgICAgLy8gUmV0dXJucyAwIGlmIGNvbnRpZ3VvdXMgc3RvcmFnZSBjYW5ub3QgYmUg
Y3JlYXRlZCAtIGVpdGhlciBiZWNhdXNlCisgICAgICAgIC8vIGluZGV4aW5nIHNob3VsZCBiZSBz
cGFyc2Ugb3IgYmVjYXVzZSB3ZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKExJS0VMWShoYXNDb250aWd1b3VzKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5z
dXJlQ29udGlndW91c1Nsb3coZ2xvYmFsRGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBh
cnJheSBzdG9yYWdlLiBVc2UKICAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVy
Zm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKICAgICAgICAgLy8gb2Jq
ZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBo
YXZlIGl0CkBAIC01NDAsNiArNTczLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIEJ1dHRlcmZseSogZW5zdXJlSW5kZXhlZFN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0lu
ZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuIGVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAg
ICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKQEAgLTYw
MiwxMSArNjQzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEFycmF5U3RvcmFnZSog
Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJy
YXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0
aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAgICAgICBBcnJheVN0
b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CiAg
ICAgICAgIAogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAg
ICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCisgICAg
ICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0
cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwogICAg
ICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dywgQXJyYXlTdG9yYWdlKik7CiAKICAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwpAQCAtNjE3LDYgKzY2Myw0NiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vz
c29ycyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50
ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYg
eW91IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRvIHN1Y2NlZWQgYW5kIHlvdSdyZSBzdXJlIHRoYXQK
KyAgICAgICAgLy8gdGhlIGFycmF5IGlzIGNvbnRpZ3VvdXMuCisgICAgICAgIHZvaWQgZW5zdXJl
Q29udGlndW91c0xlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgY291bnRFbGVtZW50c0luQ29udGlndW91cyhCdXR0ZXJmbHkq
IGJ1dHRlcmZseSk7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlPgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGluZGV4aW5nRGF0YSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4K
KyAgICAgICAgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
aW4oCisgICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVu
Z3RoKCksCisgICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNjUxLDcgKzczNyw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250aWd1b3VzU2xvdyhKU0ds
b2JhbERhdGEmKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93
KEpTR2xvYmFsRGF0YSYpOworICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdl
U2xvdyhKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBC
dXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAg
dm9pZCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoRXhlYwogCiBjaGFyKiBKU1ZhbHVl
OjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0g
MTI4OworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsKICAgICBzdGF0aWMgY2hh
ciBkZXNjcmlwdGlvbltzaXplXTsKIAogICAgIGlmICghKnRoaXMpCkBAIC0yMTMsOSArMjEzLDEy
IEBAIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKICAgICAgICAgdS5hc0RvdWJs
ZSA9IGFzRG91YmxlKCk7CiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91
YmxlOiAlMDh4OiUwOHgsICVsZiIsIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0s
IGFzRG91YmxlKCkpOwogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChpc0NlbGwoKSkKLSAgICAgICAg
c25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJDZWxsOiAlcCIsIGFzQ2VsbCgpKTsKLSAgICBl
bHNlIGlmIChpc1RydWUoKSkKKyAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKSB7CisgICAgICAgIHNu
cHJpbnRmKAorICAgICAgICAgICAgZGVzY3JpcHRpb24sIHNpemUsICJDZWxsOiAlcCAoJXA6ICVz
LCAlcykiLAorICAgICAgICAgICAgYXNDZWxsKCksIGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLAorICAgICAgICAgICAg
aW5kZXhpbmdUeXBlVG9TdHJpbmcoYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCkpKTsKKyAgICB9IGVsc2UgaWYgKGlzVHJ1ZSgpKQogICAgICAgICBz
bnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIlRydWUiKTsKICAgICBlbHNlIGlmIChpc0ZhbHNl
KCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRmFsc2UiKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MTI5NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIzLDExICszMjMsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9i
amVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0
cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0
dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJbmRl
eGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGlmIChhbnlPYmplY3RJ
bkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlz
SGF2aW5nQUJhZFRpbWUoKSkKKyAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2Vw
dEluZGV4ZWRBY2Nlc3NlcygpCisgICAgICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FC
YWRUaW1lKCk7Cit9CisKK05vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdAoreworICAgIGlmIChuZWVkc1Nsb3dQdXRJ
bmRleGluZygpKQogICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwog
ICAgIAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjk2OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTUyLDcgKzE1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBh
bnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CiAgICAg
ICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhpbmdUcmFu
c2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25z
dDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRy
YW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAg
ICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRo
aXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMjk2
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBzdGF0aWMgY29uc3QgdW5z
aWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQg
dG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KIC8vIElm
IGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hv
dWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVDb250
aWd1b3VzLAogICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlLAogICAgIEFsbG9jYXRlU2xvd1B1dEFy
cmF5U3RvcmFnZSwKICAgICBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC01NywxMiAr
NTgsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eQogaW5saW5l
IEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewogICAgIHN3aXRjaCAodHJhbnNpdGlvbikg
eworICAgIGNhc2UgQWxsb2NhdGVDb250aWd1b3VzOgorICAgICAgICBBU1NFUlQoIShvbGRUeXBl
ICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKSk7CisgICAgICAg
IHJldHVybiBvbGRUeXBlIHwgSGFzQ29udGlndW91czsKICAgICBjYXNlIEFsbG9jYXRlQXJyYXlT
dG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAg
ICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzQXJyYXlTdG9yYWdlOwog
ICAgIGNhc2UgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xk
VHlwZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAm
IH5IYXNDb250aWd1b3VzKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBTd2l0
Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVChvbGRUeXBlICYgSGFzQXJy
YXlTdG9yYWdlKTsKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIEhhc0NvbnRpZ3VvdXMpKTsK
ICAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0
dXJuIG9sZFR5cGUgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFz
LmgJKHJldmlzaW9uIDEyOTY5MikKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgYm9vbCBoYXNUd29PCiAgICAgcmV0dXJuICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZp
ZGVkQnlUd28oVCB2YWx1ZSkKK3sKKyAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRv
OgorICAgIC8vICAgKHZhbHVlICogMyArIDEpIC8gMjsKKyAgICAvLyBvcjoKKyAgICAvLyAgICh1
bnNpZ25lZCljZWlsKHZhbHVlICogMS41KSk7CisgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9u
ZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkg
KyAodmFsdWUgJiAxKTsKK30KKwogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZD
VCkgJiYgIU9TKFNPTEFSSVMpCiB1c2luZyBzdGQ6OmlzZmluaXRlOwogI2lmICFDT01QSUxFUl9R
VUlSSyhHQ0MxMV9HTE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167234</attachid>
            <date>2012-10-04 19:46:40 -0700</date>
            <delta_ts>2012-10-04 21:56:07 -0700</delta_ts>
            <desc>it works on 64-bit, starting to make it work on 32-bit</desc>
            <filename>holycontiguous_5.patch</filename>
            <type>text/plain</type>
            <size>261607</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0xMC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTEwLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQXJy
YXkuc3BsaWNlIHNob3VsZCBiZSBmYXN0IHdoZW4gaXQgaXMgdXNlZCB0byByZW1vdmUgZWxlbWVu
dHMgb3RoZXIgdGhhbiB0aGUgdmVyeSBmaXJzdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2
ICs3Niw3IEBACiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENE
NEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRDNDE1RjZCNkJCMDAz
MkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNl
QXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBM
TEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxM0Uw
NEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENv
bW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTYwMTVEMTU2
MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVBMTU2MTk4
QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsK
IAkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2
NSw2ICsxNjYsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0Mz
REIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8q
IERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi87IH07
CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VF
MDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTg0OCw2ICs4NTAsNyBAQAogCQkwRjBD
RDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VB
cnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkM0NTgx
NEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5kZXhpbmdUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENv
bW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25T
bG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUExNTYxOThC
RjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAv
KiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC05MzgsNiArOTQxLDcgQEAKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1w
bGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRo
ID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdE
IC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMDgsNyArMjExMiw2
IEBACiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNw
cCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUu
aCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNr
LmNwcCAqLywKLQkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxi
YWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmggKi8sCiAJCQkJQkMwMkU5QjgwRTE4NDU0NTAwMEY5Mjk3IC8qIEdldHRlclNldHRl
ci5jcHAgKi8sCiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThBIC8qIEdldHRlclNldHRlci5o
ICovLApAQCAtMjExNiw2ICsyMTE5LDcgQEAKIAkJCQk5MzNBMzQ5QTAzOEFFN0M2MDA4NjM1Q0Ug
LyogSWRlbnRpZmllci5oICovLAogCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oICovLAogCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcg
LyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRp
YWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJ
bml0aWFsaXplVGhyZWFkaW5nLmggKi8sCkBAIC0yMjc0LDYgKzIyNzgsNyBAQAogCQkJCTE0QkZD
RTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywKIAkJCQkxNDIwQkU3QTEwQUE2
RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkx
MTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKKwkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDgwLDYgKzI0ODUsNyBAQAogCQkJCTBG
NjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLAogCQkJCTBGNjM5
NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLywKIAkJCQkwRjIxQzI3RTE0
QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovLAorCQkJCTBGODAyM0U5
MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKIAkJCQkwRjBCODNBRTE0QkNGNzE0
MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJCQkwRjBCODNBRjE0QkNGNzE0MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2
IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTI5NTksNiArMjk2NSw3IEBACiAJCQkJMEZC
N0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1By
b3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3Bl
Y2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTM1NjUsNiArMzU3Miw3IEBA
CiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERFNyAvKiBJbmRleGlu
Z1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8q
IFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikKKyAgICAgICAgdm9pZCBhcHBl
bmQoY29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2p1bXBz
LmFwcGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1fanVtcHMuc2l6ZSgpKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5
LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAo
KSk7CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVz
dWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRy
dXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFu
Y2hUZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1
bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisj
ZGVmaW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGlu
Z1R5cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsK
KworaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBq
aXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sK
KyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJS
QVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklU
QXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJl
dHVybiBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAg
QnlWYWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUs
IGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1Bh
dGgpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJh
ZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisg
ICAgICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwg
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlv
bkp1bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFy
cmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93
UGF0aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworaW5s
aW5lIHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZvKQor
eworICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAog
I2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNp
bmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgpAQCAtMjA5LDYgKzIx
MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCByZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFs
SW5mbyYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRC
eVZhbEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9z
LnNpemUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJ
bmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAg
ICAgICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJl
U3R1YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJl
U3R1YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9
CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9z
Lmdyb3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0
IHsgcmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZh
bEluZm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAg
ICAgICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5z
dHJ1Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJ
bmZvPiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9i
eVZhbEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVz
b2x2ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7
CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZv
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
YW1wbGluZ1Rvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1OSwxMiArODU5LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CiAg
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQ
T0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
QEAgLTkwOCw2ICs5MTMsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC05MTUsNiArOTIzLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgRWRnZSBjaGlsZDEgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJy
YXlNb2RlKCkpKSB7CkBAIC05MjQsMTEgKzkzMywxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Cisg
ICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgogICAgICAgICBjYXNlIElOX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9f
SE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTM2Nyw3ICsxMzgzLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOiAvLyBUaGVzZSBvbmx5
IGdldCBhIENoZWNrQXJyYXkgZm9yIEdldEFycmF5TGVuZ3RoCiAgICAgICAgICAgICAvLyBUaGlz
IGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2Fu
dCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1
bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTQxMCw5ICsxNDI4LDEwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAgY2Fz
ZSBBcnJheWlmeTogewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICAg
ICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGNs
b2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksOCArMzksMTQgQEAgQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFy
cmF5UHJvZmlsZSogcAogICAgICAgICByZXR1cm4gQXJyYXk6OlVucHJvZmlsZWQ7CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpX
cml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBkb24n
dCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSwgb3Igbm90LiBUaGlzIGlzIGEg
ZGVjZW50IGd1ZXNzLgorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91
c09yQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRvIGdvIHRv
IHNsb3cgcHV0IG1vZGUgb3Igbm90LiBXZSdyZSBndWVzc2luZyB0aGF0IHdlIGRvbid0IG5lZWQg
c2xvdyBwdXQuCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOworICAgIGNhc2UgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNh
ZmUgPyBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6Q29udGlndW91c1RvVGFpbCA6IEFycmF5OjpDb250aWd1b3VzKTsKKyAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJu
IG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChwcm9m
aWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwg
OiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk6
CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CiAgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkFycmF5U3RvcmFn
ZVRvSG9sZSA6IEFycmF5OjpBcnJheVN0b3JhZ2UpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgpAQCAtNTYsNiArNjIsMjAgQEAgQXJyYXk6
Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAgIGNhc2UgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3Jh
Z2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAg
aWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91
czsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIGlmIChhY3Rpb24g
PT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMo
KSkKKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3Rv
cmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6
CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKICAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtU
b0FycmF5U3RvcmFnZTsKQEAgLTE0NCw2ICsxNjQsMjIgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNr
ZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0
dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKICAgICAgICAgCisgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOgor
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1
b3VzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SGFzQ29udGlndW91cykKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKwogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6
CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CkBAIC0xNzAsNyArMjA2
LDggQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgICAgICAg
ICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGlu
Z1R5cGUoKSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkKICAg
ICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+
aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCi0gICAgY2FzZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgor
ICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgpAQCAtMjI1LDYgKzI2MiwyNCBAQCBjb25z
dCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9y
Y2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5n
IjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3Vv
dXMiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAi
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1
b3VzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOworICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMi
OworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAg
ICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOworICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAg
ICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIjsKICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsK
ICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6CkBAIC0yNDksMTAgKzMwNCwyMCBA
QCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVy
biAiUG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgogICAgICAgICByZXR1
cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2Ug
QXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkJsYW5rVG9Db250aWd1
b3VzIjsKICAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1
cm4gIkJsYW5rVG9BcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0
QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdl
IjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAg
ICAgICByZXR1cm4gIkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJDb250aWd1
b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzT3JBcnJh
eVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91
c09yQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJl
dHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDEzMDMxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDYgKzU0LDE1IEBAIGVudW0gTW9kZSB7CiAgICAgU3RyaW5nLAogICAgIAogICAgIC8v
IE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlz
IG5vbiBzaWRlLWVmZmVjdGluZy4KKyAgICBDb250aWd1b3VzLAorICAgIENvbnRpZ3VvdXNUb1Rh
aWwsCisgICAgQ29udGlndW91c091dE9mQm91bmRzLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXMs
CisgICAgQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzLAorICAgIFBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcywKICAgICBBcnJheVN0b3JhZ2UsCiAgICAgQXJyYXlTdG9yYWdlVG9I
b2xlLAogICAgIFNsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC02OCw4ICs3NywxNiBAQCBlbnVtIE1v
ZGUgewogICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCiAgICAg
CiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQgc3RvcmFnZSB3aGVyZSB0aGUg
Y2hlY2sgaXMgc2lkZS1lZmZlY3RpbmcuCisgICAgQmxhbmtUb0NvbnRpZ3VvdXMsCiAgICAgQmxh
bmtUb0FycmF5U3RvcmFnZSwKICAgICBCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZSwKKyAgICBC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIAorICAgIC8vIE1vZGVzIHRoYXQg
aW5kaWNhdGUgcG9seW1vcnBoaWMgYXJyYXkgc3RvcmFnZS4gVGhlc2UgZG9uJ3QgYmVuZWZpdCBm
cm9tCisgICAgLy8gYW55IGNoZWNraW5nIG9yIHN0b3JhZ2UgQ1NFLgorICAgIENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisg
ICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCiAgICAgCiAgICAg
QXJndW1lbnRzLAogICAgIEludDhBcnJheSwKQEAgLTg5LDYgKzEwNiwzMiBAQCBlbnVtIE1vZGUg
ewogLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0aGVtLgogCiAvLyBGaXJzdDog
aGVscGVycyBmb3Igbm9uLXNpZGUtZWZmZWN0aW5nIGNoZWNrcy4KKyNkZWZpbmUgTk9OX0FSUkFZ
X0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpD
b250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
OiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
VG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9V
U19NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOiAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91cworI2RlZmluZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
VG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c1RvVGFpbAorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9E
RVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCiAjZGVmaW5lIE5PTl9BUlJBWV9BUlJB
WV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBBcnJheTo6QXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMDYs
MzMgKzE0OSw0OCBAQCBlbnVtIE1vZGUgewogI2RlZmluZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RF
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFSUkFZX1dJVEhf
QVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCiAjZGVmaW5lIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBBcnJheTo6QXJyYXlTdG9yYWdlVG9I
b2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKLSNkZWZpbmUgSU5fQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFSUkFZX1NUT1JB
R0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCiAjZGVmaW5lIFNM
T1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBB
cnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
CiAjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgIFwKLSAgICBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAg
ICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKIAogLy8gTmV4dDogaGVscGVycyBmb3Igc2lkZS1l
ZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVMgXAotICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAg
ICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzCisjZGVmaW5lIEVGRkVDVEZV
TF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgIFwKKyAgICBBcnJheTo6
QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNh
c2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKICAgICBFRkZFQ1RGVUxfTk9OX0FS
UkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUgU0xPV19QVVRfRUZGRUNURlVMX0FSUkFZ
X1NUT1JBR0VfTU9ERVMgIFwKKyNkZWZpbmUgU0xPV19QVVRfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVMgICAgICAgICAgICAgXAogICAgIEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3Rv
cmFnZQorI2RlZmluZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UKKyNk
ZWZpbmUgQUxMX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX0VGRkVDVEZVTF9NT0RFUworCisvLyBG
aW5hbGx5OiBoZWxwZXJzIGZvciBwb2x5bW9ycGhpYyBhcnJheSBhY2Nlc3Nlcy4KKyNkZWZpbmUg
UE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOiAgICAg
ICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5
U3RvcmFnZQorI2RlZmluZSBBTExfUE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgUE9MWU1PUlBISUNfRUZGRUNURlVMX01PREVTOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTCiAKIEFycmF5OjpN
b2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VT
YWZlKTsKIApAQCAtMTQ1LDggKzIwMywxMCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJy
YXk6Ok1vZGUpOwogaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBTExfQ09OVElH
VU9VU19NT0RFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTYsNyArMjE2LDkg
QEAgaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZAogaW5saW5lIGJvb2wg
bW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzoKICAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2Niw2ICsyMjgsOSBAQCBpbmxpbmUg
Ym9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFyCiBpbmxpbmUgYm9vbCBpc0luQm91bmRz
QWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkg
eworICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBDT05USUdV
T1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6
CiAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTE4NCwxOCArMjQ5LDU1IEBAIGlubGluZSBib29sIGlz
U2xvd1B1dEFjY2VzcyhBcnJheTo6TW9kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIG1heVN0
b3JlVG9UYWlsKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgeworICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgIGNhc2UgT1VUX09G
X0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdV
T1VTX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CiBpbmxpbmUgYm9vbCBtYXlTdG9yZVRvSG9sZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9N
T0RFUzoKICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2lubGluZSBib29sIG1vZGVJc1BvbHltb3JwaGljKEFycmF5OjpNb2RlIG1v
ZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9E
RVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiB9CiAKK2lubGluZSBib29sIHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1
b3VzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGFycmF5TW9k
ZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2lubGluZSBib29sIHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2UoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQoreworICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9y
cGhpYyhhcnJheU1vZGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogaW5saW5lIGJvb2wgY2Fu
Q1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKQEAgLTIwNCw2ICszMDYsNyBAQCBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5
OjpNb2RlIGFyCiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQ
SElDX01PREVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yNDksNyArMzUyLDExIEBAIGlubGluZSBib29sIG1vZGVTdXBwb3J0
c0xlbmd0aChBcnJheTo6TW8KICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2Ug
QXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgIGNhc2UgTk9O
X0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6
Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTksNyArMzY2LDggQEAgaW5saW5l
IGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogaW5saW5lIGJvb2wgYmVuZWZpdHNG
cm9tU3RydWN0dXJlQ2hlY2soQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICBj
YXNlIEFycmF5OjpVbmRlY2lkZWQ6CiAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6CkBAIC0yNzMsNyArMzgxLDcgQEAgaW5saW5lIGJvb2wgYmVu
ZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQQogaW5saW5lIGJvb2wgaXNFZmZlY3RmdWwoQXJyYXk6
Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3NCw2ICsxNTc0LDggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFy
cmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgx
KSkpOwpAQCAtMTU5Nyw2ICsxNTk5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hv
bGU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVBvcCA9IGFk
ZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTMwMzE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1OSw5ICszNTksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGZvciBh
IHN0cnVjdHVyZSBjaGFuZ2Ugb3IgYSBwdXQgdG8gcHJvcGVydHkgc3RvcmFnZSB0byBhZmZlY3QK
ICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0QnlWYWwuCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEFycmF5UHVzaDoKLSAgICAgICAgICAgICAgICAvLyBBIHB1c2gg
Y2Fubm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGluIHRoZSBhcnJheS4K
LSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CkBAIC0xMjIyLDkgKzEyMTksNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFB1dEJ5VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgICAgICBpZiAoaXNBY3Rpb25hYmxlTXV0YWJsZUFy
cmF5U3BlY3VsYXRpb24obV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAg
ICAgICAmJiBtX2dyYXBoW2NoaWxkMl0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAg
ICAgICAgICAgJiYgIW1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkg
eworICAgICAgICAgICAgaWYgKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKICAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZ2V0QnlWYWxMb2FkRWxpbWluYXRp
b24oY2hpbGQxLmluZGV4KCksIGNoaWxkMi5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJh
eU1vZGUoYXJyYXlNb2RlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IHN0
b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0
ci0+Y2hpbGQxKCkuaW5kZXgoKSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlUHRyLT5zaG91bGRH
ZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShh
cnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCks
IE5vTm9kZSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIApAQCAtMTM3LDE3ICsxMzcsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwg
Mik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5UHVzaDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJh
dGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAg
ICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMSk7CisgICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIDEpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKQEAgLTMy
Nyw3ICszMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxk
MV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMl0ucHJl
ZGljdGlvbigpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRp
b24oY2hpbGQxLCAzKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBj
aGlsZDIsIDMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAgICAgICAgCkBAIC0zNzUsMTQgKzM3NSwxNiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICAKLSAgICBO
b2RlSW5kZXggY2hlY2tBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9k
ZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKKyAgICBOb2Rl
SW5kZXggY2hlY2tBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hl
Y2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0
cnVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1vZGVJc1NwZWNpZmljKGFycmF5TW9kZSkpOwog
ICAgICAgICAKICAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwogCiAgICAgICAgIGlmIChpc0Vm
ZmVjdGZ1bChhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICBOb2RlIGFycmF5aWZ5KEFycmF5aWZ5
LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICAgICAgQVNT
RVJUKGluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihpbmRleCk7Cisg
ICAgICAgICAgICBOb2RlIGFycmF5aWZ5KEFycmF5aWZ5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJy
YXlNb2RlKSwgYXJyYXksIGluZGV4KTsKICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBP
bmNlIGJlY2F1c2UgaXQncyB1c2VkIGFzIGEgYnV0dGVyZmx5LgogICAgICAgICAgICAgYXJyYXlp
ZnkucmVmKCk7IC8vIEFuZCB0d2ljZSBiZWNhdXNlIGl0J3MgbXVzdC1nZW5lcmF0ZS4KICAgICAg
ICAgICAgIE5vZGVJbmRleCBhcnJheWlmeUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MTUs
MTQgKzQxNywxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gYWRkTm9kZShOb2RlKEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJh
eSksIHNob3VsZEdlbmVyYXRlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBibGVzc0FycmF5T3Bl
cmF0aW9uKEVkZ2UgYmFzZSwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQorICAgIHZvaWQgYmxl
c3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIHVuc2lnbmVkIHN0b3JhZ2VD
aGlsZElkeCkKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJl
Zm9yZUZpeHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAg
IE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgIAotICAg
ICAgICBpZiAobm9kZVB0ci0+YXJyYXlNb2RlKCkgPT0gQXJyYXk6OkZvcmNlRXhpdCkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDogewogICAgICAgICAgICAgTm9kZSBmb3JjZUV4aXQoRm9yY2VPU1JFeGl0LCBu
b2RlUHRyLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGZvcmNlRXhpdC5yZWYoKTsKICAgICAg
ICAgICAgIE5vZGVJbmRleCBmb3JjZUV4aXRJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDMw
LDE1ICs0MzMsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVu
ZChtX2luZGV4SW5CbG9jaywgZm9yY2VFeGl0SW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1vZGVJc1NwZWNpZmljKG5vZGVQdHIt
PmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lk
ZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5v
ZGVQdHItPmNvZGVPcmlnaW4sIGJhc2UuaW5kZXgoKSk7Ci0gICAgICAgIGlmIChzdG9yYWdlID09
IE5vTm9kZSkKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBBTExf
UE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAg
ICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxk
SWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0
ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpLCBpbmRleC5pbmRleFVuY2hlY2tlZCgpKTsKKyAg
ICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBp
bGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVk
Z2UmIGVkZ2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3OSw4ICs0NzksMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNl
IEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTU2LDkgKzU1Niw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5n
IHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4
KSk7Ci0gICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVj
LCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOworICAgICAgICBh
cnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTczLDkg
KzU3MSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAg
IGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlm
IGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFh
cnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7Ci0gICAgICAgIGFycmF5LT5tZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSksIGZhbHNlKTsKKyAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUoZXhl
YywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCkBAIC02MDEsNiArNTk3LDE2IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFy
cmF5LT5wb3AoZXhlYykpOwogfQogICAgICAgICAKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNB
cnJheSogYXJyYXkpCit7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEs
IGV4ZWMpOworICAgIAorICAgIGFycmF5LT5idXR0ZXJmbHkoKS0+c2V0UHVibGljTGVuZ3RoKGFy
cmF5LT5idXR0ZXJmbHkoKS0+cHVibGljTGVuZ3RoKCkgKyAxKTsKKyAgICAKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykpOworfQorICAgICAgICAKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzA5LDYgKzEzMTUsMTQgQEAgY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQor
eworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVDb250aWd1
b3VzKGdsb2JhbERhdGEpKTsKK30KKwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1
cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogewogICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzMTcs
NiArMTMzMSwxNiBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEpKTsKIH0KIAorY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1
cmVDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0LCBpbnQzMl90IGluZGV4KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9i
YWxEYXRhLCBleGVjKTsKKworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID49
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihvYmplY3QtPmVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9iamVjdC0+ZW5zdXJlSW5kZXhlZFN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworfQorCiBkb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25J
bnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkoKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU1MpKEV4ZWNTdGF0ZSos
IHNpemVfdCwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RJKShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpOwogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVopKEV4
ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRVpJY2ZaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxs
RnJhbWUqLCBpbnQzMl90KTsKQEAgLTExMCw2ICsxMTAsNyBAQCB0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwogdHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVj
dCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlv
bl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXpl
X3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4
ZWNTdGF0ZSosIHNpemVfdCk7CiAKQEAgLTE0OCw2ICsxNDksNyBAQCB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUq
LCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdU
Rl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhw
RXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5B
TDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVy
KikgV1RGX0lOVEVSTkFMOwpAQCAtMTkyLDcgKzE5NCw5IEBAIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQWxsb2NhdGVQcm8KIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXpl
X3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCopOwor
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzT3JBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKIAogLy8gVGhpcyBtZXRob2QgaXMg
dXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlv
biwgd2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxz
IG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTYsNyArMjU2LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSog
ZQogICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgc3R1
YkppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKLSAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0
b3JhZ2UpKSk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzQ29udGlndW91cykpKTsKICAgICAgICAgCiAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMzAzMTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTA5LDEwICsyMTA5LDExMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgfQogfQogCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwoTm9kZSYsIEdQUlJl
ZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJl
ZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpKTsKKyAgICAK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBH
UFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQor
eworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgcmVzdWx0UmVnKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoaG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KE5vZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJl
ZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBh
cnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgaWYgKCFtYXlTdG9yZVRvVGFpbChhcnJheU1v
ZGUpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IHNsb3dDYXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisgICAg
fQorCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOwor
ICAgIAorICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQor
CitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0
b3JhZ2VQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BS
UmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7CisgICAg
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBpZiAoaXNJ
bkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICBl
bHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOworCisgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251
bVZhbHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgewor
ICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4
aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNv
dW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0CisgICAgICAg
IC8vIHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICBpZiAoaXNT
bG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBv
ZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdv
dWxkIGludmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2lt
cGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQorICAgICAg
ICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBt
aWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcsIHRlbXBSZWcpOworICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0K
KyAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgLy8g
U3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2Rl
Lm9wKCk7Ci0KKyAgICAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50Ogog
ICAgICAgICBpbml0Q29uc3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKQEAgLTI1OTUsNiArMjY5
Niw1MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAg
ICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAg
ICAgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
c3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjYxNSw2ICsyNzYxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAg
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7CkBAIC0yNjI3LDIxICsyNzc0LDY1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVz
dWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlR2V0
QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7
CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3Rv
cmFnZSh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpOwotCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVz
dWx0LmdwcigpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5k
cyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVz
dWx0UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcs
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAg
ICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAg
ICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGln
dW91cykpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3Vv
dXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0
UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRl
c0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChm
YWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygm
bV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9
IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJh
c2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAg
IGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZh
bGxUaHJvdWdoKTsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
Z3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgpAQCAtMjczNSw4
ICsyOTI2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgot
ICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
Q09OVElHVU9VU19NT0RFUzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgY2hpbGQzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7
CkBAIC0yNzU2LDU5ICsyOTQ3LDc2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5
LgogICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwog
ICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKLSAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rv
ci4KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAg
ICAgICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVu
IHRoZSBiYXNlbGluZSBKSVQKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNv
dW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAg
ICAgICAgICAgLy8gcHJvZmlsaW5nLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICAgICAgICAgIGlmIChpc1Ns
b3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRo
LCB3ZSB3b3VsZCBpbnZlcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5j
aC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBp
ZiB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1l
LgotICAgICAgICAgICAgICAgICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xl
IHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVy
dHlSZWcpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAg
IEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBv
cmFyeSwgbm9kZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2
YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAg
ICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAg
ICAgICBzdG9yYWdlLnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dD
YXNlcy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNT
dHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1
ZVJlZykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsK
KyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisKKyAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAg
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAobm9k
ZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVl
LmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVl
ZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5OworICAgICAgICAg
ICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVt
cG9yYXJ5LCBub2RlKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJl
ZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZyk7CisKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAg
ICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAg
ICAgICAgICAgc3RvcmFnZS51c2UoKTsKLQotICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVl
IHRvIHRoZSBhcnJheS4KLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOwotCi0gICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChiZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKQotICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGlzSG9sZVZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCkBAIC0yODIwLDYgKzMwMjgsNjMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJ
Q19NT0RFUzogeworICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxk
Myk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3JhcnkodGhp
cyk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9yYXJ5LmdwcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgdGVtcG9yYXJ5UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wb3JhcnlSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1w
b3JhcnlSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3Vz
KG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlz
U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZykpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5h
cnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkg
eworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBvcmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9u
ZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRo
cm91Z2gpOworCisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHku
dXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6
IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiBzdHJpY3QgbW9kZSBzaG91
bGQgYmUgbWFkZQorICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIGlubGluZSBjYWxsIGZyYW1l
LCBub3QgdGhlIG1hY2hpbmUgY29kZSBibG9jay4KKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAg
ICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7CiAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yOTczLDI2ICszMjM4LDU0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIg
PSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwg
c3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIp
KTsKKyAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3Rl
ZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJp
emFycmUgbGVuZ3Rocy4KKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgIG1faml0Lm9yUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAg
ICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0b3Jh
Z2VMZW5ndGhHUFIsCi0gICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVz
aCwgTm9SZXN1bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
R1BSLCBiYXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VM
ZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3Rv
cmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkBAIC0zMDAyLDQxICszMjk1LDc3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlKHRoaXMpOwotICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQu
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKAorICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwKKyAg
ICAgICAgICAgICAgICB2YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZh
bHVlR1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0
aGlzLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNv
dmVyTGVuZ3RoLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3Ro
KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVu
Z3RoLmdwcigpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRl
ZmluZWRDYXNlczsKLSAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOworICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgdmFsdWVHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAg
ICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0KLSAgICAgICAg
c2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0gICAgICAgIG1f
aml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgbV9qaXQu
c3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAot
ICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAotICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENh
c2VzLCB0aGlzLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisg
ICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIHZhbHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2Fz
ZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwo
CisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3As
IHZhbHVlR1BSLCBiYXNlR1BSKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzIxMCw4ICszNTM5
LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
R1BSUmVnIHNpemVHUFIgPSBzaXplLmdwcigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwog
ICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZSgpLCBzaXplR1BSKTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIoc2l6ZUdQ
Uik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJpZ0xlbmd0aCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihN
SU5fU1BBUlNFX0FSUkFZX0lOREVYKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBiaWdM
ZW5ndGgubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSksIHN0cnVjdHVyZUdQ
Uik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwgc3RydWN0dXJlR1BSLCBzaXplR1BS
KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzE1LDYgKzMxNSw0MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5v
ZGUmIG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5m
byA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5PTl9BUlJB
WV9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGln
dW91cykpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RF
UzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7Cisg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2gu
IEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5n
IHNvIHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0
aGUgcHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4K
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAg
ICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykp
KTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRy
KApAQCAtMzUyLDYgKzM4NywyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5v
ZGUmIG5vCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Cisg
ICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAg
IG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMg
Y2FuIGJlIHR1cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4gQnV0IHdlIGN1cnJlbnRseSBoYXZl
IG5vIGV2aWRlbmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgc28gd291bGQgYmUgcHJvZml0YWJs
ZSwgbm9yIGRvIEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRoZSBwcmVzZW50IHRlc3QKKyAgICAg
ICAgLy8gY292ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5
KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgICAgICAgICAgKHBvbHltb3JwaGljSW5j
bHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpID8gSGFzQ29udGlndW91cyA6IDApCisg
ICAgICAgICAgICAgICAgICAgIHwgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9k
ZS5hcnJheU1vZGUoKSkgPyBIYXNBcnJheVN0b3JhZ2UgOiAwKSkpKTsKKyAgICAgICAgCisgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFy
Z3VtZW50czo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTM5MCw3MiArNDQ4LDEwNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgQVNTRVJUKCFtb2Rl
QWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5
TW9kZSgpKSk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgCisgICAgSW5kZXhpbmdUeXBl
IGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrOwogICAgIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKSkgewotICAgIGNhc2UgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
OiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0
dXJlLmdwcigpOwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAg
IAotICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7
CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGRlc2lyZWRJbmRl
eGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
cnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1h
c2sgPSBIYXNBcnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJs
YW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFz
ayA9IEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91cyB8IEhhc0FycmF5
U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUo
dGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHN0cnVjdHVy
ZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CiAgICAgICAgIAotICAgICAgICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlm
IHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBJbmRleGluZ1R5cGUgZGVz
aXJlZEluZGV4aW5nVHlwZU1hc2sgPQotICAgICAgICAgICAgaXNTbG93UHV0QWNjZXNzKG5vZGUu
YXJyYXlNb2RlKCkpID8gKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2Up
IDogSGFzQXJyYXlTdG9yYWdlOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2Fz
ZSA9IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVj
dHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpOworICAgIG1faml0LmxvYWRQ
dHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
bG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIC8vIFdlIGNhbiBza2lw
IGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sp
KTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAg
ICAgIAotICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5leHQgY2hl
Y2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJ
ZiBpdCBkb2VzLAotICAgICAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgorICAgIHNs
b3dDYXNlLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBhbGxlZ2VkbHkgY3Jl
YXRpbmcgY29udGlndW91cyBzdG9yYWdlIGFuZCB0aGUgaW5kZXggaXMgYm9ndXMsIHRoZW4KKyAg
ICAvLyBqdXN0IGRvbid0LgorICAgIGlmIChub2RlLmFycmF5TW9kZSgpID09IEFycmF5OjpCbGFu
a1RvQ29udGlndW91cykgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0
dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybykpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBU
cnVzdGVkSW1tMzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpKTsKKyAgICB9CisgICAgCisgICAg
Ly8gTmV4dCBjaGVjayB0aGF0IHRoZSBvYmplY3QgZG9lcyBub3QgaW50ZXJjZXB0IGluZGV4ZWQg
YWNjZXNzZXMuIElmIGl0IGRvZXMsCisgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4K
KyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CiAgICAgICAgIAotICAgICAg
ICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAvLyBOb3cgY2FsbCBvdXQgdG8g
Y3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRl
bXBHUFIpOworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6
OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3Vy
ZUNvbnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VSZWcpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93
UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFy
cmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZyk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnModGVtcEdQUik7Ci0KLSAgICAgICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhl
IHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCi0gICAgICAg
IC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4g
RWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCi0gICAgICAgIC8vIGFib3V0IGEgbG9hZC4KLSAgICAg
ICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAg
ICAKLSAgICAgICAgLy8gRmluYWxseSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFy
cmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQgdG8gZ2V0LgotICAgICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQg
aW4gdGhlIAotICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0
aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCi0gICAgICAgIC8vIFRoYXQncyBm
aW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3QgdXNlci12aXNpYmxlLgotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhp
bmdUeXBlTWFzaykpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7Ci0gICAgfQorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3Jh
Z2U6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJy
YXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBD
UkFTSCgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyh0ZW1wR1BSKTsKKworICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1
cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQorICAgIC8vIHRlbXBvcmFy
aWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3
ZSdyZSB0YWxraW5nCisgICAgLy8gYWJvdXQgYSBsb2FkLgorICAgIG1faml0LmxvYWRQdHIoCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAKKyAgICAvLyBGaW5hbGx5LCBjaGVj
ayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0
byBnZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24g
Y2hlY2ssIHdoaWNoIHdpbGwgcmVzdWx0IGluIHRoZSAKKyAgICAvLyBieXRlY29kZSBvcGVyYXRp
b24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQu
CisgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZp
c2libGUuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVN
YXNrKSkpOworICAgICAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBzdG9yYWdlUmVz
dWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQpAQCAtMzIwNSwxMiArMzI5OCwyMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2Rl
LmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNh
c2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgY2FzZSBBUlJBWV9XSVRI
X0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9y
YWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAg
ICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
LCByZXN1bHRSZWcpOworICAgICAgICAgICAgCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3JBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBzdG9yYWdlKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKQEAgLTMzOTksNiArMzUwMywx
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFn
ZVJlc3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxlSW5kZXgpOwogfQogCitHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1w
b3JhcnksIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBpZiAoIXB1dEJ5VmFsV2lsbE5l
ZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkpCisgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVn
OworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZWFsVGVtcG9yYXJ5KHRoaXMpOworICAgIHRlbXBv
cmFyeS5hZG9wdChyZWFsVGVtcG9yYXJ5KTsKKyAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAorY2xhc3MgR1BSVGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFz
cyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMTE2Niw2ICsx
MTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1og
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBU
cnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7
CkBAIC0xMjE4LDExICsxMjI0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FU3RJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXpl
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0
cihzaXplKSk7CkBAIC0xNDY4LDYgKzE0NzksMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgaW50MzJfdCBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Cisg
ICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25f
RVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVz
dGVkSW1tUHRyKHNpemUpKTsKQEAgLTE1MzEsMTEgKzE1NDcsMTYgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAg
IH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VT
dFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXpl
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0
cihzaXplKSk7CkBAIC0yMTQ5LDYgKzIxNzAsNDIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGls
ZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQ
UlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwo
Tm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdl
UmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyAgICAKKyAgICBib29sIHB1dEJ5VmFsV2lsbE5lZWRF
eHRyYVJlZ2lzdGVyKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7CisgICAgICAgIC8vIEZvciBBcnJheVN0b3JhZ2UsIHdlIG5lZWQgYW4g
ZXh0cmEgcmVnIGZvciBzdG9yZXMgdG8gaG9sZXMgZXhjZXB0IGlmCisgICAgICAgIC8vIHdlJ3Jl
IGluIFNsb3dQdXQgbW9kZS4KKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9E
RVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEZvciBDb250aWd1b3VzLCB3
ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3IgYW55IGFjY2VzcyB0aGF0IG1heSBzdG9yZQorICAgICAg
ICAvLyB0byB0aGUgdGFpbC4KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6
CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEFsbCBwb2x5bW9ycGhpYyBtb2RlcyBuZWVk
IGFuIGV4dHJhIHJlZy4KKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIEdQUlJlZyB0ZW1w
b3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYsIEFycmF5OjpNb2RlKTsKKyAg
ICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBv
cmFyeSwgTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZW1wb3JhcnlSZWdpc3Rl
ckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1vZGUoKSk7CisgICAgfQorICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmLCBH
UFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BS
UmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQ
UlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BS
UmVnIHRlbXBSZWcpOworICAgIAogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYp
OwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczOCw4ICs3MzgsMjUgQEAgc3RhdGljIGlu
bGluZSBKU09iamVjdCogY2hlY2tlZFJldHVybihKUwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
IH0KIAorY2xhc3MgU2FtcGxpbmdTY29wZSB7CitwdWJsaWM6CisgICAgU2FtcGxpbmdTY29wZShJ
bnRlcnByZXRlciogaW50ZXJwcmV0ZXIpCisgICAgICAgIDogbV9pbnRlcnByZXRlcihpbnRlcnBy
ZXRlcikKKyAgICB7CisgICAgICAgIGludGVycHJldGVyLT5zdGFydFNhbXBsaW5nKCk7CisgICAg
fQorICAgIH5TYW1wbGluZ1Njb3BlKCkKKyAgICB7CisgICAgICAgIG1faW50ZXJwcmV0ZXItPnN0
b3BTYW1wbGluZygpOworICAgIH0KK3ByaXZhdGU6CisgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJw
cmV0ZXI7Cit9OworCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjdXRh
YmxlKiBwcm9ncmFtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmopCiB7
CisgICAgU2FtcGxpbmdTY29wZSBzYW1wbGluZ1Njb3BlKHRoaXMpOworICAgIAogICAgIEpTU2Nv
cGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09i
amVjdCh0aGlzT2JqLCBjYWxsRnJhbWUpKTsKICAgICBBU1NFUlQoIXNjb3BlLT5nbG9iYWxEYXRh
KCktPmV4Y2VwdGlvbik7CkBAIC0xMTM3LDYgKzExNTQsOCBAQCBDYWxsRnJhbWVDbG9zdXJlIElu
dGVycHJldGVyOjpwcmVwYXJlRm9yCiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoQ2Fs
bEZyYW1lQ2xvc3VyZSYgY2xvc3VyZSkgCiB7CisgICAgU2FtcGxpbmdTY29wZSBzYW1wbGluZ1Nj
b3BlKHRoaXMpOworICAgIAogICAgIEFTU0VSVCghY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgaWYgKGNsb3N1cmUub2xkQ2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKQEAgLTExNzIsNiArMTE5MSw4IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmVuZFJlcGVhdENhbGwo
Q2FsbEZyYW0KIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSog
ZXZhbCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Njb3BlKiBz
Y29wZSwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0KQogeworICAgIFNhbXBsaW5nU2NvcGUgc2Ft
cGxpbmdTY29wZSh0aGlzKTsKKyAgICAKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhp
c1ZhbHVlLCBjYWxsRnJhbWUpKTsKICAgICBBU1NFUlQoIXNjb3BlLT5nbG9iYWxEYXRhKCktPmV4
Y2VwdGlvbik7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwMCw2ICs0MDAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpOwogCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgg
PSAwOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4ID0gMDsKICAgICBtX2dsb2JhbFJlc29s
dmVJbmZvSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogICAgIApAQCAt
NzM4LDYgKzczOSwyMCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkKICAgICAg
ICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHViSW5mbyhtX2Nv
ZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSksIHBhdGNoQnVmZmVyKTsKKyAgICBtX2NvZGVC
bG9jay0+c2V0TnVtYmVyT2ZCeVZhbEluZm9zKG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5z
aXplKCk7ICsraSkgeworICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wID0gQ29k
ZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbklu
Zm9baV0uYmFkVHlwZUp1bXApKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZVRhcmdl
dCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5kb25l
VGFyZ2V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhUYXJnZXQgPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uc2xvd1BhdGhUYXJn
ZXQpOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0ucmV0dXJuQWRkcmVzcyk7Cisg
ICAgICAgIAorICAgICAgICBtX2NvZGVCbG9jay0+YnlWYWxJbmZvKGkpID0gQnlWYWxJbmZvKAor
ICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4LAorICAg
ICAgICAgICAgYmFkVHlwZUp1bXAsCisgICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W2ldLmFycmF5TW9kZSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihiYWRU
eXBlSnVtcCwgZG9uZVRhcmdldCksCisgICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQ
dHIocmV0dXJuQWRkcmVzcywgc2xvd1BhdGhUYXJnZXQpKTsKKyAgICB9CiAgICAgbV9jb2RlQmxv
Y2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2Nr
LT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQsMjUgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgY29weVRvU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIGluZm8sIExp
bmtCdWZmZXIgJnBhdGNoQnVmZmVyKTsKICAgICB9OwogCisgICAgc3RydWN0IEJ5VmFsQ29tcGls
YXRpb25JbmZvIHsKKyAgICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oKSB7IH0KKyAgICAgICAg
CisgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlLCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldCkKKyAgICAgICAgICAgIDog
Ynl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgLCBiYWRUeXBlSnVtcChi
YWRUeXBlSnVtcCkKKyAgICAgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAgICAg
ICAgICwgZG9uZVRhcmdldChkb25lVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wOworICAgICAgICBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldDsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoVGFyZ2V0OworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCByZXR1cm5BZGRyZXNzOworICAgIH07CisKICAgICBzdHJ1Y3QgU3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFi
ZWxQdHIgaG90UGF0aEJlZ2luOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRo
T3RoZXI7CkBAIC0zNDgsNiArMzY3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1
Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywg
ZGlyZWN0KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGls
ZUdldEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xv
YmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0g
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
R2V0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4Owor
ICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5B
ZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVz
KQogICAgICAgICB7CkBAIC0zOTcsNiArNDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1
cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKik7CiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1
Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJu
QWRkcmVzc1B0ciwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5BZGRy
ZXNzUHRyLCBib29sIGRpcmVjdCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
KyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2Jh
bERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2Up
OwpAQCAtNDUyLDYgKzQ4OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBS
ZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5k
ZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwog
ICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5
UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJl
Z1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRleGluZyB0eXBlLgorICAg
ICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4gQmFzZSBp
cyBjZWxsIGNoZWNrZWQuCisgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVk
LiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKKyAgICAgICAgLy8gY2FzZSBj
b250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2ZpbGVkLgorICAg
ICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICAKKyAg
ICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNv
bnRhaW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBu
b3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCisgICAgICAgIC8vIHpl
cm8tZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBw
cm9maWxlZC4KKyAgICAgICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KKyAgICAgICAgSnVt
cExpc3QgZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKIAogICAgICAgICBlbnVtIEZpbmFs
T2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApAQCAtODcwLDYgKzky
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxs
czsKICAgICAgICAgVmVjdG9yPExhYmVsPiBtX2xhYmVsczsKICAgICAgICAgVmVjdG9yPFByb3Bl
cnR5U3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbzsK
KyAgICAgICAgVmVjdG9yPEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvOwogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxD
b21waWxhdGlvbkluZm8+IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVj
dG9yPEp1bXBUYWJsZT4gbV9qbXBUYWJsZTsKQEAgLTg3OSw2ICs5MzIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAg
ICB1bnNpZ25lZCBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKyAgICAgICAgdW5z
aWduZWQgbV9ieVZhbEluc3RydWN0aW9uSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fZ2xvYmFs
UmVzb2x2ZUluZm9JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9jYWxsTGlua0luZm9JbmRleDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsMjMgKzQ0NywyMiBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFs
bG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBS
ZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJ
RCBzdG9yYWdlUHRyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3RvcmFn
ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihpbml0aWFsTGVuZ3RoKSk7CisgICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IHN0ZDo6bWF4
KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBpbml0aWFsTGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSk7CisKKyAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CiAKICAgICAvLyBXZSBh
bGxvY2F0ZSB0aGUgYmFja2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNv
bGxlY3Rpb24gCiAgICAgLy8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6
YXRpb24uCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRlIHRo
ZSBjZWxsIGZvciB0aGUgYXJyYXkuCi0gICAgbG9hZFB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOwogICAgIGVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3Q8SlNBcnJheSwgTWFya2VkQmxvY2s6Ok5vbmU+KHNjcmF0Y2gsIGNl
bGxSZXN1bHQsIHN0b3JhZ2VQdHIpOwogCi0gICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3Nhcnkg
aW5mbyBpbiB0aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRk
cmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAg
c3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFn
ZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlh
bExlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3Jh
Z2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLSAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6
c3BhcnNlTWFwT2Zmc2V0KCkpKTsKKyAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZv
IGluIHRoZSBpbmRleGluZyBoZWFkZXIuCisgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRy
ZXNzKHN0b3JhZ2VSZXN1bHQsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwg
QnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUg
bmV3bHkgYWxsb2NhdGVkIEFycmF5U3RvcmFnZS4KICAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0
LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAt
NDcyLDEyICs0NzEsMTIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVu
cwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZh
bHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAg
ICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkp
OworICAgICAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwogI2Vsc2UKICAgICAgICAgbG9hZDMy
KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFk
ZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQ
dHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBpKSk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVz
UmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YodWludDMyX3QpKSwgc3Rv
cmFnZVB0cik7Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVz
dWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikgKiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOworICAgICAgICBzdG9yZTMyKHN0b3Jh
Z2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgKiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNTYxLDEw
ICs1NjAsMjUgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRgogCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQogewotICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCiAg
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9y
ZVRvSG9sZSgpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJyYXlQcm9maWxl
U2F3KEFycmF5UHJvZmlsZSogcHJvZmlsZSwgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpCit7Cisj
aWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIHJldHVybiAhIShwcm9maWxlLT5vYnNlcnZl
ZEFycmF5TW9kZXMoKSAmIChhc0FycmF5TW9kZXMoTm9uQXJyYXkgfCBjYXBhYmlsaXR5KSB8IGFz
QXJyYXlNb2RlcyhBcnJheUNsYXNzIHwgY2FwYWJpbGl0eSkpKTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJh
eU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQoreworICAgIGlmIChhcnJheVByb2ZpbGVTYXco
cHJvZmlsZSwgSGFzQXJyYXlTdG9yYWdlKSkKKyAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFn
ZTsKKyAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2NjEsNyArMTY2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19m
dW5jX2V4cChJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3Ro
KSkpKSB7CisgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFk
VGltZSgpCisgICAgICAgIHx8IENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAg
ICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0z
MihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjgwLDggKzE2ODEsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0cnVjdAogICAgIC8vIElmIHRo
ZSBhbGxvY2F0aW9uIHdvdWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFrZSB0aGUg
cHJvcGVyIHN0dWIgY2FsbCBhYm92ZSBpbiAKICAgICAvLyBlbWl0X29wX25ld19hcnJheS4KICAg
ICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAo
Q29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKKyAgICBpZiAobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJuOworICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gV2UncmUgaGF2aW5nIGEgYmFkIHRpbWUuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3Ig
Y2VsbC4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICB1bnNpZ25lZCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGJhc2Ug
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHByb3BlcnR5
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTExMSwxNyAr
MTEyLDY0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KIAogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwg
cmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkp
OworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRU
eXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOworICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBKdW1wIHJlc3VsdE9L
ID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCk7CisgICAgYnJlYWtwb2ludCgpOworICAg
IHJlc3VsdE9LLmxpbmsodGhpcyk7CisjZW5kaWYKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9m
ZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
Cit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7
CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhh
c1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgU2NhbGVQdHIsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAg
CisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NiwxNCArMTk0LDkwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZl
Y3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVl
CiAgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAgIAogICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChiYXNlLCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHks
IHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNh
bGwuY2FsbChkc3QpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsK
KyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSgpOwogfQogCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1
b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxp
bmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52
YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisg
ICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAg
ICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3Ig
Q29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7Cit9
CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUp
Cit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAor
ICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBl
LCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQo
YnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0
T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbElu
Zm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hC
dWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sg
JXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29k
ZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwogdm9pZCBK
SVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJl
c3VsdCwgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgRmluYWxPYmplY3RN
b2RlIGZpbmFsT2JqZWN0TW9kZSkKIHsKICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgp
OwpAQCAtMjI2LDcgKzM1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
LmFycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1Qw
LCBwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUlu
dGVnZXIocmVnVDEpOwpAQCAtMjM0LDEwICszNTgsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0g
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5
TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAg
IAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZv
KG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKKworICAgIGVtaXRXcml0
ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0
ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Y3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250
aWd1b3VzKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdU
MywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCkpKSk7CisgICAgCisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7CisgICAgCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMp
OworICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwor
ICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwor
fQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAg
dW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmls
ZTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3Rv
cmFnZSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAg
ICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdU
MSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkp
OwogCkBAIC0yNDcsOCArNDMzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbgogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhp
cyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVz
SW5WZWN0b3IpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKICAgICBicmFuY2gzMihCZWxv
dywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7CkBAIC0yNTcsOCArNDQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJ
bnN0cnVjdGlvbgogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAg
ZW5kLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVn
VDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcyk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTI3MCwxMyArNDU2LDE5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGluIHZlY3RvciBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5k
cworICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEpJVFN0dWJDYWxs
IHN0dWJQdXRCeVZhbENhbGwodGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRC
eVZhbENhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJn
dW1lbnQocHJvcGVydHksIHJlZ1QyKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50
KHZhbHVlLCByZWdUMik7Ci0gICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBj
YWxsID0gc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwor
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVy
bkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pbmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNjU2LDcgKzg0OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW4KICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgSnVtcCBmYWls
dXJlQ2FzZXMxID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSXNBcnJh
eSkpOwotICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9
IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8
IEhhc0NvbnRpZ3VvdXMpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxl
bmd0aCBmcm9tIHRoZSBzdG9yYWdlCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNp
bmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRl
ICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CkBAIC0yNDE0LDYgKzI0MTUsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
RW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGlj
IEpTVmFsdWUgZ2V0QnlWYWwoCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQoreworICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0
cmluZygpKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxs
KCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZh
bHVlKGNhbGxGcmFtZSkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNj
cmlwdC5hc1VJbnQzMigpOworICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFz
U3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICBy
ZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0K
KworICAgIGlmIChpc05hbWUoc3Vic2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5n
ZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+
cHJpdmF0ZU5hbWUoKSk7CisKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vi
c2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVy
biBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOworfQorCiBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yNDIzLDM1ICsyNDQ4LDQ0IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBz
dGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZh
bHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNW
YWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxs
RnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0Lmlz
VUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwot
ICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAg
ICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlw
dC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyB0
aGlzIGF0IGFsbC4KKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1
ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybygpKSB7CisgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6
ZS4KKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5j
dGlvbihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9n
ZW5lcmljKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9w
dGltaXplLgorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUt
PmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVj
b2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAg
ICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNP
cHRpbWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRl
eGluZ1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFy
cmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBT
VFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwot
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKICAgICB9CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZh
bChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsK
KyAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworfQorICAgIAorREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
X2dldF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKLSAgICBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1
YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCkpOwotICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAg
IElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZy
YW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
Z2V0KGNhbGxGcmFtZSwgcHJvcGVydHkpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5E
KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsK
KyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJ
T04oKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0y
NTAyLDIzICsyNTM2LDE0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
LQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotCi0gICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKLQogICAgIGlmIChMSUtF
TFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3Jp
cHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAg
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAg
ICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICBv
YmplY3QtPnNldEluZGV4UXVpY2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI1
MjgsMTEgKzI1NTMsNjEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3Zh
bAogICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+
KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCksIHZhbHVlLCBzbG90KTsKICAgICB9
IGVsc2UgewogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0
LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICBpZiAoIXN0
YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmpl
Y3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIWNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlm
IHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAg
ICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogICAg
ICAgICB9CiAgICAgfQorfQorCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlf
dmFsKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKworICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBz
dWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOworCisgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gU2VlIGlmIGl0
J3Mgd29ydGggb3B0aW1pemluZyBhdCBhbGwuCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
b2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChvYmplY3Qt
PnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgeworICAgICAgICAgICAgLy8gRG9udCBldmVy
IHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rQ2FsbGVyVG9GdW5jdGlvbihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlf
b3BfcHV0X2J5X3ZhbF9nZW5lcmljKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICAg
ICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJ
bmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0
IC0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAg
ICAgICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7Cisg
ICAgICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvcklu
ZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUg
IT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxl
UHV0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKKworICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRf
RU5EKCk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWxfZ2Vu
ZXJpYykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBwdXRCeVZhbChj
YWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAKICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04p
IFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5
X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICBFbmNvZGVkSlNW
YWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9n
ZXRfYnlfdmFsX3N0cmluZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3Rh
bmNlb2YoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDYsNiArNDQ3
LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2Rp
cmVjdF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1
dF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFs
X3Zhcl9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lk
IEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEzMDMxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcxLDcgKzExNzEsNyBAQCBfbGxpbnRfb3BfZ2V0X2Fy
cmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBh
cnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJh
eUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVu
Z3RoU2xvdworICAgIGJ0aXogdDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwg
SGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRp
IDRbUENdLCB0MQogICAgIGxvYWRwIDMyW1BDXSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9i
dXR0ZXJmbHlbdDNdLCB0MApAQCAtMTMwNiwxMCArMTMwNiwyMSBAQCBfbGxpbnRfb3BfZ2V0X2J5
X3ZhbDoKICAgICBsb2FkaSAxMltQQ10sIHQzCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBh
eWxvYWQodDMsIEludDMyVGFnLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9w
R2V0QnlWYWxOb3RDb250aWd1b3VzCisgICAgCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZh
bFNsb3cKKyAgICBsb2FkaSBUYWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKKyAgICBsb2FkaSBQYXls
b2FkT2Zmc2V0W3QzLCB0MSwgOF0sIHQxCisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BH
ZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFz
U2xvd1B1dEFycmF5U1RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAu
b3BHZXRCeVZhbFNsb3cKLSAgICBsb2FkaSA0W1BDXSwgdDAKICAgICBsb2FkaSBBcnJheVN0b3Jh
Z2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgQXJyYXlT
dG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKworLm9wR2V0
QnlWYWxEb25lOgorICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGJpZXEgdDIsIEVtcHR5VmFsdWVU
YWcsIC5vcEdldEJ5VmFsU2xvdwogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDAsIDhd
CiAgICAgc3RvcmVpIHQxLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCkBAIC0xMzgzLDI5ICsx
Mzk0LDUyIEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1
Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRwIDE2W1BDXSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIs
IHQzLCB0MCkKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdwog
ICAgIGxvYWRpIDhbUENdLCB0MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQw
LCBJbnQzMlRhZywgdDIsIC5vcFB1dEJ5VmFsU2xvdykKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlUGF5bG9hZCh0MCwgSW50MzJUYWcsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgbG9hZHAg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRl
eGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5
VmFsU2xvdwotICAgIGJpZXEgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwg
dDIsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3Jl
UmVzdWx0OgotICAgIGxvYWRpIDEyW1BDXSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
MlJlZyh0MywgdDEsIHQzKQotICAgIHdyaXRlQmFycmllcih0MSwgdDMpCi0gICAgc3RvcmVpIHQx
LCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0KLSAgICBzdG9y
ZWkgdDMsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MiwgOF0K
KyAgICBidGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKwor
ICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
cHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1
dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0
MSwgdDIpCisgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbdDAsIHQzLCA4XQorICAgIHN0b3JlaSB0
MiwgUGF5bG9hZE9mZnNldFt0MCwgdDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlW
YWxDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNs
b3cKKyAgICBpZiBWQUxVRV9QUk9GSUxFUgorICAgICAgICBsb2FkcCAxNltQQ10sIHQxCisgICAg
ICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCisgICAgZW5k
CisgICAgYWRkaSAxLCB0MywgdDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5
VmFsQ29udGlndW91c1N0b3JlUmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAg
ICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsg
VGFnT2Zmc2V0W3QwLCB0MywgOF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9y
YWdlRW1wdHkKKy5vcFB1dEJ5VmFsQXJyYXlvU3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxvYWRp
IDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyh0MiwgdDEsIHQyKQor
ICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisgICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1f
dmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MywgOF0KKyAgICBzdG9yZWkgdDIsIEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MywgOF0KICAgICBkaXNwYXRjaCg1KQog
Ci0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eToKICAgICBp
ZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0
b3JlVG9Ib2xlW3QzXQorICAgICAgICBsb2FkcCAxNltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAx
LCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRkaSAx
LCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwg
Lm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlT
dG9yYWdlU3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQogICAgIHN0b3JlaSB0MSwgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0K
LSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5
U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBfbGxpbnRfb3BfZ2V0
X2FycmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAg
ICBhcnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRB
cnJheUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5
TGVuZ3RoU2xvdworICAgIGJ0aXogdDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdl
IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxv
YWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgbG9hZHAgNjRbUEIsIFBDLCA4XSwgdDIKICAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAtMTE0NywxNCArMTE0NywyNSBA
QCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MwogICAg
IGFycmF5UHJvZmlsZSh0MiwgdDMsIHQxKQogICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0Mwot
ICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIHN4aTJw
IHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYnRp
eiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzCisKKyAgICBiaWFl
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xl
bmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCisg
ICAgbG9hZHAgW3QzLCB0MSwgOF0sIHQyCisgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93Cisg
ICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAg
YnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSwgLm9wR2V0
QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMg
OFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQx
LCA4XSwgdDIKICAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKworLm9wR2V0QnlWYWxEb25l
OgogICAgIHN0b3JlcCB0MiwgW2NmciwgdDAsIDhdCiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4XSwg
dDAKICAgICB2YWx1ZVByb2ZpbGUodDIsIHQwKQpAQCAtMTIyNiwyOSArMTIzNyw1MSBAQCBfbGxp
bnRfb3BfcHV0X2J5X3ZhbDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIK
ICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQw
KQotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9h
ZGlzIDE2W1BCLCBQQywgOF0sIHQwCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQw
LCB0MiwgLm9wUHV0QnlWYWxTbG93KQotICAgIHN4aTJwIHQyLCB0MgorICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGVJbnQzMih0MCwgdDMsIC5vcFB1dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0Mywg
dDMKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQy
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3Qw
LCB0MiwgOF0sIC5vcFB1dEJ5VmFsRW1wdHkKLS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAg
bG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0Mywg
dDEpCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3Vz
CisgICAgCisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5k
cworLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQ
QywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCisgICAgd3JpdGVC
YXJyaWVyKHQxKQorICAgIHN0b3JlcCB0MSwgW3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQor
Cisub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBiaWFlcSB0MywgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5v
cFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BST0ZJTEVSCisgICAgICAgIGxvYWRwIDMyW1BC
LCBQQywgOF0sIHQyCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVU
b0hvbGVbdDJdCisgICAgZW5kCisgICAgYWRkaSAxLCB0MywgdDIKKyAgICBzdG9yZWkgdDIsIC1z
aXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBd
CisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0CisKKy5vcFB1dEJ5VmFs
Tm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFs
U2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgYnRweiBBcnJheVN0
b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkK
Ky5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQ
QywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MiwgdDEpCiAgICAgd3JpdGVC
YXJyaWVyKHQxKQotICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIs
IDhdCisgICAgc3RvcmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0KICAg
ICBkaXNwYXRjaCg1KQogCi0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0QnlWYWxBcnJheVN0b3Jh
Z2VFbXB0eToKICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQ
cm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QzXQorICAgICAgICBsb2FkcCAzMltQQiwgUEMsIDhd
LCB0MQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3Qx
XQogICAgIGVuZAogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9y
W3QwXQotICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
OjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEs
IHQyLCB0MQorICAgIGJpYiB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1
bHQKKyAgICBhZGRpIDEsIHQzLCB0MQogICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hl
YWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0
QnlWYWxTdG9yZVJlc3VsdAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVz
dWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9wdXRfYnlfdmFsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw4ICs2Myw5IEBAIGVuZAogCiAjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQg
YnV0dGVyZmxpZXMuCiBjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQ29udGlndW91cyA9IDIK
IGNvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKLWNvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorY29u
c3QgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSA9IDE2CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25z
dCBTdHJpbmdUeXBlID0gNQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw3ICs3OSw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGkKIAog
aW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIG51bVZhbHVlcykKIHsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworICAg
IHJldHVybiBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CiB9CiAK
IGlubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTQsNyArMTk0LDggQEAgc3RhdGljIHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBl
ZEluZGV4RnJvbQogLy8gY3VycmVudENvdW50KSB3aWxsIGJlIHNoaWZ0ZWQgdG8gdGhlIGxlZnQg
b3IgcmlnaHQgYXMgYXBwcm9wcmlhdGU7IGluIHRoZQogLy8gY2FzZSBvZiBzaGlmdCB0aGlzIG11
c3QgYmUgcmVtb3ZpbmcgdmFsdWVzLCBpbiB0aGUgY2FzZSBvZiB1bnNoaWZ0IHRoaXMKIC8vIG11
c3QgYmUgaW50cm9kdWNpbmcgbmV3IHZhbHVlcy4KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2ln
bmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkK
K3RlbXBsYXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgordm9pZCBz
aGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIs
IHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBBU1NFUlQoY3VycmVudENvdW50ID4gcmVzdWx0Q291bnQpOwogICAgIHVu
c2lnbmVkIGNvdW50ID0gY3VycmVudENvdW50IC0gcmVzdWx0Q291bnQ7CkBAIC0yMDQsNyArMjA1
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYwogCiAgICAgaWYg
KGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXko
dGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFzQXJy
YXkodGhpc09iaiktPnNoaWZ0Q291bnQoZXhlYywgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIGlm
IChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFzQXJyYXkodGhpc09iaiktPnNoaWZ0Q291
bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRlciwgY291bnQpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMjMxLDcgKzIzMiw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaGlm
dChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgfQogICAgIH0KIH0KLXN0YXRpYyBpbmxpbmUgdm9p
ZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhl
YWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWdu
ZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1v
ZGU+Cit2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5z
aWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKHJlc3VsdENvdW50ID4gY3VycmVudENv
dW50KTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHJlc3VsdENvdW50IC0gY3VycmVudENvdW50OwpA
QCAtMjQ3LDEwICsyNDksMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRl
KiBleAogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGFzQXJyYXkodGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0g
bGVuZ3RoICYmIGFycmF5LT51bnNoaWZ0Q291bnQoZXhlYywgaGVhZGVyLCBjb3VudCkpCisgICAg
ICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT51bnNoaWZ0Q291bnQ8
c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRlciwgY291bnQpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KLQorICAgIAogICAgIGZvciAodW5zaWduZWQgayA9IGxlbmd0aCAtIGN1cnJlbnRD
b3VudDsgayA+IGhlYWRlcjsgLS1rKSB7CiAgICAgICAgIHVuc2lnbmVkIGZyb20gPSBrICsgY3Vy
cmVudENvdW50IC0gMTsKICAgICAgICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQgLSAx
OwpAQCAtNTI2LDcgKzUyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgYXJyYXktPnB1c2goZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwog
ICAgIH0KLQorICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCkBAIC01NDQsNiArNTQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KKyAg
ICAKICAgICBKU1ZhbHVlIG5ld0xlbmd0aChzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsg
c3RhdGljX2Nhc3Q8aW50NjRfdD4oZXhlYy0+YXJndW1lbnRDb3VudCgpKSk7CiAgICAgcHV0UHJv
cGVydHkoZXhlYywgdGhpc09iaiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgbmV3TGVu
Z3RoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ld0xlbmd0aCk7CkBAIC02MDAsNyAr
NjAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9
IHRoaXNPYmotPmdldChleGVjLCAwKTsKLSAgICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgMCwg
MSwgMCwgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0
PihleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihsZW5ndGggLSAxKSk7CkBAIC03MzAsNyArNzMzLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KKyAgICAKICAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpKTsKIApAQCAtNzYyLDExICs3NjUsMTEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgdW5zaWduZWQgYWRkaXRp
b25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwog
ICAgIGlmIChhZGRpdGlvbmFsQXJncyA8IGRlbGV0ZUNvdW50KSB7Ci0gICAgICAgIHNoaWZ0KGV4
ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7
CisgICAgICAgIHNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+KGV4ZWMsIHRoaXNP
YmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7CiAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBlbHNlIGlmIChhZGRpdGlvbmFsQXJncyA+IGRl
bGV0ZUNvdW50KSB7Ci0gICAgICAgIHVuc2hpZnQoZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0
ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKKyAgICAgICAgdW5zaGlmdDxKU0FycmF5
OjpTaGlmdENvdW50Rm9yU3BsaWNlPihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQs
IGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KQEAgLTc5MSw3ICs3OTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBuckFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCk7
CiAgICAgaWYgKG5yQXJncykgewotICAgICAgICB1bnNoaWZ0KGV4ZWMsIHRoaXNPYmosIDAsIDAs
IG5yQXJncywgbGVuZ3RoKTsKKyAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9y
U2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDAsIG5yQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlD
YXBhY2l0eSArIDEpOwogICAgIH0KICAgICAKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5v
dCBqdXN0IGJlY2F1c2UgaXQncyBoYW5keSwgYnV0IHRvIHJlbWluZCB5b3UgdGhhdAorICAgIC8v
IHRoZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJmbGllcyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJp
dGhtZXRpYy4KKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihwdHIpOwor
ICAgIH0KKyAgICAKKyAgICBjaGFyKiBwb2ludGVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcyk7IH0KKyAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5k
ZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hl
YWRlcigpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsg
cmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVy
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CkBAIC03MCw5ICs3OSwyMSBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4g
SW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KICAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVy
dHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJl
dHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIAorICAgIHVp
bnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xl
bmd0aCgpOyB9CisgICAgdWludDMyX3QgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50
MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9
CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFk
ZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVlKTsgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJu
IGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVy
PFVua25vd24+ID4oKTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21Db250aWd1
b3VzKFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cykKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KGNvbnRpZ3VvdXMpOworICAgIH0KICAg
ICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1
cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KICAg
ICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheQogCiBpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJP
ZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIo
KS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogSXQgd291
bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3
ZSBrbm93IGluIHdoaWNoCkBAIC0xNjMsNyArMTYzLDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKIHsKLSAgICBBU1NF
UlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFT
U0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHVu
c2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7
CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCiAgICAgbWVt
bW92ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDE3IEBAIGlubGluZSBzaXplX3QgSW5kZXhp
bmdIZWFkZXI6OnByZUNhcGFjaXQKIAogaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYg
KExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9y
KGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgfQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgY2hhciogaW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgY2hhciByZXN1bHRbMTI4XTsKKyAgICBjb25zdCBjaGFy
KiBiYXNpY05hbWU7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzKSB7
CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5IjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBi
YXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlD
bGFzczoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5Q2xhc3MiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJh
eVdpdGhDb250aWd1b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhBcnJheVN0b3JhZ2UiOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYmFzaWNOYW1lID0gIlVua25vd24hIjsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHNucHJpbnRmKAorICAgICAgICByZXN1
bHQsIHNpemVvZihyZXN1bHQpLCAiJXMlcyIsIGJhc2ljTmFtZSwKKyAgICAgICAgKGluZGV4aW5n
VHlwZSAmIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzKSA/ICJ8TWF5SGF2ZUluZGV4ZWRBY2Nlc3Nv
cnMiIDogIiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE5ICszMiwyMSBAQCB0eXBlZGVm
IHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2Vu
Y2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAg
ICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNDb250aWd1
b3VzICAgICAgICAgICAgPSAyOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0
b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlICAgPSAxNjsKIAogLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcg
dGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNrZWQgb2Zm
IHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAzMjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9i
amVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0Lgotc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSA2NDsKK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMgID0gMzI7CiAKIC8vIExpc3Qgb2Yg
YWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJy
YXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgPSBIYXNDb250aWd1b3VzOwogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAgID0gSGFz
QXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7IC8v
IEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXkiIGJ1dCB0aGlzIHdvdWxkIGxlYWQgdG8gZGlz
YXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBB
cnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0NvbnRpZ3VvdXM7
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAg
ICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc1Nsb3dQdXRB
cnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU0LDEwIEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJheTogICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgIFwKKyAgICBjYXNlIEFy
cmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQpAQCAtNzYsNiAr
ODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0luZGV4aW5nSGVhZGVyKEluZAogICAgIHJl
dHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBlKTsKIH0KIAorc3RhdGljIGlubGluZSBib29s
IGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICByZXR1cm4g
ISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9v
bCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKIHsKICAgICByZXR1
cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0
b3JhZ2UpKTsKQEAgLTg2LDYgKzk3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZFVzZVNs
b3dQdXQoSW5kZQogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciogaW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhpbmdU
eXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDMxOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzNyw5ICszMzcsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpT
R2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQorYm9v
bCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3Ro
KCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNw
YXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgpAQCAtNDAyLDEy
ICs0MDEsNzEgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAg
IHJldHVybiB0cnVlOwogfQogCitib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoK
KyAgICAgICAgaWYgKCFuZXdMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAgICAg
ICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVj
LCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIGNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5n
dGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhD
b250aWd1b3VzOgorICAgICAgICBpZiAobmV3TGVuZ3RoID09IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVuZ3Ro
ID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBkbyBm
YXN0IHB1c2guCisgICAgICAgICAgICB8fCAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVgKKyAgICAgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5n
dGgsIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMobV9idXR0ZXJmbHkpKSkpIHsKKyAgICAgICAg
ICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4
ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3
TGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVu
Z3RoOykKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsK
KyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9u
LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNI
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3Ao
RXhlY1N0YXRlKiBleGVjKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtsZW5ndGhdLmdldCgpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5jbGVhcigpOworICAgICAgICAgICAgbV9idXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBB
UlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAt
NDMxLDI2ICs0ODksMjggQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0KLSAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBb
W0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
IC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVu
dHMgaW5keCBhbmQgdHJ1ZS4KLSAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
cywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5h
YmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgICAg
ICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOwotICAgICAgICAvLyBSZXR1cm4gZWxlbWVu
dC4KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IENSQVNIKCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlMZW5ndGgoKTsKKyAgICAvLyBMZXQgZWxlbWVudCBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBhcmd1bWVudCBpbmR4LgorICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdp
dGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICB9CisgICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3
aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCisgICAgc2V0TGVuZ3RoKGV4
ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAvLyBSZXR1cm4gZWxlbWVudC4KKyAgICByZXR1cm4gZWxl
bWVudDsKIH0KIAogLy8gUHVzaCAmIHB1dEluZGV4IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCB3aXRo
IHR3byBzbWFsbCBkaWZmZXJlbmNlcy4KQEAgLTQ2NCw2ICs1MjQsMjYgQEAgdm9pZCBKU0FycmF5
OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5n
dGggPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChs
ZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBp
ZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgbGVuZ3Ro
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGgg
PSBsZW5ndGgoKTsKICAgICAgICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhv
bGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1ZSkpIHsKQEAgLTUwNSwxMiArNTg1LDggQEAg
dm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIH0KIH0KIAotYm9v
bCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKGNvdW50ID4gMCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
CiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgQVNTRVJU
KGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgCkBAIC01NjUsMTAgKzY0MSw2MSBAQCBib29sIEpT
QXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBBU1NFUlQo
Y291bnQgPiAwKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBvbGRM
ZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChjb3Vu
dCA8PSBvbGRMZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2Fs
ayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbwor
ICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlm
IChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCArIGNvdW50KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKQorICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0
SW5kZXgsIGNvdW50LCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2Jh
bERhdGEoKSkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0g
Y291bnQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsr
aSkgeworICAgICAgICAgICAgLy8gU3RvcmluZyB0byBhIGhvbGUgaXMgZmluZSBzaW5jZSB3ZSdy
ZSBzdGlsbCBoYXZpbmcgYSBnb29kIHRpbWUuIEJ1dCByZWFkaW5nCisgICAgICAgICAgICAvLyBm
cm9tIGEgaG9sZSBpcyB0b3RhbGx5IG5vdCBmaW5lLCBzaW5jZSB3ZSBtaWdodCBoYXZlIHRvIHJl
YWQgZnJvbSB0aGUgcHJvdG8KKyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdldCgpOworICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBwdXJw
b3NlIG9mIHRoaXMgcGF0aCBpcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBtYWtlIHRoZSBzYW1l
CisgICAgICAgICAgICAgICAgLy8gbWlzdGFrZSBpbiB0aGUgZnV0dXJlOiBzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZSgpIGNhbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgLy8gYWJv
dXQgaG9sZXMgKGF0IGxlYXN0IGZvciBub3cpLCBidXQgaXQgY2FuIGRldGVjdCB0aGVtIHF1aWNr
bHkuIFNvCisgICAgICAgICAgICAgICAgLy8gd2UgY29udmVydCB0byBhcnJheSBzdG9yYWdlIGFu
ZCB0aGVuIGFsbG93IHRoZSBhcnJheSBzdG9yYWdlIHBhdGggdG8KKyAgICAgICAgICAgICAgICAv
LyBmaWd1cmUgaXQgb3V0LgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFy
cmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3Rv
cmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3Vu
ZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCisgICAgICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0
aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgor
ICAgICAgICAgICAgLy8gYmFycmllci4KKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1f
YnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRl
eCwgY291bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSB1bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4g
ICAgCi1ib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIEFTU0VSVChzdGFydElu
ZGV4IDw9IGxlbmd0aCk7CkBAIC02MTAsNiArNzM3LDQ3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIC8vIFdl
IGNvdWxkIGhhbmRsZSB0aGlzLiBCdXQgaXQgc2hvdWxkbid0IGV2ZXIgY29tZSB1cCwgc28gd2Ug
d29uJ3QuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdh
bGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBk
byBzbworICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAg
IGlmIChvbGRMZW5ndGggLSBzdGFydEluZGV4ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisg
ICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICAgICAgCisgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0YXJ0SW5kZXg7KSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHYpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB3ZSdyZSBsZWF2
aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2YgdGhlIGFycmF5IHRoYXQgd2Ugc2hpZnRl
ZCBvdXQKKyAgICAgICAgLy8gb2YuIFRoaXMgaXMgZmluZSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMg
cmVxdWlyZWQgdG8gc3RvcmUgb3ZlciB0aGF0IGFyZWEsIGFuZAorICAgICAgICAvLyBpbiBjb250
aWd1b3VzIG1vZGUgc3RvcmluZyBpbnRvIGEgaG9sZSBpcyBndWFyYW50ZWVkIHRvIGJlaGF2ZSBl
eGFjdGx5IHRoZSBzYW1lCisgICAgICAgIC8vIGFzIHN0b3Jpbmcgb3ZlciBhbiBleGlzdGluZyBl
bGVtZW50LgorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIHVuc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFn
ZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogc3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFT
b3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtNjI0LDYgKzc5Miw0
NSBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydChjCiAgICAgcmV0dXJu
IGNvZGVQb2ludENvbXBhcmUodmEtPnNlY29uZCwgdmItPnNlY29uZCk7CiB9CiAKK3RlbXBsYXRl
PEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljVmVj
dG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNh
bGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgQVNTRVJUKGluZGV4aW5n
VHlwZSA9PSBBcnJheVdpdGhDb250aWd1b3VzIHx8IGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhB
cnJheVN0b3JhZ2UpOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZDsKKyAgICB1bnNpZ25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICBjb21wYWN0Rm9yU29y
dGluZzxpbmRleGluZ1R5cGU+KAorICAgICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQs
CisgICAgICAgIG5ld1JlbGV2YW50TGVuZ3RoKTsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGRhdGEgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpOworICAgIAorICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlICYmIGFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGFsbFZhbHVl
c0FyZU51bWJlcnMgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmV3UmVsZXZh
bnRMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWRhdGFbaV0uaXNOdW1iZXIoKSkgeworICAg
ICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQor
ICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSk7CisgICAgCisgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFz
dCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQorICAgIC8vIGFsc28gZG9uJ3Qg
cmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNp
YmxlCisgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwg
cHJpbWl0aXZlIHZhbHVlcy4KKyAgICBxc29ydChkYXRhLCBuZXdSZWxldmFudExlbmd0aCwgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAg
IHJldHVybjsKK30KKwogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERh
dGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CkBA
IC02MzIsMTE3ICs4MzksMTI5IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRl
KiBleGUKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0g
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoKTsKLSAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIGNh
c2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgc29ydE51bWVyaWNWZWN0b3I8QXJyYXlX
aXRoQ29udGlndW91cz4oZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEp
OworICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1h
cCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgYWxsVmFsdWVzQXJl
TnVtYmVycyA9IHRydWU7Ci0gICAgICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewotICAg
ICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAgICAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29t
cGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwotICAgICAgICAKLSAgICAgICAgLy8g
Rm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRo
YW4gbWVyZ2Vzb3J0LiBXZQotICAgICAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0
J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQotICAgICAgICAvLyBz
aWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFs
dWVzLgotICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwotICAgICAgICAKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgc29ydE51bWVyaWNWZWN0b3I8
QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogfQogCi12b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVj
KQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6c29y
dENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIFdyaXRlQmFycmllcjxVbmtub3duPiog
YmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VJ
bmRleGluZ01vZGUoKSk7Ci0gICAgCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgaWYgKCFyZWxldmFudExlbmd0aCkK
ICAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMg
dG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFu
ZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXBy
b3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVx
dWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKKyAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJv
dGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJp
bmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdp
bmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0
ZW50LgogICAgICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAg
ICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGlu
ZygpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7Ci0gICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFs
dWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9u
dCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJh
YmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3Vn
aCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgICAgICAvLyBidWZmZXIuIEJlc2lk
ZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBj
dXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgICAgICAvLyByYW5kb20gb3Ig
b3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1
bmN0aW9uIGluY29uc2lzdGVudC4KLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZVN0cmlu
Z1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgICAgICBpZiAo
IXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8VmFsdWVTdHJp
bmdQYWlyPiB2YWx1ZXMocmVsZXZhbnRMZW5ndGgpOworICAgIGlmICghdmFsdWVzLmJlZ2luKCkp
IHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47
CisgICAgfQogICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOworICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFs
dWVzID0gdHJ1ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICAg
ICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYm
IHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgICAgIH0KKyAgICBib29sIGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcyA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExl
bmd0aDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBiZWdpbltpXS5nZXQoKTsKKyAg
ICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdmFsdWVzW2ldLmZp
cnN0ID0gdmFsdWU7CisgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGlu
Z1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAgIH0KICAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwg
dG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAgICAgICAvLyBhIHRv
U3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAvLyBGSVhNRTogVGhlIGZvbGxv
d2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVz
IGV2ZW4gYWZ0ZXIKKyAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4K
ICAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVz
W2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZh
bHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcg
dmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhh
dCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgICAgICAvLyB0aGFuIE8oTiBsb2cgTikuCisgICAg
Ly8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGht
IG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIK
KyAgICAvLyB0aGFuIE8oTiBsb2cgTikuCiAgICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQot
ICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICAgICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
ZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotI2Vsc2UKLSAgICAgICAgLy8g
RklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBz
dGFibGUgc29ydC4KLSAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBh
IHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUg
c29ydC4KKyAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQogICAgICAgICBxc29ydCh2
YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNv
bXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgZWxzZQorICAgICAgICBtZXJnZXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogVGhlIHFz
b3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0Lgor
ICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0
IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCisgICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCisgICAgCisgICAgLy8gSWYgdGhl
IHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVj
dG9yIHN0b3JhZ2UsCisgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9y
aWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUp
IHsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGVuc3VyZUNvbnRpZ3Vv
dXNMZW5ndGgoZ2xvYmFsRGF0YSwgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICBicmVhazsKICAg
ICAgICAgCi0gICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBs
ZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgICAgICAvLyBpbmNyZWFz
ZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVl
cy4KLSAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5n
bG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgICAgICBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICBpZiAoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
IDwgcmVsZXZhbnRMZW5ndGgpIHsKKyAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICAgICAgYmVnaW4gPSBh
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0b3JhZ2Ut
Pmxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgc3Rv
cmFnZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlm
IChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkKKyAgICAgICAgICAg
IGFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgocmVsZXZhbnRMZW5ndGgpOworICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJl
Z2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworfQorCit2b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJ
bmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQ7IGkrKykKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czog
eworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAg
IHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3RoOworICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxB
cnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAgICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOwogICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIHNvcnRDb21wYWN0ZWRW
ZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oCisgICAgICAgICAgICBleGVjLCBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAg
IHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3RoOworICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxB
cnJheVdpdGhBcnJheVN0b3JhZ2U+KAorICAgICAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkLCBuZXdSZWxldmFudExlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdl
LT5tX3NwYXJzZU1hcCk7CiAgICAgICAgIAorICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFy
cmF5V2l0aEFycmF5U3RvcmFnZT4oCisgICAgICAgICAgICBleGVjLCBzdG9yYWdlLT5tX3ZlY3Rv
ciwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAgICAgCkBAIC04MjgsMTA4ICsxMDQ3LDExNiBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0
b3JGb3JBcnJheUNvbXBhcmUgCiAgICAgc3RhdGljIGhhbmRsZSBudWxsKCkgeyByZXR1cm4gMHg3
RkZGRkZGRjsgfQogfTsKIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYg
Y2FsbERhdGEpCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0Fy
cmF5Ojpzb3J0VmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24s
IENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAgQVNT
RVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09
IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgCi0gICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFy
ZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KKyAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4
Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgog
ICAgICAgICAKLSAgICAgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBp
biAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAotICAgICAgICAvLyBp
ZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCi0gICAgICAgIEFTU0VSVChhcnJheVN0b3JhZ2Uo
KS0+bGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpKTsKLSAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA+IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBp
bGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgLy8g
aWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgorICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpKTsKKyAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpID4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gbWluKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwgYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKCFhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwot
ICAgICAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoOworICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSByZWxldmFudExlbmd0aDxpbmRleGluZ1R5cGU+KCk7Cisg
ICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aDsKICAgICAgICAgCi0gICAg
ICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghbm9kZUNv
dW50KQorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBBVkxUcmVlPEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdo
IGZvciAyXjMxIGl0ZW1zCi0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7
Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1
bmN0aW9uOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNh
bGxUeXBlOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZj
YWxsRGF0YTsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3Vu
dCk7CisgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRy
ZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fZXhlYyA9IGV4ZWM7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVu
Y3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJl
Q2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxs
RGF0YSA9ICZjYWxsRGF0YTsKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9k
ZUNvdW50KTsKICAgICAgICAgCi0gICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQot
ICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3
IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAy
KSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCisgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwogICAgICAgICAKLSAgICAgICAg
aWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQorICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmll
cyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAg
ICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUg
dHJlZSBoZXJlLgorICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmll
cyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAg
IC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVl
IGhlcmUuCiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICAg
ICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0g
MDsKKyAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwogICAgICAgICAKLSAgICAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5n
IHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRy
ZWUuCi0gICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1E
ZWZpbmVkKSB7Ci0gICAgICAgICAgICBpZiAobnVtRGVmaW5lZCA+IGFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFs
dWUgdiA9IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAg
ICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVl
ID0gdjsKLSAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICB9Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpID4gYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKHYpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICAr
K251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Ci0gICAg
ICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAg
ICAgICArK251bURlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfQorICAgIC8vIEl0ZXJhdGUgb3Zl
ciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQg
b25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgorICAgIGZv
ciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAg
ICAgIGlmIChudW1EZWZpbmVkID4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5
cGU+KClbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVk
KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
c1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQp
OworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChpID4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0
YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7CisgICAgICAgIGlmICh2KSB7CisgICAgICAgICAg
ICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQo
bnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAgICAgICAg
fQogICAgICAgICB9CisgICAgfQogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZl
Y3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0gICAgICAgIAotICAgICAg
ICBBU1NFUlQoIWFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgdW5zaWduZWQgbmV3
VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CiAgICAgICAgIAot
ICAgICAgICAvLyBUaGUgYXJyYXkgc2l6ZSBtYXkgaGF2ZSBjaGFuZ2VkLiAgRmlndXJlIG91dCB0
aGUgbmV3IGJvdW5kcy4KLSAgICAgICAgdW5zaWduZWQgbmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCA9
IG1pbihhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCksIGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgLy8gVGhlIGFycmF5IHNpemUgbWF5IGhhdmUgY2hhbmdlZC4gIEZpZ3VyZSBv
dXQgdGhlIG5ldyBib3VuZHMuCisgICAgdW5zaWduZWQgbmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCA9
IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKICAgICAgICAgCi0gICAgICAgIHVuc2ln
bmVkIGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkID0gbWluKG1pbihuZXdlc3RVc2VkVmVjdG9y
TGVuZ3RoLCBudW1EZWZpbmVkKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXMuc2l6ZSgpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHVuZGVmaW5lZEVsZW1lbnRz
VGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG5ld1VzZWRWZWN0b3JMZW5n
dGgpOwotICAgICAgICB1bnNpZ25lZCBjbGVhckVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2Vz
dFVzZWRWZWN0b3JMZW5ndGgsIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgICAgICAKLSAgICAgICAg
Ly8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCi0gICAgICAgIEFWTFRyZWU8
QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKLSAg
ICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgKytpKSB7Ci0gICAgICAgICAg
ICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgICAgICsraXRlcjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFj
ayBpbi4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hv
bGQ7IGkgPCB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgKytpKQotICAgICAgICAgICAgYXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotCi0gICAgICAgIC8vIEVu
c3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7IGkgPCBj
bGVhckVsZW1lbnRzVGhyZXNob2xkOyArK2kpCi0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICB1bnNpZ25lZCBlbGVtZW50c1RvRXh0cmFjdFRocmVz
aG9sZCA9IG1pbihtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgbnVtRGVmaW5lZCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSkpOworICAg
IHVuc2lnbmVkIHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0
b3JMZW5ndGgsIG5ld1VzZWRWZWN0b3JMZW5ndGgpOworICAgIHVuc2lnbmVkIGNsZWFyRWxlbWVu
dHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgdXNlZFZlY3Rvckxlbmd0
aCk7CisgICAgICAgIAorICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdl
LgorICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRl
cmF0b3IgaXRlcjsKKyAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgKytpKSB7CisgICAgICAg
IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAgICAgICAgKytpdGVyOwor
ICAgIH0KKyAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgIGZvciAodW5z
aWduZWQgaSA9IGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkOyBpIDwgdW5kZWZpbmVkRWxlbWVu
dHNUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtp
XS5zZXRVbmRlZmluZWQoKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4g
dGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB1bmRlZmlu
ZWRFbGVtZW50c1RocmVzaG9sZDsgaSA8IGNsZWFyRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKKyAg
ICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5jbGVhcigpOworICAgIAorICAg
IGlmIChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdl
KCktPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworfQorCit2b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwg
Q2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBBU1NF
UlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czoKKyAgICAgICAgc29ydFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPihleGVjLCBjb21w
YXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIHJldHVybjsKIAorICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBzb3J0VmVjdG9yPEFycmF5V2l0
aEFycmF5U3RvcmFnZT4oZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEp
OwogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkzOCwxMTMgKzExNjUsMTIxIEBAIHZvaWQgSlNB
cnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCBKU0FycmF5OjpmaWxsQXJn
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAg
IHVuc2lnbmVkIGkgPSAwOworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yRW5k
ID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB2ZWN0b3IgPSBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3Zl
Y3RvcjsKLSAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgp
LCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAg
ICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXYpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICg7IGkgPCBzdG9yYWdlLT5sZW5ndGgoKTsgKytp
KQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5k
ID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAgfQorICAgIAorICAgIGZvciAo
OyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
ID0gdmVjdG9yW2ldOworICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVu
Z3RoKCk7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9p
ZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAg
ICAKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAg
ICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgdmVjdG9y
RW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVk
IHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAg
ICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKCF2KQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2Lmdl
dCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAg
ICAgICAgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBm
b3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CiAgICAgfQorICAgIAor
ICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1l
bnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAotdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNv
cnRpbmcoKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJh
eTo6Y29tcGFjdEZvclNvcnRpbmcodW5zaWduZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdS
ZWxldmFudExlbmd0aCkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwor
ICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsK
IAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBB
cnJheUNsYXNzOgotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICB1bnNpZ25lZCBteVJlbGV2YW50TGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdUeXBl
PigpOworICAgIAorICAgIG51bURlZmluZWQgPSAwOworICAgIHVuc2lnbmVkIG51bVVuZGVmaW5l
ZCA9IDA7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICAg
ICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IG15
UmVsZXZhbnRMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRl
eGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251bURlZmluZWRdLmdldCgpOworICAgICAgICBpZiAo
IXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAg
ICAKLSAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURl
ZmluZWQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWRdLmdldCgpOwotICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAg
ICAgICBpZiAodikgewotICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHYpOwotICAgICAgICAgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9
IG51bURlZmluZWQ7IGkgPCBteVJlbGV2YW50TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1
ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5nZXQoKTsKKyAgICAgICAgaWYg
KHYpIHsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAg
KytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhp
bmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodik7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0
b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwotICAgICAgICAKLSAgICAgICAg
QVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotICAgICAg
ICAKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JM
ZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9CiAgICAg
ICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19CisgICAgbmV3UmVsZXZhbnRMZW5ndGggPSBudW1EZWZpbmVk
ICsgbnVtVW5kZWZpbmVkOworICAgIAorICAgIGlmIChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdU
eXBlKSkKKyAgICAgICAgQVNTRVJUKCFhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdSZWxldmFudExlbmd0
aDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldFVuZGVm
aW5lZCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1JlbGV2YW50TGVuZ3RoOyBpIDwgbXlS
ZWxldmFudExlbmd0aDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigp
W2ldLmNsZWFyKCk7CiAKKyAgICBpZiAoaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpCisg
ICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3UmVsZXZhbnRM
ZW5ndGg7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw4ICs3MSw1NCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwdXNoKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
OwogICAgICAgICBKU1ZhbHVlIHBvcChFeGVjU3RhdGUqKTsKIAotICAgICAgICBib29sIHNoaWZ0
Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpOwot
ICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4
LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGVudW0gU2hpZnRDb3VudE1vZGUgeworICAgICAg
ICAgICAgLy8gVGhpcyBmb3JtIG9mIHNoaWZ0IGhpbnRzIHRoYXQgd2UncmUgZG9pbmcgcXVldWVp
bmcuIFdpdGggdGhpcyBhc3N1bXB0aW9uIGluIGhhbmQsCisgICAgICAgICAgICAvLyB3ZSBjb252
ZXJ0IHRvIEFycmF5U3RvcmFnZSwgd2hpY2ggaGFzIHF1ZXVlIG9wdGltaXphdGlvbnMuCisgICAg
ICAgICAgICBTaGlmdENvdW50Rm9yU2hpZnQsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFRoaXMgZm9ybSBvZiBzaGlmdCBoaW50cyB0aGF0IHdlJ3JlIGp1c3QgZG9pbmcgY2FyZSBhbmQg
ZmVlZGluZyBvbiBhbiBhcnJheSB0aGF0CisgICAgICAgICAgICAvLyBpcyBwcm9iYWJseSB0eXBp
Y2FsbHkgdXNlZCBmb3Igb3JkaW5hcnkgYWNjZXNzZXMuIFdpdGggdGhpcyBhc3N1bXB0aW9uIGlu
IGhhbmQsCisgICAgICAgICAgICAvLyB3ZSB0cnkgdG8gcHJlc2VydmUgd2hhdGV2ZXIgaW5kZXhp
bmcgdHlwZSBpdCBoYXMgYWxyZWFkeS4KKyAgICAgICAgICAgIFNoaWZ0Q291bnRGb3JTcGxpY2UK
KyAgICAgICAgfTsKKworICAgICAgICBib29sIHNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwg
Y291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAg
fQorICAgICAgICBib29sIHNoaWZ0Q291bnRGb3JTcGxpY2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNv
dW50KTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTxTaGlmdENvdW50TW9kZSBzaGlmdENv
dW50TW9kZT4KKyAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoc2hpZnRDb3VudE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNo
aWZ0OgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50Rm9yU2hpZnQoZXhlYywgc3Rh
cnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU3BsaWNlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCB1bnNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdW5z
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJl
QXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGJv
b2wgdW5zaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1bnNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAg
ICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTxTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4K
KyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFy
dEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChz
aGlmdENvdW50TW9kZSkgeworICAgICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNwbGljZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5kZXgs
IGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZmlsbEFy
Z0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBj
b3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsK
QEAgLTk4LDE0ICsxNDQsNDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAg
ICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVj
U3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJv
b2wgc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwogCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFi
bGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291
bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpOworICAgICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3Vu
dCwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93
Q2FzZShKU0dsb2JhbERhdGEmLCBib29sLCB1bnNpZ25lZCk7CisKKyAgICAgICAgdGVtcGxhdGU8
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0TnVtZXJpY1ZlY3Rv
cihFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUs
IGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0
b3IoRXhlY1N0YXRlKiwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVs
ZXZhbnRMZW5ndGgpOworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0VmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUg
Y29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmKTsKKworICAgICAgICBi
b29sIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVu
Z3RoLCBib29sIHRocm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgdm9pZCBz
ZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsKICAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKCk7CisgICAgICAgIHRlbXBsYXRlPElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgY29tcGFjdEZvclNvcnRpbmco
dW5zaWduZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCk7CiAgICAg
fTsKIAorICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZs
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAg
ICAgIEluZGV4aW5nSGVhZGVyIGhlYWRlcjsKKyAgICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0
aChzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBoZWFkZXIuc2V0
UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBoZWFkZXIs
IGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFy
cmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGUoCkBAIC0xMjEsNyArMTkzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5l
IEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBp
bml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlm
IChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3Vz
KSkgeworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKGluaXRp
YWxMZW5ndGggPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAm
JiBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOwor
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMzMsMTUg
KzIxMywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
Ci0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVt
cCwgMCwgMCk7Ci0gICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGlu
Z0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAg
IHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKLSAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAu
Y2xlYXIoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxM
ZW5ndGg7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZ
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAw
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZv
aWQqIHRlbXA7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVt
cCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5k
ZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9i
YWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsK
ICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDggQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0
aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywg
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBt
X2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1b3VzKSk7CisgICAgbV9hcnJh
eVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJh
eVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAgICAgbV9hcnJheVN0
cnVjdHVyZUZvclNsb3dQdXQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlw
ZS5nZXQoKSwgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOwogICAgIG1fcmVnRXhwTWF0
Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1h
dGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9h
cnJheVByb3RvdHlwZS5nZXQoKSkpOwogCkBAIC00MTAsNiArNDExLDcgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBK
U0FycmF5IGFsbG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZy
b20KICAgICAvLyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMgU2xv
d1B1dC4KICAgICBtX2FycmF5U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5
U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJh
eVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0
LmdldCgpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2JqZWN0cyB0aGF0IGhh
dmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xvdyBraW5kIG9mCiAgICAgLy8gaW5k
ZXhlZCBzdG9yYWdlLgpAQCAtNDg1LDYgKzQ4Nyw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1l
U2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FyZ3Vt
ZW50c1N0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlT
dHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0
dXJlV2l0aEFycmF5U3RvcmFnZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
YXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9ib29sZWFuT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25hbWVTY29wZVN0cnVjdHVyZTsKICAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcmd1bWVudHNTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmU7IC8vIFRoaXMgZ2V0cyBzZXQgdG8g
bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBh
IGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0
dXJlV2l0aEFycmF5U3RvcmFnZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJl
Rm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCiAgICAg
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0Owog
ICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmU7
CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0
cnVjdHVyZTsKQEAgLTI2Nyw3ICsyNjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3Ry
dWN0dXJlKiBuYW1lU2NvcGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25hbWVTY29wZVN0
cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFyZ3VtZW50c1N0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0
cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5U3RydWN0dXJl
LmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UuZ2V0
KCk7IH0KICAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSB7IHJldHVybiAm
bV9hcnJheVN0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVjdHVy
ZVdpdGhBcnJheVN0b3JhZ2UoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0
b3JhZ2U7IH0KICAgICAgICAgU3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0
cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUq
IGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrRnVu
Y3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAgLTQ3OSw3ICs0ODIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGluaXRp
YWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA/IGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgOiBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
KCksIGluaXRpYWxMZW5ndGgpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1
Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCArMTMxLDQwIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNl
OworICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGFy
Z2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgY3VycmVu
dFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIEFTU0VS
VChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVh
ZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgewotICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgKGN1
cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGNv
dW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFw
KQogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGls
ZSAoY291bnQtLSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNv
dXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fYnV0dGVyZmx5
ID0gbmV3QnV0dGVyZmx5OwpAQCAtMTU4LDYgKzE3NCw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgCiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5
IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+Y29udGlndW91cygpLCBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmIChidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKQEAgLTIzNCw2ICsyNTMsMjAgQEAg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhp
c09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5sZW5ndGgoKSkKQEAgLTM1MSw2ICszODQsMTYgQEAgdm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5OworICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbcHJvcGVydHlOYW1lXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0
LCB2YWx1ZSk7CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKHByb3BlcnR5
TmFtZSArIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
ewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CkBAIC00NDMsNiArNDg2LDExIEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmVudGVyRGljdGlvbmFyeUkKIHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAvLyBOT1RFOiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50
LCBhcyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNvbnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQor
ICAgICAgICAvLyB0aGlzIGNhc2UgaWYgd2UgZXZlciBjYXJlZC4KKyAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0
YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhp
c3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNDY1LDYgKzUxMywyNCBAQCB2b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9m
SW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0KCktPmhhdmVBQmFkVGltZShnbG9iYWxEYXRhKTsK
IH0KIAorV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRp
Z3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
QVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5
cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRU
eXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOworICAgIEFTU0VSVCghc3RydWN0
dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgIEFTU0VSVCghaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5n
dGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
LCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgodmVjdG9yTGVuZ3RoKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0
ZUNvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHks
IG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwor
fQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkK
IHsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKQEAgLTQ4MCw3ICs1NDYsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJh
eVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7Ci0gICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEluZGV4aW5n
VHJhbnNpdGlvbigpKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUo
KS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKICAgICBzZXRCdXR0ZXJmbHko
Z2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC00OTAsMTYgKzU1Niw5NiBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVJbml0aWFsQXJyCiAgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAw
LCBCQVNFX1ZFQ1RPUl9MRU4pOwogfQogCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK3sKKyAg
ICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVTaXplKCk7CisgICAgCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIDAsIHByb3Bl
cnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5ndGgpKTsK
KyAgICAKKyAgICBtZW1jcHkoCisgICAgICAgIG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdl
KCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgcHJvcGVydHlTaXplICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBuZXdTdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgobmVl
ZGVkTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5zZXRMZW5ndGgocHVibGljTGVuZ3RoKTsKKyAg
ICBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgIG5ld1N0b3JhZ2UtPm1faW5k
ZXhCaWFzID0gMDsKKyAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBwdWJsaWNMZW5ndGg7IGktLTspIHsKKyAgICAgICAgSlNWYWx1
ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKCF2
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IrKzsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZs
eSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3U3RvcmFnZTsKK30KKworQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAg
IHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9u
KCkpOworfQorCitXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpTT2JqZWN0OjplbnN1cmVDb250aWd1
b3VzU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBzdHJ1
Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1
cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJz
ZSgpKTsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmco
KSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEpOworICAgICAgICAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3Rv
cmFnZShnbG9iYWxEYXRhKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKworQnV0dGVyZmx5KiBKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSktPmJ1
dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgp
KSkKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSktPmJ1dHRlcmZseSgpOworICAgICAgICBy
ZXR1cm4gQnV0dGVyZmx5Ojpmcm9tQ29udGlndW91cyhjcmVhdGVJbml0aWFsQ29udGlndW91cyhn
bG9iYWxEYXRhLCAwKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CkBAIC01MDcsNiArNjUz
LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIHdheSBt
b3JlIGVmZmljaWVudCwgaWYgd2UgY2FyZWQuCisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgCiAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJu
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIApAQCAt
NTI2LDYgKzY3NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
CiB2b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlU2xvd1B1
dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9TbG93UHV0
QXJyYXlTdG9yYWdlKTsKQEAgLTU2OSw4ICs3MjQsNyBAQCB2b2lkIEpTT2JqZWN0OjpzZXRQcm90
b3R5cGUoSlNHbG9iYWxEYXRhCiAgICAgaWYgKHNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIG5ld1N0cnVj
dHVyZSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSwgbmV3U3RydWN0dXJlKTsKKyAgICBzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNo
ZWNrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03MDQs
NiArODU4LDE0IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0MKICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAg
ICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTg3
Nyw2ICsxMDM5LDE3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoK
ICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICB1bnNp
Z25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYg
KCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAg
CkBAIC0xMjY2LDYgKzE0MzksMzUgQEAgYm9vbCBKU09iamVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0
UHV0QnlJbgogICAgIHJldHVybiBhc09iamVjdChwcm90b3R5cGVWYWx1ZSktPmF0dGVtcHRUb0lu
dGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoZXhlYywgdGhpcywgaSwgdmFsdWUs
IHNob3VsZFRocm93KTsKIH0KIAordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3Bh
cnNlKCkpOworICAgIAorICAgIC8vIEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVp
dGhlciBncmVhdGVyIHRoYW4gdGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgorICAg
IC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3RoLgorICAgIEFTU0VSVChpID49IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIGlmIChpID49IE1BWF9BUlJBWV9J
TkRFWCAtIDEKKyAgICAgICAgfHwgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAg
ICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgY291bnRFbGVtZW50c0luQ29udGln
dW91cyhtX2J1dHRlcmZseSkpKSkgeworICAgICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOworICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5wdXRF
bnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaSA+PSBh
cnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpOworICAgICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVu
Z3RoKGkgKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuc3VyZUNvbnRpZ3Vv
dXNMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpOworCisgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwpAQCAtMTM0OCwxNyArMTU1MCwyOSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
ICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhp
bmdTaG91bGRCZVNwYXJzZSgpKSB7Ci0gICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3Vy
ZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxE
YXRhKSk7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csCisg
ICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKLSAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgaWYgKGkgPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUs
IHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVk
c1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0
aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAg
ICAgCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShn
bG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0g
ICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMzg0LDggKzE1OTgsMTAgQEAgdm9pZCBK
U09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGly
ZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBp
IHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3Vy
cmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoYXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAg
ICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAg
ICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKIApAQCAtMTQ2NywxNCArMTY4MywzMiBA
QCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgCiAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzogewotICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8
IGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2Rl
LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
Z2xvYmFsRGF0YSkpOwotICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkg
fHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAs
IDApKTsKLSAgICAgICAgCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFy
cmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkg
KyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAg
ICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpIHsKKyAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUs
CisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA+
PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAg
IGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgMCwgMCkpOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVl
ZHNTbG93UHV0SW5kZXhpbmcoKSkgeworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5n
dGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKys7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewor
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIH0K
KyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0
cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtMTQ5OSwxMiArMTczMyw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6Omdl
dE5ld1YKICAgICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVh
c2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAg
IC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAg
IC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5l
d0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGlu
dGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3Ro
ICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBp
bmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVu
Z3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5n
dGgpOwpAQCAtMTUyNCw5ICsxNzUzLDEwIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmpl
Y3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0g
MDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
OwotICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgp
OworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1MzUsNiArMTc2NSwxNiBA
QCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgcmV0dXJuIGdl
dE5ld1ZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7CiB9
CiAKK3Vuc2lnbmVkIEpTT2JqZWN0Ojpjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZs
eSogYnV0dGVyZmx5KQoreworICAgIHVuc2lnbmVkIG51bVZhbHVlcyA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBp
ZiAoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICBudW1WYWx1ZXMrKzsK
KyAgICB9CisgICAgcmV0dXJuIG51bVZhbHVlczsKK30KKwogYm9vbCBKU09iamVjdDo6aW5jcmVh
c2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5n
dGgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVy
bmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZh
bHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKQEAgLTE1NDMsNiArMTc4MywxMCBAQCBib29sIEpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIAorICAg
IGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAmJiAhaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBz
dG9yYWdlLT5tX2luZGV4QmlhczsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKTsKQEAgLTE1NzQsNiArMTgxOCwyMiBAQCBib29sIEpTT2JqZWN0Ojpp
bmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNP
YmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5E
RVgpOworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkpOworICAgIEFTU0VSVChsZW5ndGggPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKAorICAgICAgICBs
ZW5ndGggPDwgMSwKKyAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisgICAgbV9i
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwK
KyAgICAgICAgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSwKKyAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7
CisgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworfQor
CiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NF
UlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTYwMiw2ICsxODYyLDE3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IodmFsdWUsIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDgsOCArMTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKQEAgLTE2MSw4ICsxNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9C
TEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMjA3LDYgKzIwOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkg
JiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MjY3LDkgKzI3MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCkBAIC0yODUsOCArMjkyLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yOTYsMTUgKzMwNCwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJbmRl
eFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAg
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICAgICAgKytz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+
PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChpICsgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHguc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzEsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwg
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgICAgIEFT
U0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwpAQCAtMzMxLDYgKzM1Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CkBAIC0zNDQsNiArMzY3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKQEAgLTU0MSw2ICs1NjUsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIC8vIGZvby0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9u
SG9sZSguLi4pOwogICAgICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhv
bGVGb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIAorICAgICAg
ICAvLyBSZXR1cm5zIDAgaWYgY29udGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0g
ZWl0aGVyIGJlY2F1c2UKKyAgICAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBvciBi
ZWNhdXNlIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1
b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3Jh
Z2UuIFVzZQogICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlv
bnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQogICAgICAgICAvLyBvYmplY3QgdG8gYmUg
Y29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKQEAg
LTU1Myw2ICs1ODcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzSW5kZXhlZFByb3Bl
cnRpZXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJl
SW5kZXhlZFN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAKICAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQpAQCAtNjE1LDExICs2NTcs
MTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJik7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29u
dmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAg
ICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9v
bCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZvaWQg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0
b3JhZ2UqKTsKIAogICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CkBAIC02MzAsNiArNjc3LDU2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xv
YmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRC
eUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBz
ZXRJbmRleFF1aWNrbHkgdG8gc3VjY2VlZCBhbmQgeW91J3JlIHN1cmUgdGhhdAorICAgICAgICAv
LyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4KKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKKyAgICAg
ICAgICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93
KGdsb2JhbERhdGEsIGxlbmd0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVy
Zmx5KTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGU+CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogaW5kZXhpbmdEYXRhKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAg
ICB1bnNpZ25lZCByZWxldmFudExlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbigKKyAg
ICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkBAIC02NjQsNyArNzYxLDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAgICAg
ICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBBcnJh
eVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IEJ1dHRlcmZseSogZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOwogICAg
ICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24g
MTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0
aXZlQnlJbmRleChFeGVjCiAKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsK
LSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzaXplID0gMjU2OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogCiAg
ICAgaWYgKCEqdGhpcykKQEAgLTIxMyw5ICsyMTMsMTIgQEAgY2hhciogSlNWYWx1ZTo6ZGVzY3Jp
cHRpb24oKSBjb25zdAogICAgICAgICB1LmFzRG91YmxlID0gYXNEb3VibGUoKTsKICAgICAgICAg
c25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5h
c1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5kaWYKLSAg
ICB9IGVsc2UgaWYgKGlzQ2VsbCgpKQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6
ZSwgIkNlbGw6ICVwIiwgYXNDZWxsKCkpOwotICAgIGVsc2UgaWYgKGlzVHJ1ZSgpKQorICAgIH0g
ZWxzZSBpZiAoaXNDZWxsKCkpIHsKKyAgICAgICAgc25wcmludGYoCisgICAgICAgICAgICBkZXNj
cmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwICglcDogJXMsICVzKSIsCisgICAgICAgICAgICBhc0Nl
bGwoKSwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNz
SW5mbygpLT5jbGFzc05hbWUsCisgICAgICAgICAgICBpbmRleGluZ1R5cGVUb1N0cmluZyhhc0Nl
bGwoKS0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOworICAg
IH0gZWxzZSBpZiAoaXNUcnVlKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXpl
LCAiVHJ1ZSIpOwogICAgIGVsc2UgaWYgKGlzRmFsc2UoKSkKICAgICAgICAgc25wcmludGYoZGVz
Y3JpcHRpb24sIHNpemUsICJGYWxzZSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcg
QEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICNpZiAhRU5BQkxFKFlBUlJfSklUKQogICAg
IHVzZVJlZ0V4cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYKLQorICAgIAogICAgIC8vIERvIHJhbmdl
IGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6
CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhy
ZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICBBU1NFUlQodGhyZXNob2xkRm9y
T3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDExICszMjMsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFu
eU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9u
IFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3Ry
dWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJ
bmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGlmIChhbnlPYmpl
Y3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCkt
PmlzSGF2aW5nQUJhZFRpbWUoKSkKKyAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVy
Y2VwdEluZGV4ZWRBY2Nlc3NlcygpCisgICAgICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmlu
Z0FCYWRUaW1lKCk7Cit9CisKK05vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dl
c3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdAoreworICAgIGlmIChuZWVkc1Nsb3dQ
dXRJbmRleGluZygpKQogICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdl
OwogICAgIAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTU0LDcgKzE1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9v
bCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CiAg
ICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhpbmdU
cmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoKSBj
b25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFn
ZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAg
ICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEs
IHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAx
MzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVz
ZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KIC8v
IElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkg
c2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVD
b250aWd1b3VzLAogICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlLAogICAgIEFsbG9jYXRlU2xvd1B1
dEFycmF5U3RvcmFnZSwKICAgICBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC01Nywx
MiArNTgsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eQogaW5s
aW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5v
blByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewogICAgIHN3aXRjaCAodHJhbnNpdGlv
bikgeworICAgIGNhc2UgQWxsb2NhdGVDb250aWd1b3VzOgorICAgICAgICBBU1NFUlQoIShvbGRU
eXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKSk7CisgICAg
ICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQ29udGlndW91czsKICAgICBjYXNlIEFsbG9jYXRlQXJy
YXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAg
ICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzQXJyYXlTdG9yYWdl
OwogICAgIGNhc2UgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4g
b2xkVHlwZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlw
ZSAmIH5IYXNDb250aWd1b3VzKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBT
d2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVChvbGRUeXBlICYgSGFz
QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIEhhc0NvbnRpZ3VvdXMp
KTsKICAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCBIYXNTbG93
UHV0QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAg
cmV0dXJuIG9sZFR5cGUgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0
cmFzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgYm9vbCBoYXNUd29PCiAgICAgcmV0dXJuICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVl
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVE
aXZpZGVkQnlUd28oVCB2YWx1ZSkKK3sKKyAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50
IHRvOgorICAgIC8vICAgKHZhbHVlICogMyArIDEpIC8gMjsKKyAgICAvLyBvcjoKKyAgICAvLyAg
ICh1bnNpZ25lZCljZWlsKHZhbHVlICogMS41KSk7CisgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBw
cm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4g
MSkgKyAodmFsdWUgJiAxKTsKK30KKwogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIo
UlZDVCkgJiYgIU9TKFNPTEFSSVMpCiB1c2luZyBzdGQ6OmlzZmluaXRlOwogI2lmICFDT01QSUxF
Ul9RVUlSSyhHQ0MxMV9HTE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167244</attachid>
            <date>2012-10-04 21:56:07 -0700</date>
            <delta_ts>2012-10-06 15:32:23 -0700</delta_ts>
            <desc>the patch, possibly</desc>
            <filename>holycontiguous_6.patch</filename>
            <type>text/plain</type>
            <size>306321</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMyBA
QAorMjAxMi0xMC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJ
bmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJs
ZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFs
SW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVy
T2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVB
bHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6
REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUp
OgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAgKEpTQzo6
REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkRGRzo6
cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hl
Y2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0
aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBp
bGF0aW9uSW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxh
dGlvbkluZm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpj
aG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAocHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnB1YmxpY0xlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6CisgICAgICAg
ICogcnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
Omhhc0NvbnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzaG9ydENvbXBhY3RlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5Lmg6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleFdpdGhvdXRBdHRyaWJ1dGVzV2hpbGVDb252ZXJ0
aW5nQ29udGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNl
SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5k
ZXhlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXR0ZW1wdFRvQ29udmVydFRv
Q29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphdHRlbXB0VG9Db252ZXJ0QXJy
YXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmF0dGVtcHRU
b0NvbnZlcnRDb250aWd1b3VzQXJyYXlTdG9yYWdlVG9Db250aWd1b3VzKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bmVlZHNTbG93
UHV0SW5kZXhpbmcpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorCiAy
MDEyLTEwLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQXJy
YXkuc3BsaWNlIHNob3VsZCBiZSBmYXN0IHdoZW4gaXQgaXMgdXNlZCB0byByZW1vdmUgZWxlbWVu
dHMgb3RoZXIgdGhhbiB0aGUgdmVyeSBmaXJzdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2
ICs3Niw3IEBACiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENE
NEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRDNDE1RjZCNkJCMDAz
MkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNl
QXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBM
TEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYxM0Uw
NEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENv
bW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTYwMTVEMTU2
MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVBMTU2MTk4
QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsK
IAkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2
NSw2ICsxNjYsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0Mz
REIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8q
IERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi87IH07
CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VF
MDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTg0OCw2ICs4NTAsNyBAQAogCQkwRjBD
RDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VB
cnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkM0NTgx
NEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5kZXhpbmdUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENv
bW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25T
bG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNjAxNUExNTYxOThC
RjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAv
KiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC05MzgsNiArOTQxLDcgQEAKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1w
bGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRo
ID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdE
IC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMDgsNyArMjExMiw2
IEBACiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNw
cCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUu
aCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNr
LmNwcCAqLywKLQkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxi
YWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmggKi8sCiAJCQkJQkMwMkU5QjgwRTE4NDU0NTAwMEY5Mjk3IC8qIEdldHRlclNldHRl
ci5jcHAgKi8sCiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThBIC8qIEdldHRlclNldHRlci5o
ICovLApAQCAtMjExNiw2ICsyMTE5LDcgQEAKIAkJCQk5MzNBMzQ5QTAzOEFFN0M2MDA4NjM1Q0Ug
LyogSWRlbnRpZmllci5oICovLAogCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oICovLAogCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcg
LyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRp
YWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJ
bml0aWFsaXplVGhyZWFkaW5nLmggKi8sCkBAIC0yMjc0LDYgKzIyNzgsNyBAQAogCQkJCTE0QkZD
RTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywKIAkJCQkxNDIwQkU3QTEwQUE2
RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkx
MTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKKwkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDgwLDYgKzI0ODUsNyBAQAogCQkJCTBG
NjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLAogCQkJCTBGNjM5
NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLywKIAkJCQkwRjIxQzI3RTE0
QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovLAorCQkJCTBGODAyM0U5
MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKIAkJCQkwRjBCODNBRTE0QkNGNzE0
MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJCQkwRjBCODNBRjE0QkNGNzE0MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2
IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTI5NTksNiArMjk2NSw3IEBACiAJCQkJMEZC
N0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1By
b3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3Bl
Y2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTM1NjUsNiArMzU3Miw3IEBA
CiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERFNyAvKiBJbmRleGlu
Z1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8q
IFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlz
aW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikKKyAgICAgICAgdm9pZCBhcHBl
bmQoY29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2p1bXBz
LmFwcGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1fanVtcHMuc2l6ZSgpKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5
LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGp1bXAo
KSk7CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVCcmFuY2hUZXN0MzIoUmVz
dWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRy
dXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChicmFu
Y2hUZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2VuZGlmCiAKICAgICB2b2lkIGp1
bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5VmFsSW5mb19oCisj
ZGVmaW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbmRleGlu
Z1R5cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBKSVRBcnJheVN0b3JhZ2UgfTsK
KworaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBq
aXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sK
KyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIGNhc2UgQVJS
QVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gSklU
QXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJl
dHVybiBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0IEJ5VmFsSW5mbyB7CisgICAg
QnlWYWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUs
IGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1Bh
dGgpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIGJh
ZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisg
ICAgICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBUb0RvbmUpCisgICAgICAgICwg
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlv
bkp1bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsgLy8gVGhlIGFy
cmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5lIEpJVCBjb2RlLgorICAgIGlu
dDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93
UGF0aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOworfTsKKworaW5s
aW5lIHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgoQnlWYWxJbmZvKiBpbmZvKQor
eworICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBCeVZhbEluZm9faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAog
I2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNp
bmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgpAQCAtMjA5LDYgKzIx
MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9p
ZCByZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAgICAgCisgICAgICAgIEJ5VmFs
SW5mbyYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVkLCBnZXRC
eVZhbEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9z
LnNpemUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAKICAgICAgICAgQ2FsbExpbmtJ
bmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAg
ICAgICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3RydWN0dXJl
U3R1YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJl
U3R1YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9
CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9ieVZhbEluZm9z
Lmdyb3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnlWYWxJbmZvcygpIGNvbnN0
IHsgcmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAgICAgQnlWYWxJbmZvJiBieVZh
bEluZm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5mb3NbaW5kZXhdOyB9CiAKICAg
ICAgICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25lZCBnbG9iYWxSZXNvbHZlSW5z
dHJ1Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJJ
bmZvPiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9i
eVZhbEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2ZUluZm8+IG1fZ2xvYmFsUmVz
b2x2ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7
CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1fbWV0aG9kQ2FsbExpbmtJbmZv
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
YW1wbGluZ1Rvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1OSwxMiArODU5LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CiAg
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQ
T0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
QEAgLTkwOCw2ICs5MTMsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC05MTUsNiArOTIzLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgRWRnZSBjaGlsZDEgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJy
YXlNb2RlKCkpKSB7CkBAIC05MjQsMTEgKzkzMywxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Cisg
ICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgogICAgICAgICBjYXNlIElOX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9f
SE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTM2Nyw3ICsxMzgzLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOiAvLyBUaGVzZSBvbmx5
IGdldCBhIENoZWNrQXJyYXkgZm9yIEdldEFycmF5TGVuZ3RoCiAgICAgICAgICAgICAvLyBUaGlz
IGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2Fu
dCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1
bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTQxMCw5ICsxNDI4LDEwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAgY2Fz
ZSBBcnJheWlmeTogewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICAg
ICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGNs
b2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksOCArMzksMTQgQEAgQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFy
cmF5UHJvZmlsZSogcAogICAgICAgICByZXR1cm4gQXJyYXk6OlVucHJvZmlsZWQ7CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpX
cml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBkb24n
dCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSwgb3Igbm90LiBUaGlzIGlzIGEg
ZGVjZW50IGd1ZXNzLgorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91
c09yQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRvIGdvIHRv
IHNsb3cgcHV0IG1vZGUgb3Igbm90LiBXZSdyZSBndWVzc2luZyB0aGF0IHdlIGRvbid0IG5lZWQg
c2xvdyBwdXQuCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOworICAgIGNhc2UgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNh
ZmUgPyBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6Q29udGlndW91c1RvVGFpbCA6IEFycmF5OjpDb250aWd1b3VzKTsKKyAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJu
IG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChwcm9m
aWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwg
OiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk6
CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CiAgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkFycmF5U3RvcmFn
ZVRvSG9sZSA6IEFycmF5OjpBcnJheVN0b3JhZ2UpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgpAQCAtNTYsNiArNjIsMjAgQEAgQXJyYXk6
Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAgIGNhc2UgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3Jh
Z2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAg
aWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91
czsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIGlmIChhY3Rpb24g
PT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMo
KSkKKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3Rv
cmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6
CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKICAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtU
b0FycmF5U3RvcmFnZTsKQEAgLTE0NCw2ICsxNjQsMjIgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNr
ZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0
dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKICAgICAgICAgCisgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOgor
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1
b3VzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SGFzQ29udGlndW91cykKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKwogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6
CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CkBAIC0xNzAsNyArMjA2
LDggQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgICAgICAg
ICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGlu
Z1R5cGUoKSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkKICAg
ICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+
aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCi0gICAgY2FzZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgor
ICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgpAQCAtMjI1LDYgKzI2MiwyNCBAQCBjb25z
dCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9y
Y2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5n
IjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3Vv
dXMiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAi
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1
b3VzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOworICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMi
OworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAg
ICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOworICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAg
ICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIjsKICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsK
ICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6CkBAIC0yNDksMTAgKzMwNCwyMCBA
QCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVy
biAiUG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgogICAgICAgICByZXR1
cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2Ug
QXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkJsYW5rVG9Db250aWd1
b3VzIjsKICAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1
cm4gIkJsYW5rVG9BcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0
QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdl
IjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAg
ICAgICByZXR1cm4gIkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJDb250aWd1
b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzT3JBcnJh
eVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91
c09yQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJl
dHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDEzMDMxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDYgKzU0LDE1IEBAIGVudW0gTW9kZSB7CiAgICAgU3RyaW5nLAogICAgIAogICAgIC8v
IE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlz
IG5vbiBzaWRlLWVmZmVjdGluZy4KKyAgICBDb250aWd1b3VzLAorICAgIENvbnRpZ3VvdXNUb1Rh
aWwsCisgICAgQ29udGlndW91c091dE9mQm91bmRzLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXMs
CisgICAgQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzLAorICAgIFBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcywKICAgICBBcnJheVN0b3JhZ2UsCiAgICAgQXJyYXlTdG9yYWdlVG9I
b2xlLAogICAgIFNsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC02OCw4ICs3NywxNiBAQCBlbnVtIE1v
ZGUgewogICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCiAgICAg
CiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQgc3RvcmFnZSB3aGVyZSB0aGUg
Y2hlY2sgaXMgc2lkZS1lZmZlY3RpbmcuCisgICAgQmxhbmtUb0NvbnRpZ3VvdXMsCiAgICAgQmxh
bmtUb0FycmF5U3RvcmFnZSwKICAgICBCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZSwKKyAgICBC
bGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIAorICAgIC8vIE1vZGVzIHRoYXQg
aW5kaWNhdGUgcG9seW1vcnBoaWMgYXJyYXkgc3RvcmFnZS4gVGhlc2UgZG9uJ3QgYmVuZWZpdCBm
cm9tCisgICAgLy8gYW55IGNoZWNraW5nIG9yIHN0b3JhZ2UgQ1NFLgorICAgIENvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisg
ICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCiAgICAgCiAgICAg
QXJndW1lbnRzLAogICAgIEludDhBcnJheSwKQEAgLTg5LDYgKzEwNiwzMiBAQCBlbnVtIE1vZGUg
ewogLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0aGVtLgogCiAvLyBGaXJzdDog
aGVscGVycyBmb3Igbm9uLXNpZGUtZWZmZWN0aW5nIGNoZWNrcy4KKyNkZWZpbmUgTk9OX0FSUkFZ
X0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpD
b250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
OiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
VG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9V
U19NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOiAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
Q29udGlndW91cworI2RlZmluZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
VG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c1RvVGFpbAorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9E
RVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCiAjZGVmaW5lIE5PTl9BUlJBWV9BUlJB
WV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBBcnJheTo6QXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMDYs
MzMgKzE0OSw0OCBAQCBlbnVtIE1vZGUgewogI2RlZmluZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RF
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFSUkFZX1dJVEhf
QVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCiAjZGVmaW5lIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBBcnJheTo6QXJyYXlTdG9yYWdlVG9I
b2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKLSNkZWZpbmUgSU5fQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFSUkFZX1NUT1JB
R0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCiAjZGVmaW5lIFNM
T1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBB
cnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICBcCiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
CiAjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgIFwKLSAgICBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAg
ICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKIAogLy8gTmV4dDogaGVscGVycyBmb3Igc2lkZS1l
ZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVMgXAotICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAg
ICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzCisjZGVmaW5lIEVGRkVDVEZV
TF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgIFwKKyAgICBBcnJheTo6
QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNh
c2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKICAgICBFRkZFQ1RGVUxfTk9OX0FS
UkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUgU0xPV19QVVRfRUZGRUNURlVMX0FSUkFZ
X1NUT1JBR0VfTU9ERVMgIFwKKyNkZWZpbmUgU0xPV19QVVRfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVMgICAgICAgICAgICAgXAogICAgIEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3Rv
cmFnZQorI2RlZmluZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UKKyNk
ZWZpbmUgQUxMX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX0VGRkVDVEZVTF9NT0RFUworCisvLyBG
aW5hbGx5OiBoZWxwZXJzIGZvciBwb2x5bW9ycGhpYyBhcnJheSBhY2Nlc3Nlcy4KKyNkZWZpbmUg
UE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOiAgICAg
ICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5
U3RvcmFnZQorI2RlZmluZSBBTExfUE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgUE9MWU1PUlBISUNfRUZGRUNURlVMX01PREVTOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTCiAKIEFycmF5OjpN
b2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VT
YWZlKTsKIApAQCAtMTQ1LDggKzIwMywxMCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJy
YXk6Ok1vZGUpOwogaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBTExfQ09OVElH
VU9VU19NT0RFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTYsNyArMjE2LDkg
QEAgaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZAogaW5saW5lIGJvb2wg
bW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzoKICAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2Niw2ICsyMjgsOSBAQCBpbmxpbmUg
Ym9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFyCiBpbmxpbmUgYm9vbCBpc0luQm91bmRz
QWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkg
eworICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBDT05USUdV
T1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6
CiAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTE4NCwxOCArMjQ5LDU1IEBAIGlubGluZSBib29sIGlz
U2xvd1B1dEFjY2VzcyhBcnJheTo6TW9kZSAKICAgICB9CiB9CiAKK2lubGluZSBib29sIG1heVN0
b3JlVG9UYWlsKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgeworICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgIGNhc2UgT1VUX09G
X0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdV
T1VTX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CiBpbmxpbmUgYm9vbCBtYXlTdG9yZVRvSG9sZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9N
T0RFUzoKICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2lubGluZSBib29sIG1vZGVJc1BvbHltb3JwaGljKEFycmF5OjpNb2RlIG1v
ZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9E
RVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiB9CiAKK2lubGluZSBib29sIHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1
b3VzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGFycmF5TW9k
ZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2lubGluZSBib29sIHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2UoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQoreworICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9y
cGhpYyhhcnJheU1vZGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogaW5saW5lIGJvb2wgY2Fu
Q1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKQEAgLTIwNCw2ICszMDYsNyBAQCBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5
OjpNb2RlIGFyCiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQ
SElDX01PREVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yNDksNyArMzUyLDExIEBAIGlubGluZSBib29sIG1vZGVTdXBwb3J0
c0xlbmd0aChBcnJheTo6TW8KICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2Ug
QXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgIGNhc2UgTk9O
X0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6
Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTksNyArMzY2LDggQEAgaW5saW5l
IGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogaW5saW5lIGJvb2wgYmVuZWZpdHNG
cm9tU3RydWN0dXJlQ2hlY2soQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICBj
YXNlIEFycmF5OjpVbmRlY2lkZWQ6CiAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6CkBAIC0yNzMsNyArMzgxLDcgQEAgaW5saW5lIGJvb2wgYmVu
ZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQQogaW5saW5lIGJvb2wgaXNFZmZlY3RmdWwoQXJyYXk6
Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3NCw2ICsxNTc0LDggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFy
cmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgx
KSkpOwpAQCAtMTU5Nyw2ICsxNTk5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hv
bGU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVBvcCA9IGFk
ZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTMwMzE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1OSw5ICszNTksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGZvciBh
IHN0cnVjdHVyZSBjaGFuZ2Ugb3IgYSBwdXQgdG8gcHJvcGVydHkgc3RvcmFnZSB0byBhZmZlY3QK
ICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0QnlWYWwuCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEFycmF5UHVzaDoKLSAgICAgICAgICAgICAgICAvLyBBIHB1c2gg
Y2Fubm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5nIGVsZW1lbnRzIGluIHRoZSBhcnJheS4K
LSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CkBAIC0xMjIyLDkgKzEyMTksNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFB1dEJ5VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgICAgICBpZiAoaXNBY3Rpb25hYmxlTXV0YWJsZUFy
cmF5U3BlY3VsYXRpb24obV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAg
ICAgICAmJiBtX2dyYXBoW2NoaWxkMl0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAg
ICAgICAgICAgJiYgIW1fZ3JhcGhbY2hpbGQxXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkg
eworICAgICAgICAgICAgaWYgKGNhbkNTRVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKICAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZ2V0QnlWYWxMb2FkRWxpbWluYXRp
b24oY2hpbGQxLmluZGV4KCksIGNoaWxkMi5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBpZiAo
bm9kZUluZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJh
eU1vZGUoYXJyYXlNb2RlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IHN0
b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0
ci0+Y2hpbGQxKCkuaW5kZXgoKSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlUHRyLT5zaG91bGRH
ZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShh
cnJheU1vZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCks
IE5vTm9kZSwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKTsK
ICAgICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIApAQCAtMTM3LDE3ICsxMzcsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwg
Mik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5UHVzaDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJh
dGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAg
ICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMSk7CisgICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIDEpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKQEAgLTMy
Nyw3ICszMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxk
MV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMl0ucHJl
ZGljdGlvbigpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRp
b24oY2hpbGQxLCAzKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBj
aGlsZDIsIDMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAgICAgICAgCkBAIC0zNzUsMTQgKzM3NSwxNiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICAKLSAgICBO
b2RlSW5kZXggY2hlY2tBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9k
ZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKKyAgICBOb2Rl
SW5kZXggY2hlY2tBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hl
Y2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0
cnVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1vZGVJc1NwZWNpZmljKGFycmF5TW9kZSkpOwog
ICAgICAgICAKICAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwogCiAgICAgICAgIGlmIChpc0Vm
ZmVjdGZ1bChhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICBOb2RlIGFycmF5aWZ5KEFycmF5aWZ5
LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICAgICAgQVNT
RVJUKGluZGV4ICE9IE5vTm9kZSk7CisgICAgICAgICAgICBtX2dyYXBoLnJlZihpbmRleCk7Cisg
ICAgICAgICAgICBOb2RlIGFycmF5aWZ5KEFycmF5aWZ5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJy
YXlNb2RlKSwgYXJyYXksIGluZGV4KTsKICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBP
bmNlIGJlY2F1c2UgaXQncyB1c2VkIGFzIGEgYnV0dGVyZmx5LgogICAgICAgICAgICAgYXJyYXlp
ZnkucmVmKCk7IC8vIEFuZCB0d2ljZSBiZWNhdXNlIGl0J3MgbXVzdC1nZW5lcmF0ZS4KICAgICAg
ICAgICAgIE5vZGVJbmRleCBhcnJheWlmeUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MTUs
MTQgKzQxNywxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gYWRkTm9kZShOb2RlKEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJh
eSksIHNob3VsZEdlbmVyYXRlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBibGVzc0FycmF5T3Bl
cmF0aW9uKEVkZ2UgYmFzZSwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQorICAgIHZvaWQgYmxl
c3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIHVuc2lnbmVkIHN0b3JhZ2VD
aGlsZElkeCkKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJl
Zm9yZUZpeHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAg
IE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgIAotICAg
ICAgICBpZiAobm9kZVB0ci0+YXJyYXlNb2RlKCkgPT0gQXJyYXk6OkZvcmNlRXhpdCkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDogewogICAgICAgICAgICAgTm9kZSBmb3JjZUV4aXQoRm9yY2VPU1JFeGl0LCBu
b2RlUHRyLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIGZvcmNlRXhpdC5yZWYoKTsKICAgICAg
ICAgICAgIE5vZGVJbmRleCBmb3JjZUV4aXRJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDMw
LDE1ICs0MzMsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVu
ZChtX2luZGV4SW5CbG9jaywgZm9yY2VFeGl0SW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1vZGVJc1NwZWNpZmljKG5vZGVQdHIt
PmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lk
ZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5v
ZGVQdHItPmNvZGVPcmlnaW4sIGJhc2UuaW5kZXgoKSk7Ci0gICAgICAgIGlmIChzdG9yYWdlID09
IE5vTm9kZSkKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBBTExf
UE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAg
ICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxk
SWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0
ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpLCBpbmRleC5pbmRleFVuY2hlY2tlZCgpKTsKKyAg
ICAgICAgICAgIGlmIChzdG9yYWdlID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBp
bGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVk
Z2UmIGVkZ2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3OSw4ICs0NzksMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNl
IEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTU2LDkgKzU1Niw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5n
IHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4
KSk7Ci0gICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVj
LCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOworICAgICAgICBh
cnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTczLDkg
KzU3MSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAg
IGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlm
IGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFh
cnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7Ci0gICAgICAgIGFycmF5LT5tZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSksIGZhbHNlKTsKKyAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUoZXhl
YywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCkBAIC02MDEsNiArNTk3LDE2IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFy
cmF5LT5wb3AoZXhlYykpOwogfQogICAgICAgICAKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNB
cnJheSogYXJyYXkpCit7CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEs
IGV4ZWMpOworICAgIAorICAgIGFycmF5LT5idXR0ZXJmbHkoKS0+c2V0UHVibGljTGVuZ3RoKGFy
cmF5LT5idXR0ZXJmbHkoKS0+cHVibGljTGVuZ3RoKCkgKyAxKTsKKyAgICAKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3AoZXhlYykpOworfQorICAgICAgICAKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1bWVudCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzA5LDYgKzEzMTUsMTQgQEAgY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQor
eworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVDb250aWd1
b3VzKGdsb2JhbERhdGEpKTsKK30KKwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1
cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQogewogICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzMTcs
NiArMTMzMSwxNiBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEpKTsKIH0KIAorY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1
cmVDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0LCBpbnQzMl90IGluZGV4KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9i
YWxEYXRhLCBleGVjKTsKKworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID49
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihvYmplY3QtPmVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9iamVjdC0+ZW5zdXJlSW5kZXhlZFN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworfQorCiBkb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25J
bnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkoKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU1MpKEV4ZWNTdGF0ZSos
IHNpemVfdCwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAo
KkpfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci10eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RJKShFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGlu
dDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpOwogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVopKEV4
ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRVpJY2ZaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBJbmxpbmVDYWxs
RnJhbWUqLCBpbnQzMl90KTsKQEAgLTExMCw2ICsxMTAsNyBAQCB0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwogdHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVj
dCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlv
bl9FT1opKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXpl
X3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4
ZWNTdGF0ZSosIHNpemVfdCk7CiAKQEAgLTE0OCw2ICsxNDksNyBAQCB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUq
LCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdU
Rl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhw
RXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5B
TDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVy
KikgV1RGX0lOVEVSTkFMOwpAQCAtMTkyLDcgKzE5NCw5IEBAIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQWxsb2NhdGVQcm8KIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXpl
X3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25F
bnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCopOwor
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzT3JBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKIAogLy8gVGhpcyBtZXRob2QgaXMg
dXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlv
biwgd2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxz
IG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTYsNyArMjU2LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSog
ZQogICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgc3R1
YkppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKLSAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0
b3JhZ2UpKSk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzQ29udGlndW91cykpKTsKICAgICAgICAgCiAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
MzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQ1LDYgKzIwNDUsMTEzIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9CiB9CiAKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2Rl
JiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcg
cmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZykKK3sKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7CisgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZ1JlZywg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgCisgICAgcmV0dXJu
IHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHByb3Bl
cnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFRhZ1JlZywgR1BSUmVnIHJl
c3VsdFBheWxvYWRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xl
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWdSZWcsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91
bmRzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgIHJldHVybiBzbG93Q2FzZXM7
Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywg
R1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVRhZ1JlZywgR1BSUmVnIHZhbHVlUGF5bG9h
ZFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpOwor
ICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAg
aWYgKCFtYXlTdG9yZVRvVGFpbChhcnJheU1vZGUpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0luQm91bmRz
QWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIHNsb3dDYXNlcyk7CisgICAgICAgIAorICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgbV9q
aXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworCisgICAgICAgIGluQm91bmRzLmxp
bmsoJm1faml0KTsKKyAgICB9CisKKyAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7
CisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgCisgICAg
aWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCgpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5
VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFn
ZVJlZywgR1BSUmVnIHZhbHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQoreworICAg
IEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlz
SW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAg
ZWxzZQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAg
IC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9u
dW1WYWx1ZXNJblZlY3Rvci4KKyAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsK
KyAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBl
eGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBj
b3VudCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAg
ICAvLyBwcm9maWxpbmcuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAg
ICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2Rl
IHBhdGgsIHdlIHdvdWxkIGludmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4g
QnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3
ZSdyZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgp
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRv
IGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJhZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CisgICAg
ICAgIH0KKyAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisg
ICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZTMyKHZh
bHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSk7CisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgCisgICAgcmV0dXJuIHNs
b3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwpAQCAtMjU2NSw2ICsyNjcyLDU1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIElOX0JP
VU5EU19DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFRhZy5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQu
Z3ByKCkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBj
YXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZG
RUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdFJlZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQ
YXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAg
Y29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3Rv
cmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50
LAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJ
Tl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI1ODcs
NiArMjc0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjYyNCw2ICsyNzgxLDU2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzog
eworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMp
OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0
b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0UmVn
KTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFy
cmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNv
bXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNv
bXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3Rv
cmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBk
b25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxs
VGhyb3VnaCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgYmFzZVJlZywgcHJvcGVydHlSZWcp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcs
IHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzE0LDYg
KzI5MjEsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgorICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BSUmVn
IHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVQ
YXlsb2FkUmVnID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAobm9kZS5vcCgp
ID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUg
dG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAg
ICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVRhZ1JlZywg
dmFsdWVQYXlsb2FkUmVnKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAg
IHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICBz
dG9yYWdlLnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5l
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1Jl
ZywgdmFsdWVQYXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hp
bGQzKTsKQEAgLTI3NDMsNjAgKzI5OTksNzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhub2RlLmFycmF5
TW9kZSgpKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5
TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2Ug
aWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAgICAgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgICAgICAgICAgICAg
IGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMg
Y29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFi
b3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkg
aGFwcGVucyBpZiB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBh
IGJhZCB0aW1lLgotICAgICAgICAgICAgICAgICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0
aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHBy
b3BlcnR5UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMg
PQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
VGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAg
ICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAg
ICAgICAgIHN0b3JhZ2UudXNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0
byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIAotICAgICAgICAgICAg
aWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQ
dXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2Vz
LmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFn
UmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxM
X1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1
dEJ5VmFsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFn
UmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVn
ID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAg
ICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhh
c0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3Jh
Z2VSZWcpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3Vv
dXNQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVS
ZWcsIHRlbXBvcmFyeVJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHlt
b3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBk
b25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxU
aHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0
b3JhZ2VSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChu
b2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFy
eVJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlz
U2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOworCisgICAgICAgICAgICBiYXNlLnVzZSgp
OworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsK
KworICAgICAgICAgICAgLy8gRklYTUU6IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9yIG5vdCB3
ZSdyZSBpbiBzdHJpY3QgbW9kZSBzaG91bGQgYmUgbWFkZQorICAgICAgICAgICAgLy8gYmFzZWQg
b24gdGhlIGlubGluZSBjYWxsIGZyYW1lLCBub3QgdGhlIG1hY2hpbmUgY29kZSBibG9jay4KKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJh
eUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcs
IHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTE5LDI1ICszMTk0LDU0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIC8vIFJlZnVzZSB0byBo
YW5kbGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNs
b3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQ
YXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgc3RvcmFnZUdQUik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bkFycmF5UHVzaCwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUiksIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgIAorICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAg
ICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3Rl
ZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxl
bmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VH
UFIpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIpLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNl
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUiksIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIp
KTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKQEAgLTI5NDgsNDYgKzMyNTIsODggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVUYWco
dGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZVBheWxvYWQodGhpcyk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2
YWx1ZVRhZy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlUGF5
bG9hZC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAg
ICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoCisgICAgICAgICAgICAgICAgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZUdQUiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLAorICAgICAgICAgICAgICAgIHZh
bHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksCisgICAgICAgICAgICAgICAgdmFsdWVQYXlsb2FkR1BSKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KTsKKworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
c2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlzLAor
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZp
bmVkKCkudGFnKCkpLCB2YWx1ZVRhZ0dQUiwKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnBheWxvYWQoKSksIHZhbHVlUGF5bG9h
ZEdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3Bl
cmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewor
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CisgICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CisKKyAgICAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAg
IAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7Ci0gICAg
ICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKKyAgICAgICAgICAgIHNldFVuZGVmaW5lZENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3Jh
Z2VMZW5ndGhHUFIpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHZhbHVlVGFnR1BSKTsKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSksIHZhbHVlUGF5bG9hZEdQUik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2
YWx1ZVRhZ0dQUik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWVQYXlsb2FkR1BS
KTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSk7CiAKLSAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpLCB2YWx1ZVRhZ0dQUikpOworICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpLCB2YWx1ZVRhZ0dQUikpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
IAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKLSAgICAgICAgICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkudGFnKCkpLCB2YWx1ZVRhZ0dQUiwKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCku
cGF5bG9hZCgpKSwgdmFsdWVQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAgICAg
ICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkudGFnKCkpLCB2YWx1ZVRhZ0dQUiwK
KyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVm
aW5lZCgpLnBheWxvYWQoKSksIHZhbHVlUGF5bG9hZEdQUikpOwogICAgICAgICAKLSAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLAotICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBiYXNlR1BSKSk7
CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25B
cnJheVBvcCwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZh
bHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVl
VGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTA5LDEwICsyMTA5LDExMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgfQogfQogCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywg
R1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZykK
K3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpKTsKKyAgICAKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJS
ZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQorewor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0UmVnKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoaG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5v
ZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywg
R1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBhcnJh
eU1vZGUgPSBub2RlLmFycmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgaWYgKCFtYXlTdG9yZVRvVGFpbChhcnJheU1vZGUp
KSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIHNs
b3dDYXNlcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih0ZW1wUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKTsKKworICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisgICAgfQor
CisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAg
IAorICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3Jh
Z2VQdXRCeVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVn
IHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7CisgICAgQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBpZiAoaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICBlbHNl
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOworCisgICAgLy8g
Q2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZh
bHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgeworICAg
ICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQs
IHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50
IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0CisgICAgICAgIC8v
IHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICBpZiAoaXNTbG93
UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBz
dHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxk
IGludmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5
IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQorICAgICAgICAg
ICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdo
dCBiZSBncm93aW5nIHRoZSBhcnJheTsgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcsIHRlbXBSZWcpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMih0ZW1wUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0KKyAg
ICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgLy8gU3Rv
cmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9w
KCk7Ci0KKyAgICAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAg
ICAgICBpbml0Q29uc3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKQEAgLTI1OTUsNiArMjY5Niw1
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0
T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAg
Y29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3Rv
cmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjYxNSw2ICsyNzYxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIo
KSk7CkBAIC0yNjI3LDIxICsyNzc0LDY1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlW
YWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7Cisg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0
QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFn
ZSh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpOwotCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7
Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0
UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFN0
cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAg
aWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAg
ICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNH
ZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVn
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0Fy
cmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxs
VGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9q
aXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRv
bmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxU
aHJvdWdoKTsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3By
KCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgpAQCAtMjczNSw4ICsy
OTI2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2gg
KGFycmF5TW9kZSkgewotICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
Y2hpbGQzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBA
IC0yNzU2LDU5ICsyOTQ3LDc2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5Lgog
ICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAg
ICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKLSAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3Jl
IHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4K
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAgICAg
ICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRo
ZSBiYXNlbGluZSBKSVQKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50
IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAgICAg
ICAgICAgLy8gcHJvZmlsaW5nLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0g
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQ
dXRBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHNv
cnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3
ZSB3b3VsZCBpbnZlcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4g
QnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3
ZSdyZQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgot
ICAgICAgICAgICAgICAgICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdl
IG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlS
ZWcpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQ
UlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFy
eSwgbm9kZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1
ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAg
ICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAg
ICBzdG9yYWdlLnVzZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNl
cy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJp
Y3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJl
ZykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisKKyAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFs
dWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdw
cigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVw
ZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5v
dEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5OworICAgICAgICAgICAg
R1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9y
YXJ5LCBub2RlKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKAorICAg
ICAgICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywg
dmFsdWVSZWcsIHRlbXBvcmFyeVJlZyk7CisKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAg
ICAgICAgICBwcm9wZXJ0eS51c2UoKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAg
ICAgICAgc3RvcmFnZS51c2UoKTsKLQotICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRv
IHRoZSBhcnJheS4KLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkp
OwotCi0gICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChiZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKQotICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGlzSG9sZVZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFzbG93Q2FzZXMuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCkBAIC0yODIwLDYgKzMwMjgsNjMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19N
T0RFUzogeworICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3JhcnkodGhpcyk7
CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9yYXJ5LmdwcigpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgdGVtcG9yYXJ5UmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3Rv
cmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wb3JhcnlSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wb3Jh
cnlSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5v
ZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBvcmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
c3RvcmFnZVJlZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZykpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNh
c2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91
Z2gpOworCisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNl
KCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IHRo
ZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiBzdHJpY3QgbW9kZSBzaG91bGQg
YmUgbWFkZQorICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIGlubGluZSBjYWxsIGZyYW1lLCBu
b3QgdGhlIG1hY2hpbmUgY29kZSBibG9jay4KKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAg
ICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVJlZykpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOiB7CiAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yOTczLDI2ICszMjM4LDU0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAg
ICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3Rv
cmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsK
KyAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0g
ICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZElt
bTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFy
cmUgbGVuZ3Rocy4KKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
LCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgIG1faml0Lm9yUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVz
SW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAg
ICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0b3JhZ2VM
ZW5ndGhHUFIsCi0gICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwg
Tm9SZXN1bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BS
LCBiYXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5n
dGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFn
ZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC0zMDAyLDQxICszMjk1LDc3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlKHRoaXMpOwotICAgICAgICBH
UFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9y
YWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KAorICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwKKyAgICAg
ICAgICAgICAgICB2YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
bG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVl
R1BSKTsKKworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlz
LAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAg
ICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVy
TGVuZ3RoLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRo
aXMpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3Ro
LmdwcigpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmlu
ZWRDYXNlczsKLSAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOworICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwg
dmFsdWVHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAgICAg
bV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0KLSAgICAgICAgc2V0
VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0gICAgICAgIG1faml0
LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJ
blZlY3RvcikpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgc2xvd1BhdGhNb3ZlKAotICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2Vz
LCB0aGlzLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAg
ICAgICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHZhbHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZSwg
dGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsIHZh
bHVlR1BSLCBiYXNlR1BSKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzIxMCw4ICszNTM5LDE2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVnIHNpemVHUFIgPSBzaXplLmdwcigpOwogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdC5ncHIoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZSgpLCBzaXplR1BSKTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIoc2l6ZUdQUik7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJpZ0xlbmd0aCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihNSU5f
U1BBUlNFX0FSUkFZX0lOREVYKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBiaWdMZW5n
dGgubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSksIHN0cnVjdHVyZUdQUik7
CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwgc3RydWN0dXJlR1BSLCBzaXplR1BSKTsK
KyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE1LDYgKzMxNSw0MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUm
IG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9
ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5PTl9BUlJBWV9D
T05USUdVT1VTX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzog
eworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1
dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNv
IHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUg
cHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsK
KyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKApA
QCAtMzUyLDYgKzM4NywyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUm
IG5vCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1f
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IGJlIHR1cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4gQnV0IHdlIGN1cnJlbnRseSBoYXZlIG5v
IGV2aWRlbmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgc28gd291bGQgYmUgcHJvZml0YWJsZSwg
bm9yIGRvIEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRoZSBwcmVzZW50IHRlc3QKKyAgICAgICAg
Ly8gY292ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgorICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkp
OworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgICAgICAgICAgKHBvbHltb3JwaGljSW5jbHVk
ZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpID8gSGFzQ29udGlndW91cyA6IDApCisgICAg
ICAgICAgICAgICAgICAgIHwgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5h
cnJheU1vZGUoKSkgPyBIYXNBcnJheVN0b3JhZ2UgOiAwKSkpKTsKKyAgICAgICAgCisgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3Vt
ZW50czo6c19pbmZvOwogICAgICAgICBicmVhazsKQEAgLTM5MCw3MiArNDQ4LDEwNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgQVNTRVJUKCFtb2RlQWxy
ZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9k
ZSgpKSk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgCisgICAgSW5kZXhpbmdUeXBlIGRl
c2lyZWRJbmRleGluZ1R5cGVNYXNrOwogICAgIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewotICAgIGNhc2UgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJl
LmdwcigpOwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Cisg
ICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGRlc2lyZWRJbmRleGlu
Z1R5cGVNYXNrID0gSGFzQ29udGlndW91czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJh
eTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sg
PSBIYXNBcnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5r
VG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9
IEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQ29udGlndW91cyB8IEhhc0FycmF5U3Rv
cmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQ
UiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAg
ICAgICAgIAotICAgICAgICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdl
IGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBJbmRleGluZ1R5cGUgZGVzaXJl
ZEluZGV4aW5nVHlwZU1hc2sgPQotICAgICAgICAgICAgaXNTbG93UHV0QWNjZXNzKG5vZGUuYXJy
YXlNb2RlKCkpID8gKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpIDog
SGFzQXJyYXlTdG9yYWdlOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9
IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVy
ZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpOworICAgIG1faml0LmxvYWRQdHIo
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9h
ZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOworICAgIC8vIFdlIGNhbiBza2lwIGFs
bCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsK
ICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAg
IAotICAgICAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5leHQgY2hlY2sg
dGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBp
dCBkb2VzLAotICAgICAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgorICAgIHNsb3dD
YXNlLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBhbGxlZ2VkbHkgY3JlYXRp
bmcgY29udGlndW91cyBzdG9yYWdlIGFuZCB0aGUgaW5kZXggaXMgYm9ndXMsIHRoZW4KKyAgICAv
LyBqdXN0IGRvbid0LgorICAgIGlmIChub2RlLmFycmF5TW9kZSgpID09IEFycmF5OjpCbGFua1Rv
Q29udGlndW91cykgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybykpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBUcnVz
dGVkSW1tMzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpKTsKKyAgICB9CisgICAgCisgICAgLy8g
TmV4dCBjaGVjayB0aGF0IHRoZSBvYmplY3QgZG9lcyBub3QgaW50ZXJjZXB0IGluZGV4ZWQgYWNj
ZXNzZXMuIElmIGl0IGRvZXMsCisgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4KKyAg
ICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Ry
dWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CiAgICAgICAgIAotICAgICAgICAv
LyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3Jl
YXRlIHRoZSBhcnJheSBzdG9yYWdlLgorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBH
UFIpOworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkJs
YW5rVG9Db250aWd1b3VzOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNv
bnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VSZWcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
cmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0
QXJyYXlTdG9yYWdlOgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5
U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZyk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnModGVtcEdQUik7Ci0KLSAgICAgICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0
cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCi0gICAgICAgIC8v
IHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0
aGVyIHdheSB3ZSdyZSB0YWxraW5nCi0gICAgICAgIC8vIGFib3V0IGEgbG9hZC4KLSAgICAgICAg
bV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICAK
LSAgICAgICAgLy8gRmluYWxseSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5
IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQgdG8gZ2V0LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhp
cyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4g
dGhlIAotICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlz
IGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCi0gICAgICAgIC8vIFRoYXQncyBmaW5l
LCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3QgdXNlci12aXNpYmxlLgotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdU
eXBlTWFzaykpKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAg
ICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7
Ci0gICAgfQorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlT
dG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFT
SCgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0
ZW1wR1BSKTsKKworICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUg
YmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQorICAgIC8vIHRlbXBvcmFyaWVz
LiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdy
ZSB0YWxraW5nCisgICAgLy8gYWJvdXQgYSBsb2FkLgorICAgIG1faml0LmxvYWRQdHIoCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAgICAKKyAgICAvLyBGaW5hbGx5LCBjaGVjayB0
aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBn
ZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hl
Y2ssIHdoaWNoIHdpbGwgcmVzdWx0IGluIHRoZSAKKyAgICAvLyBieXRlY29kZSBvcGVyYXRpb24g
Y29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCisg
ICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2li
bGUuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNr
KSkpOworICAgICAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBzdG9yYWdlUmVzdWx0
KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQpAQCAtMzIwNSwxMiArMzI5OCwyMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFy
cmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2Ug
QVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NP
TlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdl
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBy
ZXN1bHRSZWcpOworICAgICAgICAgICAgCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVn
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFSUkFZ
X1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBz
dG9yYWdlKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKQEAgLTMzOTksNiArMzUwMywxNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJl
c3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxlSW5kZXgpOwogfQogCitHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3Jh
cnksIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRF
eHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkpCisgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwor
ICAgIAorICAgIEdQUlRlbXBvcmFyeSByZWFsVGVtcG9yYXJ5KHRoaXMpOworICAgIHRlbXBvcmFy
eS5hZG9wdChyZWFsVGVtcG9yYXJ5KTsKKyAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMwMzE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAorY2xhc3MgR1BSVGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBT
bG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMTE2Niw2ICsxMTY3
LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVz
dGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBA
IC0xMjE4LDExICsxMjI0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihz
aXplKSk7CkBAIC0xNDY4LDYgKzE0NzksMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
aW50MzJfdCBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBT
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVk
SW1tUHRyKHNpemUpKTsKQEAgLTE1MzEsMTEgKzE1NDcsMTYgQEAgcHVibGljOgogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihz
aXplKSk7CkBAIC0yMTQ5LDYgKzIxNzAsNTIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBH
UFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BS
UmVnIHJlc3VsdFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJh
eVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJl
ZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BS
UmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcg
YmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJl
c3VsdFRhZ1JlZywgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcpOworI2VuZGlmCisgICAgCisgICAg
Ym9vbCBwdXRCeVZhbFdpbGxOZWVkRXh0cmFSZWdpc3RlcihBcnJheTo6TW9kZSBhcnJheU1vZGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICAvLyBGb3IgQXJy
YXlTdG9yYWdlLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3Igc3RvcmVzIHRvIGhvbGVzIGV4Y2Vw
dCBpZgorICAgICAgICAvLyB3ZSdyZSBpbiBTbG93UHV0IG1vZGUuCisgICAgICAgIGNhc2UgQVJS
QVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAvLyBGb3IgQ29udGlndW91cywgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIGFueSBhY2Nlc3Mg
dGhhdCBtYXkgc3RvcmUKKyAgICAgICAgLy8gdG8gdGhlIHRhaWwuCisgICAgICAgIGNhc2UgQ09O
VElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElH
VU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBBbGwg
cG9seW1vcnBoaWMgbW9kZXMgbmVlZCBhbiBleHRyYSByZWcuCisgICAgICAgIGNhc2UgQUxMX1BP
TFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3Jh
cnkmLCBBcnJheTo6TW9kZSk7CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlW
YWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUuYXJyYXlN
b2RlKCkpOworICAgIH0KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywg
R1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBH
UFJSZWcgdGVtcFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJh
eVN0b3JhZ2VQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJl
ZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOwor
I2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRC
eVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0
b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVRhZ1JlZywgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChO
b2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyB2YWx1ZVRhZ1JlZywgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyk7CisjZW5kaWYK
KyAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmKTsKICAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMzAzMTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MzgsOCArNzM4LDI1IEBAIHN0YXRpYyBpbmxpbmUgSlNPYmplY3Qq
IGNoZWNrZWRSZXR1cm4oSlMKICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKK2NsYXNzIFNh
bXBsaW5nU2NvcGUgeworcHVibGljOgorICAgIFNhbXBsaW5nU2NvcGUoSW50ZXJwcmV0ZXIqIGlu
dGVycHJldGVyKQorICAgICAgICA6IG1faW50ZXJwcmV0ZXIoaW50ZXJwcmV0ZXIpCisgICAgewor
ICAgICAgICBpbnRlcnByZXRlci0+c3RhcnRTYW1wbGluZygpOworICAgIH0KKyAgICB+U2FtcGxp
bmdTY29wZSgpCisgICAgeworICAgICAgICBtX2ludGVycHJldGVyLT5zdG9wU2FtcGxpbmcoKTsK
KyAgICB9Citwcml2YXRlOgorICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOworfTsKKwog
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqKQogeworICAgIFNhbXBsaW5n
U2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKKyAgICAKICAgICBKU1Njb3BlKiBzY29wZSA9IGNh
bGxGcmFtZS0+c2NvcGUoKTsKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc09iaiwg
Y2FsbEZyYW1lKSk7CiAgICAgQVNTRVJUKCFzY29wZS0+Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24p
OwpAQCAtMTEzNyw2ICsxMTU0LDggQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJl
cGFyZUZvcgogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsb3N1cmUm
IGNsb3N1cmUpIAogeworICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKKyAg
ICAKICAgICBBU1NFUlQoIWNsb3N1cmUub2xkQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xs
ZWN0b3JCdXN5KCkpOwogICAgIGlmIChjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0xMTcyLDYg
KzExOTEsOCBAQCB2b2lkIEludGVycHJldGVyOjplbmRSZXBlYXRDYWxsKENhbGxGcmFtCiAKIEpT
VmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNTY29wZSogc2NvcGUsIGludCBnbG9i
YWxSZWdpc3Rlck9mZnNldCkKIHsKKyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhp
cyk7CisgICAgCiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0KHRoaXNWYWx1ZSwgY2FsbEZy
YW1lKSk7CiAgICAgQVNTRVJUKCFzY29wZS0+Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24pOwogICAg
IEFTU0VSVCghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAw
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KTsKIAogICAgIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0gMDsKKyAgICBtX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleCA9IDA7CiAgICAgbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4ID0g
MDsKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKICAgICAKQEAgLTczOCw2ICs3MzksMjAg
QEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIG1fY29kZUJs
b2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcHJvcGVydHlB
Y2Nlc3NDb21waWxhdGlvbkluZm9baV0uY29weVRvU3R1YkluZm8obV9jb2RlQmxvY2stPnN0cnVj
dHVyZVN0dWJJbmZvKGkpLCBwYXRjaEJ1ZmZlcik7CisgICAgbV9jb2RlQmxvY2stPnNldE51bWJl
ck9mQnlWYWxJbmZvcyhtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAo
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJhZFR5cGVK
dW1wKSk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uZG9uZVRhcmdldCk7CisgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLnNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAg
Q29kZUxvY2F0aW9uQ2FsbCByZXR1cm5BZGRyZXNzID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZiht
X2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLnJldHVybkFkZHJlc3MpOworICAgICAgICAKKyAgICAg
ICAgbV9jb2RlQmxvY2stPmJ5VmFsSW5mbyhpKSA9IEJ5VmFsSW5mbygKKyAgICAgICAgICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIGJhZFR5
cGVKdW1wLAorICAgICAgICAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5hcnJheU1vZGUs
CisgICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoYmFkVHlwZUp1bXAsIGRvbmVU
YXJnZXQpLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHJldHVybkFkZHJl
c3MsIHNsb3dQYXRoVGFyZ2V0KSk7CisgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJP
ZkNhbGxMaW5rSW5mb3MobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxs
TGlua0luZm9zKCk7ICsraSkgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVC
bG9jay0+Y2FsbExpbmtJbmZvKGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjQsNiArMjY0LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGNvcHlUb1N0dWJJbmZvKFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvLCBMaW5rQnVmZmVyICZwYXRj
aEJ1ZmZlcik7CiAgICAgfTsKIAorICAgIHN0cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5mbyB7Cisg
ICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZvKCkgeyB9CisgICAgICAgIAorICAgICAgICBCeVZh
bENvbXBpbGF0aW9uSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCisg
ICAgICAgICAgICAsIGFycmF5TW9kZShhcnJheU1vZGUpCisgICAgICAgICAgICAsIGRvbmVUYXJn
ZXQoZG9uZVRhcmdldCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBiYWRUeXBlSnVtcDsKKyAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBzbG93UGF0aFRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
cmV0dXJuQWRkcmVzczsKKyAgICB9OworCiAgICAgc3RydWN0IFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm8gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhC
ZWdpbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVyOwpAQCAtMzQ4
LDYgKzM2NywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2Rl
T2Zmc2V0ID0gc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0
ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1
Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVC
bG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAg
ICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9i
eXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlN
b2RlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IGNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKICAgICAgICAgewpA
QCAtMzk3LDYgKzQzMCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyosIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCosIGludCwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXpl
X3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0
dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIsIENh
bGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24o
U3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciwgYm9vbCBk
aXJlY3QpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRB
cnJheU1vZGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiwgVHJhbXBv
bGluZVN0cnVjdHVyZSopOwogICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKQEAgLTQ1Miw2ICs0
ODgsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBBcnJheVByb2ZpbGUqKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
Rm9yQnl0ZWNvZGVJbmRleChSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVn
aXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgdm9pZCBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKKyAg
ICAgICAgCisgICAgICAgIEpJVEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxl
Kik7CisgICAgICAgIAorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBp
biByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZXhpbmcgdHlwZS4KKyAgICAgICAgLy8gUHJvcGVy
dHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2Vk
LgorICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4gUmV0dXJucyB0aGUg
c2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCisgICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0
IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KKyAgICAgICAgSnVtcExpc3Qg
ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3Bl
cnR5IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2lu
ZyB0eXBlLgorICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQu
IFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAorICAgICAgICAvLyB6ZXJvLWV4dGVuZGVkLiBC
YXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuCisgICAg
ICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250
aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAg
ICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBN
YXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKQEAgLTg3MCw2ICs5MjIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAgIFZl
Y3RvcjxMYWJlbD4gbV9sYWJlbHM7CiAgICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxh
dGlvbkluZm8+IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3Rv
cjxCeVZhbENvbXBpbGF0aW9uSW5mbz4gbV9ieVZhbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAg
VmVjdG9yPFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8+IG1fY2FsbFN0cnVjdHVyZVN0dWJD
b21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZv
PiBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+
IG1fam1wVGFibGU7CkBAIC04NzksNiArOTMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgdW5zaWduZWQgbV9w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVJbmZvSW5k
ZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fY2FsbExpbmtJbmZvSW5kZXg7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQ3LDIzICs0NDcsMjIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXko
dW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxs
UmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0ciwg
UmVnaXN0ZXJJRCBzY3JhdGNoKQogewotICAgIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6
Om1heChsZW5ndGgsIDRVKTsKLSAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoaW5pdGlhbExlbmd0
aCkpOworICAgIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0Vf
VkVDVE9SX0xFTik7CisgICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgMCwgdHJ1ZSwgaW5pdGlhbExlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworCisgICAgbG9hZFB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkFy
cmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOwogCiAgICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJh
Y2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIAogICAg
IC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5IGluaXRpYWxpemF0aW9uLgogICAgIGVt
aXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSwgc3RvcmFnZVJlc3VsdCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhl
IGFycmF5LgotICAgIGxvYWRQdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNz
T2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNoKTsKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2Jq
ZWN0PEpTQXJyYXksIE1hcmtlZEJsb2NrOjpOb25lPihzY3JhdGNoLCBjZWxsUmVzdWx0LCBzdG9y
YWdlUHRyKTsKIAotICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIEFy
cmF5U3RvcmFnZS4KLSAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIo
bGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0lu
VmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRy
ZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
LSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6OmluZGV4Qmlhc09mZnNldCgpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNl
dCgpKSk7CisgICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbyBpbiB0aGUgaW5kZXhp
bmcgaGVhZGVyLgorICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVz
dWx0LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBzdG9yZTMyKElt
bTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2x5IGFsbG9jYXRl
ZCBBcnJheVN0b3JhZ2UuCiAgICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhjZWxs
UmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKQEAgLTQ3MiwxMiArNDcxLDEy
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnMKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciAr
IGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZVB0cihz
dG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSAqIGkpKTsKICNlbHNlCiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBz
dG9yYWdlUHRyKTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VS
ZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSAqIGkpKTsKKyAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0
b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwogICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkg
KiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKHVpbnQzMl90KSksIHN0b3JhZ2VQdHIpOwotICAg
ICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSAr
IHNpemVvZih1aW50MzJfdCkpKTsKKyAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVv
Zih1aW50MzJfdCkpKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTU2MSwxMCArNTYwLDI1IEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUYKIAogaW5saW5lIHZvaWQgSklU
OjplbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSkKIHsKLSAgICBpZiAoIWNhbkJlT3B0aW1pemVkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpICAgIAogICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSk7Cisj
ZW5kaWYKK30KKworc3RhdGljIGlubGluZSBib29sIGFycmF5UHJvZmlsZVNhdyhBcnJheVByb2Zp
bGUqIHByb2ZpbGUsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KQoreworI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKKyAgICByZXR1cm4gISEocHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCkg
JiAoYXNBcnJheU1vZGVzKE5vbkFycmF5IHwgY2FwYWJpbGl0eSkgfCBhc0FycmF5TW9kZXMoQXJy
YXlDbGFzcyB8IGNhcGFiaWxpdHkpKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCitpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJv
ZmlsZSogcHJvZmlsZSkKK3sKKyAgICBpZiAoYXJyYXlQcm9maWxlU2F3KHByb2ZpbGUsIEhhc0Fy
cmF5U3RvcmFnZSkpCisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3JhZ2U7CisgICAgcmV0dXJu
IEpJVENvbnRpZ3VvdXM7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjYxLDcgKzE2NjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1
Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgeworICAgIGlm
IChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAg
ICB8fCBDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKSB7CiAgICAgICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXkpOwogICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkp
OwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMTY4MCw4ICsxNjgxLDEwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXdfYXJyYXkoSW5zdHJ1Y3QKICAgICAvLyBJZiB0aGUgYWxsb2NhdGlvbiB3
b3VsZCBiZSBvdmVyc2l6ZSwgd2Ugd2lsbCBhbHJlYWR5IG1ha2UgdGhlIHByb3BlciBzdHViIGNh
bGwgYWJvdmUgaW4gCiAgICAgLy8gZW1pdF9vcF9uZXdfYXJyYXkuCiAgICAgaW50IGxlbmd0aCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjpp
c092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihsZW5ndGgpKSkpCisgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
aXNIYXZpbmdBQmFkVGltZSgpCisgICAgICAgIHx8IENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5n
dGgpKSkpCiAgICAgICAgIHJldHVybjsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFdlJ3Jl
IGhhdmluZyBhIGJhZCB0aW1lLgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3Vn
aCBzcGFjZSBpbiBDb3BpZWRTcGFjZSBmb3Igc3RvcmFnZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gTWFya2VkU3BhY2UgZm9yIGNlbGwuCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDI3ICsyMDQs
NzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHVuc2ln
bmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQg
YmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAK
ICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1Qy
KTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJl
Z1QxLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJh
eVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIHBy
b2ZpbGUpOworCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUp
OworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAKLSAgICBsb2FkMzIoQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCByZWdUMSk7IC8vIHRhZwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBh
eWxvYWQKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwor
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVs
KCk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVtcHR5VmFsdWVUYWcpKTsK
KyAgICBicmVha3BvaW50KCk7CisgICAgcmVzdWx0T0subGluayh0aGlzKTsKKyNlbmRpZgorCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2dldF9i
eV92YWwpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlw
ZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0
MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAg
CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2Fk
MzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0QXJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSk7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAg
IAorICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCisgICAgbG9hZDMyKEJhc2VJbmRl
eChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksIHJlZ1QwKTsgLy8gcGF5bG9hZAorICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorICAgIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpAQCAtMjQ4LDEwICsyOTksMTYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
dmVjdG9yIGxlbmd0aCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFs
dWUKICAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisgICAgCiAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOwogICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KGJhc2UpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5KTsKLSAg
ICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3Qp
OworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
c2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQpA
QCAtMjYxLDE5ICszMTgsODIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVj
dGlvbgogICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3Bl
cnR5LCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDEpOwotICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGUocmVnVDEsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJh
eVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1
c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVn
VDEsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Cisg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hv
b3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklU
Q29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJ
VEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0NBc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZz
ZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KIAorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRD
b250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAg
b3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1Qz
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAKKyAgICBMYWJlbCBz
dG9yZVJlc3VsdCA9IGxhYmVsKCk7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7
CisgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3RvcmUz
MihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Cisg
ICAgCisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVU
b0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QyLCByZWdUMSk7CisgICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAogICAgIGVt
aXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwgcmVnVDMsIFVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKICAgICAKKyAgICBy
ZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKwogICAgIEp1bXAgZW1wdHkgPSBicmFu
Y2gzMihFcXVhbCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
OwogICAgIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwpAQCAtMjkyLDYgKzQxMiwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAgICAgCiAgICAgZW5kLmxpbmsodGhpcyk7CisgICAg
CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAg
IAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0zMDMsMTMgKzQyNywxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBw
cm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJh
c2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2Ug
bm90IGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2ZWN0b3IgY2hl
Y2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG91dCBvZiBib3VuZHMKKyAgICAKKyAgICBM
YWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5
VmFsQ2FsbCh0aGlzLCBjdGlfb3BfcHV0X2J5X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5h
ZGRBcmd1bWVudChiYXNlKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHByb3Bl
cnR5KTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlKTsKLSAgICBzdHVi
UHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxsLmNh
bGwoKTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEzMDMx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92
YWwoSW5zdHJ1Y3Rpb24KICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCBy
ZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlh
dGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTExMSwxNyArMTEyLDY0IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIs
IHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3Rv
cmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmls
ZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAK
LSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
SklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBKdW1wIHJlc3VsdE9LID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMCk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7CisjZW5k
aWYKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkp
OworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIs
IFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQor
CitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKKwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
KworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0
NiwxMCArMTk0LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCisgICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOworICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9n
ZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxs
KGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQg
PSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQpAQCAtMjI2LDcgKzI4MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNp
Z25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWdu
ZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAt
MjM0LDEwICsyODgsNzIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlv
bgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmls
ZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIs
IHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3Nl
QXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29u
dGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFy
cmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQs
IGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJl
Z1QzLCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3Vz
UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hU
ZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBK
dW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICBMYWJlbCBz
dG9yZVJlc3VsdCA9IGxhYmVsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2Fs
ZVB0cikpOworICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBvdXRPZkJvdW5kcy5s
aW5rKHRoaXMpOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9m
aWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QxLCByZWdUMyk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAg
IAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJy
YXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgSnVtcCBlbXB0eSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCkBAIC0yNDcsOCArMzYz
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIEp1bXAg
ZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVl
c0luVmVjdG9yT2Zmc2V0KCkpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CkBAIC0yNTcsOCAr
MzczLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGp1
bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7Ci0K
LSAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTI3MCwxMyArMzg2LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3Bl
cnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7
IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3Qg
YXJyYXkgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBjaGVjawor
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcworICAgIAorICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRCeVZhbENhbGwo
dGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1l
bnQocmVnVDApOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJl
Z1QyKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0g
ICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5VmFs
Q2FsbC5jYWxsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwor
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pbmRleChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjU2LDcgKzc3
OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDIsIHJlZ1QxLCBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSXNBcnJheSkpOwotICAgIEp1bXAgZmFp
bHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMpKTsK
IAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9y
YWdlCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMyk7CkBAIC0xMjc0LDYgKzEzOTYsNzYgQEAgYm9vbCBKSVQ6OmlzRGlyZWN0UHV0
QnlJZChTdHJ1Y3R1cmVTdHViSQogICAgIH0KIH0KIAordm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5
U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFk
ZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Ns
b3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxh
YmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVt
cFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBn
ZXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAg
ICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV92YWxfZ2VuZXJpYykpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBK
SVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNo
QnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7
CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV92YWwg
c3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2Rl
QmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlW
YWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9G
dW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5l
cmljKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1
ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCisjaW5jbHVkZSAi
UmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgIlN0
cm9uZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTI0MTQsNiArMjQxNSwz
MCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJu
IHJldHVyblZhbHVlOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUu
aXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVl
IHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFt
ZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewor
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChp
c0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgo
aSkpIHsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3Zh
bF9zdHJpbmcpKTsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJ
bmRleChjYWxsRnJhbWUsIGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUu
Z2V0KGNhbGxGcmFtZSwgaSk7CisgICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQor
ICAgICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFu
Y2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZp
ZXIgcHJvcGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFs
dWUoY2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9w
ZXJ0eSk7Cit9CisKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRf
YnlfdmFsKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTI0
MjMsMzUgKzI0NDgsNDQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsK
ICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAg
ICAgCi0gICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3Ry
aW5nKCkpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwo
KS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFs
dWUoY2FsbEZyYW1lKSkpIHsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBp
ID0gc3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1
ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAgICAgICAg
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsK
LSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5k
ZXgoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBpZiAoYmFzZVZh
bHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBTZWUg
aWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIHRoaXMgYXQgYWxsLgorICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAgICBp
ZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKKyAgICAgICAgICAgIC8v
IERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOworICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7
CisgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgQnlWYWxJ
bmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0
ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICAgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5n
VHlwZSkpIHsKKyAgICAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJy
YXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7CisgICAgICAgICAgICAgICAgaWYg
KGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVHZXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNl
VmFsdWUuZ2V0KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KKyAgICAKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3Jp
cHQsIFNUVUJfUkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNU
VUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChpc05hbWUoc3Vic2Ny
aXB0KSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1l
LCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUo
KSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0
YWNrRnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUs
IHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Ci0gICAg
Q0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFj
a0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0
QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgU1RVQl9SRVRVUk5fQUREUkVT
Uyk7CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKIH0KICAgICAKQEAgLTI1MDIsMjMgKzI1MzYsMTQgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkK
K3N0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBz
dGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFj
a0ZyYW1lLmdsb2JhbERhdGE7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUu
YXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFy
Z3NbMV0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0u
anNWYWx1ZSgpOwotCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAg
ICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOwogICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlj
a2x5KGkpKQotICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KCpnbG9iYWxE
YXRhLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHko
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBj
YWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUo
KSk7CiAgICAgICAgIH0gZWxzZQpAQCAtMjUyOCwxMSArMjU1Myw2MSBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZy
YW1lLCBqc0Nhc3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5h
bWUoKSwgdmFsdWUsIHNsb3QpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2Fs
bEZyYW1lKSk7Ci0gICAgICAgIGlmICghc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24p
IHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRp
b24uCisgICAgICAgIGlmICghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKSB7IC8v
IERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgog
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHBy
b3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICB9Cit9CisKK0RFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZS
QU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1l
LmNhbGxGcmFtZTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBd
LmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5q
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVl
KCk7CisKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIo
KSkgeworICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KKyAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKTsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7
CisgICAgICAgICAgICAvLyBEb250IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOworICAg
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVUVVJO
X0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRG
b3JOb25ERkdDb2RlKCk7CisgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAg
ICAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5n
ZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghYnlW
YWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhp
bmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAg
ICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJF
U1MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgcHV0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUpOworCisg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfcHV0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFt
ZS5jYWxsRnJhbWU7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1
ZSgpOworICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlKTsKIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw2
ICszNzAsNyBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X2lkX3NlbGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19m
YWlsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1Zh
bHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOworICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFs
X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2Rl
ZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9v
cF9pbihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNW
YWx1ZSBKSVRfU1RVQiBjdGlfb3BfaW5zdGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdU
Rl9JTlRFUk5BTDsKQEAgLTQ0Niw2ICs0NDcsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4
KFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIg
Y3RpX29wX3B1dF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7Cisg
ICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0
ZXJfc2V0dGVyKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQg
SklUX1NUVUIgY3RpX29wX3B1dF9nbG9iYWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElP
TikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTExNzEsNyAr
MTE3MSw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGxvYWRwIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0MiwgdDEsIHQwKQogICAgIGJ0
aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIGJ0aXogdDIsIEhhc0Fy
cmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRpeiB0MiwgKEhhc0NvbnRp
Z3VvdXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSwgLm9wR2V0
QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGkgNFtQQ10sIHQxCiAgICAgbG9hZHAgMzJbUENdLCB0
MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwCkBAIC0xMzA2LDEwICsx
MzA2LDIxIEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxvYWRpIDEyW1BDXSwgdDMKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MywgSW50MzJUYWcsIHQxLCAub3BHZXRC
eVZhbFNsb3cpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBi
dGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAg
ICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1
YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpIFRhZ09mZnNldFt0Mywg
dDEsIDhdLCB0MgorICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKyAgICBq
bXAgLm9wR2V0QnlWYWxEb25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6
IHQyLCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTVG9yYWdlLCAub3BHZXRCeVZh
bFNsb3cKICAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX3ZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRpIDRbUENd
LCB0MAogICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDMsIHQx
LCA4XSwgdDIKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5bG9hZE9mZnNl
dFt0MywgdDEsIDhdLCB0MQorCisub3BHZXRCeVZhbERvbmU6CisgICAgbG9hZGkgNFtQQ10sIHQw
CiAgICAgYmllcSB0MiwgRW1wdHlWYWx1ZVRhZywgLm9wR2V0QnlWYWxTbG93CiAgICAgc3RvcmVp
IHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KICAgICBzdG9yZWkgdDEsIFBheWxvYWRPZmZzZXRb
Y2ZyLCB0MCwgOF0KQEAgLTEzODMsMjkgKzEzOTQsNTIgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6
CiAgICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVyZVt0MV0sIHQyCiAgICAgbG9hZHAgMTZbUENd
LCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQwKQotICAgIGJ0aXogdDIsIEhhc0FycmF5
U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9hZGkgOFtQQ10sIHQwCi0gICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDAsIEludDMyVGFnLCB0MiwgLm9wUHV0QnlWYWxTbG93
KQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQwLCBJbnQzMlRhZywgdDMsIC5v
cFB1dEJ5VmFsU2xvdykKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAot
ICAgIGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
dmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYmllcSBBcnJheVN0b3JhZ2U6
Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5
VmFsRW1wdHkKLS5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9hZGkgMTJbUENdLCB0Mwot
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHQzLCB0MSwgdDMpCi0gICAgd3JpdGVCYXJy
aWVyKHQxLCB0MykKLSAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdP
ZmZzZXRbdDAsIHQyLCA4XQotICAgIHN0b3JlaSB0MywgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciAr
IFBheWxvYWRPZmZzZXRbdDAsIHQyLCA4XQorICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5v
cFB1dEJ5VmFsTm90Q29udGlndW91cworCisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbENv
bnRpZ3VvdXNPdXRPZkJvdW5kcworLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQ6Cisg
ICAgbG9hZGkgMTJbUENdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHQyLCB0
MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyKHQxLCB0MikKKyAgICBzdG9yZWkgdDEsIFRhZ09mZnNl
dFt0MCwgdDMsIDhdCisgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W3QwLCB0MywgOF0KKyAg
ICBkaXNwYXRjaCg1KQorCisub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBi
aWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rv
ckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BST0ZJTEVSCisgICAg
ICAgIGxvYWRwIDE2W1BDXSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0MV0KKyAgICBlbmQKKyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3Jl
aSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xl
bmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9w
UHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9w
UHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBiaWVx
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDAsIHQzLCA4XSwgRW1wdHlWYWx1
ZVRhZywgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheW9TdG9y
YWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGkgMTJbUENdLCB0MgorICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUyUmVnKHQyLCB0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyKHQxLCB0MikKKyAgICBz
dG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDAsIHQzLCA4XQor
ICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRPZmZzZXRbdDAs
IHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6Cisub3BQdXRCeVZh
bEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0gICAgICAgIHN0b3Jl
YiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAgICAgIGxvYWRwIDE2
W1BDXSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9s
ZVt0MV0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZl
Y3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgYmli
IHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVu
Z3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwg
dDIsIHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0
CisgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlW
YWxTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTgs
NyArMTAxOCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGxvYWRwIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0MiwgdDEsIHQwKQogICAg
IGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIGJ0aXogdDIsIEhh
c0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRpeiB0MiwgKEhhc0Nv
bnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSwgLm9w
R2V0QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDEKICAgICBsb2Fk
cCA2NFtQQiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10s
IHQwCkBAIC0xMTQ3LDE0ICsxMTQ3LDI1IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxv
YWRwIDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDEpCiAgICAg
bG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAu
b3BHZXRCeVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDMsIHQxLCAu
b3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1f
YnV0dGVyZmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3VzLCAub3BHZXRCeVZh
bE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CisgICAg
bG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4XSwgdDIKKyAgICBi
dHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKyAgICBqbXAgLm9wR2V0QnlWYWxEb25lCisKKy5vcEdl
dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNT
bG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFlcSB0MSwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0M10sIC5v
cEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZHAgQXJy
YXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIsIC5vcEdldEJ5
VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3RvcmVwIHQyLCBbY2ZyLCB0MCwgOF0K
ICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZhbHVlUHJvZmlsZSh0MiwgdDApCkBA
IC0xMjI2LDI5ICsxMjM3LDUxIEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIEpT
Q2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQzCiAg
ICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdl
LCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwgdDAKLSAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQdXRCeVZhbFNsb3cpCi0gICAgc3hp
MnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MywgLm9wUHV0
QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRl
cmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBidHB6
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQotLm9w
UHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKLSAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3Vz
LCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1
dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJl
c3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEpCisgICAgc3RvcmVwIHQxLCBbdDAs
IHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91
bmRzOgorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgaWYgVkFMVUVfUFJP
RklMRVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAgICAgc3RvcmViIDEs
IEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQKKyAgICBhZGRpIDEs
IHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlWYWxDb250aWd1b3Vz
U3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0aXogdDIsIEhh
c0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5k
ZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRC
eVZhbFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9w
UHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJl
c3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3RvcmVwIHQxLCBBcnJh
eVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1w
dHk6Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVS
Ci0gICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisg
ICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVBy
b2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRkaSAxLCBBcnJheVN0
b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4
aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlW
YWxTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDIsIHQxCisgICAgYmliIHQzLCAtc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0
QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAorICAgIGFkZGkgMSwgdDMsIHQxCiAgICAgc3Rv
cmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGlj
TGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgam1wIC5vcFB1
dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgogICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZp
c2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAgZW5kCiAKICMgQ29u
c3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0IElzQXJyYXkgPSAx
Citjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAotY29u
c3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlID0gMTYK
IAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lv
biAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1pbkRlbnNpdHlNdWx0aXBsaQogCiBpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQogewotICAgIHJldHVybiBs
ZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVs
dGlwbGllciA8PSBudW1WYWx1ZXM7CisgICAgcmV0dXJuIGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0
aXBsaWVyIDw9IG51bVZhbHVlczsKIH0KIAogaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5n
SGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsOCBAQCBzdGF0
aWMgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tCiAvLyBjdXJyZW50Q291bnQpIHdp
bGwgYmUgc2hpZnRlZCB0byB0aGUgbGVmdCBvciByaWdodCBhcyBhcHByb3ByaWF0ZTsgaW4gdGhl
CiAvLyBjYXNlIG9mIHNoaWZ0IHRoaXMgbXVzdCBiZSByZW1vdmluZyB2YWx1ZXMsIGluIHRoZSBj
YXNlIG9mIHVuc2hpZnQgdGhpcwogLy8gbXVzdCBiZSBpbnRyb2R1Y2luZyBuZXcgdmFsdWVzLgot
c3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1bnNpZ25lZCByZXN1
bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6U2hpZnRDb3VudE1v
ZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1bnNpZ25l
ZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVChjdXJyZW50Q291
bnQgPiByZXN1bHRDb3VudCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjdXJyZW50Q291bnQgLSBy
ZXN1bHRDb3VudDsKQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2hpZnQo
RXhlY1N0YXRlKiBleGVjCiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CiAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAgaWYgKGFycmF5LT5s
ZW5ndGgoKSA9PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3VudChleGVjLCBo
ZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYg
YXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhlYywgaGVhZGVy
LCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMzEsNyArMjMyLDgg
QEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAg
ICAgfQogfQotc3RhdGljIGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVu
c2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTxKU0FycmF5OjpT
aGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KK3ZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRD
b3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NF
UlQocmVzdWx0Q291bnQgPiBjdXJyZW50Q291bnQpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gcmVz
dWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CkBAIC0yNDcsMTAgKzI0OSwxMCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4CiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNP
YmopKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAg
ICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVuc2hpZnRDb3VudChl
eGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5n
dGggJiYgYXJyYXktPnVuc2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhlYywgaGVhZGVyLCBj
b3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAgICAgZm9yICh1bnNp
Z25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAtLWspIHsKICAgICAg
ICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAgICAgICB1bnNpZ25l
ZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CkBAIC01MjYsNyArNTI4LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBhcnJheS0+cHVzaChleGVj
LCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiAgICAgfQotCisgICAgCiAgICAgSlNPYmplY3QqIHRo
aXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMy
KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU0NCw2ICs1NDYsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgfQorICAgIAogICAgIEpTVmFsdWUgbmV3TGVuZ3RoKHN0YXRp
Y19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihleGVjLT5hcmd1
bWVudENvdW50KCkpKTsKICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoLCBuZXdMZW5ndGgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUobmV3TGVuZ3RoKTsKQEAgLTYwMCw3ICs2MDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIDApOwotICAgICAg
ICBzaGlmdChleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOworICAgICAgICBzaGlmdDxK
U0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDEsIDAsIGxlbmd0
aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHB1dFByb3BlcnR5KGV4
ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGxlbmd0
aCAtIDEpKTsKQEAgLTczMCw3ICs3MzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLQorICAgIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYykpOwogCkBA
IC03NjIsMTEgKzc2NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oZXhlYy0+
YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdzIDwgZGVsZXRl
Q291bnQpIHsKLSAgICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNvdW50
LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRD
b3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNvdW50LCBhZGRpdGlv
bmFsQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVs
c2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKLSAgICAgICAgdW5zaGlmdChl
eGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgp
OworICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+KGV4ZWMsIHRo
aXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5NCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIHVuc2lnbmVkIG5yQXJn
cyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7Ci0gICAgICAgIHVu
c2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOworICAgICAgICB1bnNo
aWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMCwgbnJB
cmdzLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2Up
ICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAgfQogICAgIAorICAg
IC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdzIGhhbmR5LCBidXQg
dG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9mIGJ1dHRlcmZsaWVz
IGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRpYyBCdXR0ZXJmbHkq
IGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNoYXIqIHBvaW50ZXIo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQorICAgIAogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5n
SGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigp
ICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCk7IH0KQEAg
LTcwLDkgKzc5LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhp
bmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQog
ICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hl
YWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHBy
b3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4g
aW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50MzJfdCB2ZWN0b3JM
ZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5ndGgoKTsgfQorICAg
IHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4aW5nSGVhZGVyKCkt
PnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1aW50
MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5ndGgodmFsdWUpOyB9
CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRleGluZ1BheWxvYWQo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAgIEFycmF5U3RvcmFn
ZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5U3RvcmFnZT4o
KTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygpIHsgcmV0dXJuIGlu
ZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9CisgICAgCisgICAgc3Rh
dGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVua25vd24+KiBjb250
aWd1b3VzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5
Kj4oY29udGlndW91cyk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3Rv
cmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6
ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNTRVJUKGhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoaGFzQXJy
YXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBBU1NFUlQobnVtYmVy
T2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpKTsKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRvIHJld3JpdGUg
dGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAgLTE2Myw3ICsxNjMs
NyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RyCiAKIGlubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBu
dW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4g
dW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIs
MTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdAogCiBpbmxpbmUg
c2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0b3JhZ2Uoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
IHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAg
IAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJl
dHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
KTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFoYXNJbmRleGVkUHJv
cGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5kZXhp
bmdUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBjaGFyKiBpbmRleGluZ1R5cGVU
b1N0cmluZyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN0YXRpYyBjaGFyIHJl
c3VsdFsxMjhdOworICAgIGNvbnN0IGNoYXIqIGJhc2ljTmFtZTsKKyAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSAmIEFsbEFycmF5VHlwZXMpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICBi
YXNpY05hbWUgPSAiTm9uQXJyYXkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5
V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhDb250aWd1
b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBiYXNpY05hbWUgPSAiQXJy
YXlDbGFzcyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoK
KyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0g
IkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBiYXNpY05hbWUgPSAiVW5rbm93biEiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgc25wcmludGYoCisgICAgICAgIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCksICIlcyVzIiwgYmFz
aWNOYW1lLAorICAgICAgICAoaW5kZXhpbmdUeXBlICYgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMp
ID8gInxNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyIgOiAiIik7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTkgKzMyLDIxIEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CiAKIC8vIEZs
YWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCiBzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAgICAgICAgICA9IDI7CiBzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CiBzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgICA9IDE2OwogCiAvLyBBZGRp
dGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlwZS4gVGhlc2Ug
YXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0
bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFycmF5U3RvcmFnZSAgICAgICAgICA9
IDMyOyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBoYXZlIGFycmF5IHN0b3JhZ2UgaW4g
dGhlIHBhc3QuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNz
b3JzICA9IDY0Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vz
c29ycyAgPSAzMjsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgogc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAgICAgID0gMDsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQ29udGlndW91cyAgICAgICAg
ICA9IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSAgICAgICAgPSBIYXNBcnJheVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgPSBIYXNTbG93UHV0QXJy
YXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheUNsYXNzICAgICAgICAg
ICAgICAgICAgICAgID0gSXNBcnJheTsgLy8gSSdkIHdhbnQgdG8gY2FsbCB0aGlzICJBcnJheSIg
YnV0IHRoaXMgd291bGQgbGVhZCB0byBkaXNhc3Ryb3VzIG5hbWVzcGFjZSBwb2xsdXRpb24uCitz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgICAg
PSBJc0FycmF5IHwgSGFzQ29udGlndW91czsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlICAgICAgICAgICA9IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Ug
ICAgPSBJc0FycmF5IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIApAQCAtNTIsNiArNTQsMTAg
QEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UAogICAgIE5vbkFycmF5
OiAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlDbGFzcwogCisjZGVmaW5lIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTIFwKKyAgICBOb25BcnJheVdpdGhDb250aWd1b3Vz
OiAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91cworCiAjZGVmaW5lIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUyBcCiAgICAgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlCkBAIC03Niw2ICs4MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaGFz
SW5kZXhpbmdIZWFkZXIoSW5kCiAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHR5cGUp
OwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzQ29udGlndW91cyhJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlKQoreworICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBIYXNDb250aWd1b3Vz
KTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3RvcmFnZShJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlKQogewogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiAoSGFzQXJyYXlT
dG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpAQCAtODYsNiArOTcsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlU2xvd1B1dChJbmRlCiAgICAgcmV0dXJuICEhKGluZGV4
aW5nVHlwZSAmIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwogfQogCitjb25zdCBjaGFyKiBpbmRl
eGluZ1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUpOworCiAvLyBNYXNrIG9mIGFsbCBwb3NzaWJs
ZSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlcyAgICAgICAg
ICAgID0gMzE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDkgKzMzNyw4IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgs
IGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTQXJyYXk6OnNldExlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNl
cHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBsZW5ndGggaXMg
cmVhZCBvbmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3VsZCBlbnRlciB0aGUg
Zm9sbG93aW5nICdpZicuCkBAIC00MDIsMTIgKzQwMSw3MSBAQCBib29sIEpTQXJyYXk6OnNldExl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNBcnJh
eTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRo
cm93RXhjZXB0aW9uKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBpZiAoIW5ld0xlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisg
ICAgICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhl
eGVjLT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGlmIChuZXdMZW5n
dGggPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVYIC8vIFRoaXMgY2Fz
ZSBlbnN1cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KKyAgICAgICAgICAgIHx8IChuZXdM
ZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgICAgICYmICFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwgY291bnRFbGVtZW50c0luQ29udGlndW91cyht
X2J1dHRlcmZseSkpKSkgeworICAgICAgICAgICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwK
KyAgICAgICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmds
b2JhbERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChuZXdMZW5ndGggPiBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5n
dGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
fQorCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGgtLSkKKyAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxlbmd0
aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uZ2V0KCk7CisgICAgICAgIGlmICh2
YWx1ZSkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmNs
ZWFyKCk7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7
CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgCkBAIC00MzEsMjYgKzQ4OSwyOCBAQCBKU1ZhbHVlIEpTQXJy
YXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICAvLyBMZXQgZWxlbWVudCBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBhcmd1bWVudCBpbmR4LgotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5k
ZXgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5h
bCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgotICAgICAgICBpZiAo
IWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKLSAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ2Fs
bCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3Ro
IiwgaW5keCwgYW5kIHRydWUuCi0gICAgICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7
Ci0gICAgICAgIC8vIFJldHVybiBlbGVtZW50LgotICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBnZXRBcnJheUxlbmd0aCgp
OworICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRd
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgSlNWYWx1ZSBl
bGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIC8vIENhbGwgdGhlIFtbRGVsZXRl
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAg
ICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAvLyBDYWxsIHRoZSBbW1B1
dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBh
bmQgdHJ1ZS4KKyAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgIC8vIFJldHVy
biBlbGVtZW50LgorICAgIHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXgg
YXJlIGFsbW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtNDY0
LDYgKzUyNCwyNiBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1
b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7
CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAg
ICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZh
bHVlLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZh
bGlkIGFycmF5IGxlbmd0aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRo
b3V0QXR0cmlidXRlcyhleGVjLCBsZW5ndGgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAg
ICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogICAgICAgICBpZiAoYXR0ZW1w
dFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShleGVjLCBvbGRMZW5ndGgsIHZhbHVlLCB0cnVl
KSkgewpAQCAtNTA1LDEyICs1ODUsOCBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhCiAgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKK2Jvb2wgSlNBcnJh
eTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBU1NFUlQoY291bnQgPiAw
KTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9y
YWdlLT5sZW5ndGgoKTsKICAgICBBU1NFUlQoY291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAKQEAg
LTU2NSwxMCArNjQxLDYxIEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4
ZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFu
eUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50KQoreworICAgIEFTU0VSVChjb3VudCA+IDApOworICAgIAorICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3Vz
OiB7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKKyAgICAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CisgICAgICAgIAorICAg
ICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNo
aWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCisgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3Qg
aG9ycmlibHkgc2xvdy4KKyAgICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291
bnQpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3VudDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICAvLyBTdG9yaW5nIHRv
IGEgaG9sZSBpcyBmaW5lIHNpbmNlIHdlJ3JlIHN0aWxsIGhhdmluZyBhIGdvb2QgdGltZS4gQnV0
IHJlYWRpbmcKKyAgICAgICAgICAgIC8vIGZyb20gYSBob2xlIGlzIHRvdGFsbHkgbm90IGZpbmUs
IHNpbmNlIHdlIG1pZ2h0IGhhdmUgdG8gcmVhZCBmcm9tIHRoZSBwcm90bworICAgICAgICAgICAg
Ly8gY2hhaW4uCisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2kgKyBjb3VudF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRoIGlzIHRvIGVuc3VyZSB0
aGF0IHdlIGRvbid0IG1ha2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyBtaXN0YWtlIGlu
IHRoZSBmdXR1cmU6IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKCkgY2FuJ3QgZG8gYW55dGhp
bmcKKyAgICAgICAgICAgICAgICAvLyBhYm91dCBob2xlcyAoYXQgbGVhc3QgZm9yIG5vdyksIGJ1
dCBpdCBjYW4gZGV0ZWN0IHRoZW0gcXVpY2tseS4gU28KKyAgICAgICAgICAgICAgICAvLyB3ZSBj
b252ZXJ0IHRvIGFycmF5IHN0b3JhZ2UgYW5kIHRoZW4gYWxsb3cgdGhlIGFycmF5IHN0b3JhZ2Ug
cGF0aCB0bworICAgICAgICAgICAgICAgIC8vIGZpZ3VyZSBpdCBvdXQuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdl
J3JlIGp1c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQg
d2Ugd29uJ3QgaGF2ZSBhIGRlbGV0aW9uCisgICAgICAgICAgICAvLyBiYXJyaWVyLgorICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHYpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZDsgaSA8IG9sZExl
bmd0aDsgKytpKQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVh
cigpOworICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRM
ZW5ndGggLSBjb3VudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBzaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhh
bmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKLWJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiti
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOwogCiAgICAgQVNTRVJUKHN0YXJ0SW5kZXggPD0gbGVuZ3RoKTsKQEAgLTYxMCw2ICs3Mzcs
NDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleAogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5
cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkK
K3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
QXJyYXlDbGFzczoKKyAgICAgICAgLy8gV2UgY291bGQgaGFuZGxlIHRoaXMuIEJ1dCBpdCBzaG91
bGRuJ3QgZXZlciBjb21lIHVwLCBzbyB3ZSB3b24ndC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWdu
ZWQgb2xkTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSB1
bnNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvIHNvCisgICAgICAgIC8vIG9ubHkgaWYgaXQncyBu
b3QgaG9ycmlibHkgc2xvdy4KKyAgICAgICAgaWYgKG9sZExlbmd0aCAtIHN0YXJ0SW5kZXggPj0g
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKKyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAKKyAgICAgICAg
ZW5zdXJlQ29udGlndW91c0xlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG9sZExlbmd0aCArIGNv
dW50KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0t
ID4gc3RhcnRJbmRleDspIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0
YXJ0SW5kZXgsIGNvdW50LCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmds
b2JhbERhdGEoKSkpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsg
Y291bnRdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIE5PVEU6IHdlJ3JlIGxlYXZpbmcgYmVpbmcgZ2FyYmFnZSBpbiB0aGUgcGFydCBv
ZiB0aGUgYXJyYXkgdGhhdCB3ZSBzaGlmdGVkIG91dAorICAgICAgICAvLyBvZi4gVGhpcyBpcyBm
aW5lIGJlY2F1c2UgdGhlIGNhbGxlciBpcyByZXF1aXJlZCB0byBzdG9yZSBvdmVyIHRoYXQgYXJl
YSwgYW5kCisgICAgICAgIC8vIGluIGNvbnRpZ3VvdXMgbW9kZSBzdG9yaW5nIGludG8gYSBob2xl
IGlzIGd1YXJhbnRlZWQgdG8gYmVoYXZlIGV4YWN0bHkgdGhlIHNhbWUKKyAgICAgICAgLy8gYXMg
c3RvcmluZyBvdmVyIGFuIGV4aXN0aW5nIGVsZW1lbnQuCisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBzdGF0
aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCog
YikKIHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFz
TnVtYmVyKCk7CkBAIC02MjQsNiArNzkyLDQ1IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5n
UGFpckZvclFTb3J0KGMKICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZSh2YS0+c2Vjb25kLCB2
Yi0+c2Vjb25kKTsKIH0KIAordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3Zv
aWQgSlNBcnJheTo6c29ydE51bWVyaWNWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNv
bXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0
YSkKK3sKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aENvbnRpZ3VvdXMgfHwg
aW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgCisgICAgdW5zaWdu
ZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOworICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50
TGVuZ3RoOworICAgIGNvbXBhY3RGb3JTb3J0aW5nPGluZGV4aW5nVHlwZT4oCisgICAgICAgIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwKKyAgICAgICAgbmV3UmVsZXZhbnRMZW5ndGgpOwor
ICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YSA9IGluZGV4aW5nRGF0YTxpbmRl
eGluZ1R5cGU+KCk7CisgICAgCisgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2UgJiYgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICgh
ZGF0YVtpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBp
ZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBh
cmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAKKyAgICAvLyBGb3IgbnVtZXJp
YyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNv
cnQuIFdlCisgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwg
c2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3
YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgorICAgIHFzb3J0KGRh
dGEsIG5ld1JlbGV2YW50TGVuZ3RoLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29t
cGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgcmV0dXJuOworfQorCiB2b2lkIEpTQXJyYXk6OnNv
cnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxU
eXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAgQVNTRVJUKCFp
blNwYXJzZUluZGV4aW5nTW9kZSgpKTsKQEAgLTYzMiwxMTcgKzgzOSwxMjkgQEAgdm9pZCBKU0Fy
cmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIGNhc2UgQXJyYXlDbGFzczoKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
ewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0
Rm9yU29ydGluZygpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPihleGVjLCBjb21wYXJlRnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIHJldHVybjsKIAotICAgICAgICBB
U1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICAgICAgc2l6ZV90
IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVy
cyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCi0gICAgICAg
ICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBp
cyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgICAgIC8vIGFs
c28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8g
dXNlciB2aXNpYmxlCi0gICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9y
ZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1f
dmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJl
cnNGb3JRU29ydCk7Ci0gICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KGV4ZWMsIGNv
bXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKICAgICAgICAgcmV0dXJuOwotICAg
IH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLXZvaWQgSlNB
cnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgp
CiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKLSAgICAKLSAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJyYXlDbGFzczoK
KyAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gQ29u
dmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNv
IHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KKyAgICAvLyBU
aGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVy
IGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAgIC8v
IGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUg
b2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgLy8g
cmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcg
Y29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCiAgICAgICAgIAotICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgQVNTRVJUKCFzdG9y
YWdlLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8v
IENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZl
LCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAg
ICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0
d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5
Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNo
aW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0
dXJuCi0gICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZm
ZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAgICAgICAK
LSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCk7Ci0gICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhyZWxldmFudExlbmd0aCk7
CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBIZWFw
OjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogICAgICAgICAKLSAgICAgICAg
Ym9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFsdWVzW2ld
LmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICAgICAg
fQorICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGJlZ2luW2ldLmdldCgpOworICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVk
KCkpOworICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNTb3J0aW5n
UHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJp
bWl0aXZlKCk7CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dp
bmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBl
dmVuIGFmdGVyCi0gICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9u
LgorICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9T
dHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9TdHJpbmcg
Y2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAg
IHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhl
Yyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKQorICAg
ICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5l
KGV4ZWMpOwogICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0g
ICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgeworICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFs
dWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBi
ZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgICAg
IC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJp
bmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4g
VGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KICAgICAg
ICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVW
YWx1ZXMpCi0gICAgICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVz
LnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JR
U29ydCk7Ci0jZWxzZQotICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rp
b24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgICAgICAvLyBFQ01BU2Ny
aXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwg
YnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIGlmIChpc1NvcnRpbmdQcmltaXRp
dmVWYWx1ZXMpCiAgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBz
aXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAg
ICBlbHNlCisgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Cisj
ZWxzZQorICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkg
dG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCisgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qg
c3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0g
YSBzdGFibGUgc29ydC4KKyAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAj
ZW5kaWYKKyAgICAKKyAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUg
bGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKKyAgICAvLyBpbmNyZWFzZSB0
aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4K
KyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91
czoKKyAgICAgICAgZW5zdXJlQ29udGlndW91c0xlbmd0aChnbG9iYWxEYXRhLCByZWxldmFudExl
bmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHRvU3Ry
aW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0
b3JhZ2UsCi0gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmln
bmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsKLSAgICAgICAgICAgIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKTsKLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkgeworICAgICAgICAg
ICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFudExlbmd0
aCk7CisgICAgICAgICAgICBiZWdpbiA9IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKICAgICAg
ICAgfQotICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpCi0gICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8IHJl
bGV2YW50TGVuZ3RoKQorICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChyZWxl
dmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZh
bnRMZW5ndGg7IGkrKykKKyAgICAgICAgYmVnaW5baV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlc1tpXS5maXJzdCk7CisgICAgCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRW
ZWN0b3IoJnZhbHVlcyk7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoK
KyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAg
Y2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5ndGg7Cisg
ICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAg
ICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLCBuZXdSZWxldmFudExlbmd0aCk7CiAgICAg
ICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVz
KTsKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPigKKyAg
ICAgICAgICAgIGV4ZWMsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5ndGg7Cisg
ICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oCisgICAgICAg
ICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQsIG5ld1JlbGV2YW50TGVuZ3RoKTsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKICAgICAgICAgCisgICAg
ICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPigKKyAgICAgICAg
ICAgIGV4ZWMsIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyOCwxMDggKzEwNDcsMTE2
IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKICAgICBzdGF0aWMg
aGFuZGxlIG51bGwoKSB7IHJldHVybiAweDdGRkZGRkZGOyB9CiB9OwogCi12b2lkIEpTQXJyYXk6
OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUg
Y2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3RlbXBsYXRlPEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnRWZWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxE
YXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwor
ICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsK
ICAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNh
c2UgQXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2Vw
dGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAg
IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUg
ZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCiAgICAgICAgIAotICAgICAgICAvLyBUaGUgbWF4aW11
bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1
cCB0byBubyBnb29kCi0gICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAg
ICAgICAgQVNTRVJUKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwotICAgICAgICBpZiAoYXJy
YXlTdG9yYWdlKCktPmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIFRoZSBt
YXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVh
cmx5IHVwIHRvIG5vIGdvb2QKKyAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisg
ICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgIGlmIChtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgp
LCBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBBU1NFUlQoIWFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVz
ZWRWZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHJlbGV2YW50
TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKKyAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVj
dG9yTGVuZ3RoOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFub2RlQ291bnQpCisgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0
cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9j
b21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247Ci0gICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwotICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFj
dG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAy
XjMxIGl0ZW1zCisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOworICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwogICAgICAgICAKLSAgICAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5
cGVKUykKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIo
bmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24p
LCAyKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMu
YmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5t
X25vZGVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IElmIHRo
ZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBl
dGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVz
IHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCisgICAgLy8gRklYTUU6IElmIHRo
ZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBl
dGMuIGNvdWxkIGJlIG1vZGlmaWVkCisgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hp
bGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KICAgICAgICAgCi0gICAgICAgIHVuc2ln
bmVkIG51bURlZmluZWQgPSAwOwotICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwor
ICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9
IDA7CiAgICAgICAgIAotICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmlu
ZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcg
YWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICAgICAgZm9yICg7IG51bURlZmluZWQg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgICAgIGlmIChudW1E
ZWZpbmVkID4gYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
W251bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQo
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgdHJlZS5pbnNlcnQo
bnVtRGVmaW5lZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGkgPiBh
cnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVk
KCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251
bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVt
RGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKLSAgICAgICAgICAg
ICAgICB9CisgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2
YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBv
bmVzIGludG8gdGhlIHRyZWUuCisgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgaWYgKG51bURlZmluZWQgPiBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNWYWx1ZSB2
ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAg
ICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAg
ICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9
IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGkg
PiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5nZXQoKTsKKyAg
ICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAg
ICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAr
K251bURlZmluZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAgICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVu
ZGVmaW5lZDsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwKTsKKyAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZDsKICAgICAgICAgCi0gICAgICAgIC8vIFRoZSBhcnJheSBzaXplIG1heSBo
YXZlIGNoYW5nZWQuICBGaWd1cmUgb3V0IHRoZSBuZXcgYm91bmRzLgotICAgICAgICB1bnNpZ25l
ZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gbWluKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwg
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAvLyBUaGUgYXJyYXkgc2l6ZSBt
YXkgaGF2ZSBjaGFuZ2VkLiAgRmlndXJlIG91dCB0aGUgbmV3IGJvdW5kcy4KKyAgICB1bnNpZ25l
ZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdUeXBlPigp
OwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQg
PSBtaW4obWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG51bURlZmluZWQpLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkpKTsKLSAgICAgICAg
dW5zaWduZWQgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rv
ckxlbmd0aCwgbmV3VXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIHVuc2lnbmVkIGNsZWFyRWxl
bWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgdXNlZFZlY3Rvckxl
bmd0aCk7Ci0gICAgICAgIAotICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1f
c3RvcmFnZS4KLSAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFy
ZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJl
ZSk7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzVG9FeHRyYWN0VGhy
ZXNob2xkOyArK2kpIHsKLSAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFs
dWUpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgaSA8IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNo
b2xkOyArK2kpCi0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uc2V0VW5k
ZWZpbmVkKCk7Ci0KLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUg
dmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB1bmRlZmlu
ZWRFbGVtZW50c1RocmVzaG9sZDsgaSA8IGNsZWFyRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKLSAg
ICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAgIHVuc2ln
bmVkIGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkID0gbWluKG1pbihuZXdlc3RVc2VkVmVjdG9y
TGVuZ3RoLCBudW1EZWZpbmVkKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXMuc2l6ZSgpKSk7CisgICAgdW5zaWduZWQgdW5kZWZpbmVkRWxlbWVudHNUaHJl
c2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgbmV3VXNlZFZlY3Rvckxlbmd0aCk7
CisgICAgdW5zaWduZWQgY2xlYXJFbGVtZW50c1RocmVzaG9sZCA9IG1pbihuZXdlc3RVc2VkVmVj
dG9yTGVuZ3RoLCB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgCisgICAgLy8gQ29weSB0aGUg
dmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3Rv
ckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOworICAgIGl0ZXIuc3RhcnRfaXRl
cl9sZWFzdCh0cmVlKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzVG9FeHRyYWN0
VGhyZXNob2xkOyArK2kpIHsKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0u
dmFsdWUpOworICAgICAgICArK2l0ZXI7CisgICAgfQorICAgIC8vIFB1dCB1bmRlZmluZWQgdmFs
dWVzIGJhY2sgaW4uCisgICAgZm9yICh1bnNpZ25lZCBpID0gZWxlbWVudHNUb0V4dHJhY3RUaHJl
c2hvbGQ7IGkgPCB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgKytpKQorICAgICAgICBpbmRl
eGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldFVuZGVmaW5lZCgpOworCisgICAgLy8gRW5z
dXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgorICAg
IGZvciAodW5zaWduZWQgaSA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkOyBpIDwgY2xlYXJF
bGVtZW50c1RocmVzaG9sZDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBl
PigpW2ldLmNsZWFyKCk7CisgICAgCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5
cGUpKQorICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1Vz
ZWRWZWN0b3JMZW5ndGg7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERh
dGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7Cisg
ICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGFycmF5U3Rv
cmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yID0gdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7
CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBzb3J0VmVjdG9yPEFycmF5
V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
KTsKKyAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHNvcnRWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVjLCBjb21wYXJlRnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAgICAg
ICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTM4
LDExMyArMTE2NSwxMjEgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJn
dW1lbnRCdWZmZXImIGFyZ3MpCiB7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgdW5zaWduZWQg
dmVjdG9yRW5kOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOworICAgIAogICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNs
YXNzOgogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICB2ZWN0b3JFbmQgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CisgICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgICAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAg
ICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kp
IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAg
ICAgICAgICAgIGlmICghdikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKHYuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKDsg
aSA8IHN0b3JhZ2UtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChnZXQo
ZXhlYywgaSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHZlY3RvciA9IHN0b3JhZ2UtPm1f
dmVjdG9yOworICAgICAgICB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0go
KTsKICAgICB9CisgICAgCisgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgIGlmICghdikK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKKyAgICB9
CisgICAgCisgICAgZm9yICg7IGkgPCBsZW5ndGgoKTsgKytpKQorICAgICAgICBhcmdzLmFwcGVu
ZChnZXQoZXhlYywgaSkpOwogfQogCiB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1aW50MzJfdCBsZW5ndGgpCiB7Cisg
ICAgdW5zaWduZWQgaSA9IDA7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7Cisg
ICAgdW5zaWduZWQgdmVjdG9yRW5kOworICAgIAogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+
bGVuZ3RoKCkpOwogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpOworICAgICAgICB2ZWN0b3JFbmQgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRI
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKLSAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAg
ICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRB
cmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHZlY3Rv
ciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICBpZiAo
IXYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChp
LCB2LmdldCgpKTsKICAgICB9CisgICAgCisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKKyAg
ICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwogfQogCi11bnNp
Z25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyh1bnNpZ25lZCYg
bnVtRGVmaW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKQogewogICAgIEFTU0VSVCgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9PSBzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6Ci0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICAKLSAgICAg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIG15UmVsZXZhbnRMZW5ndGggPSBy
ZWxldmFudExlbmd0aDxpbmRleGluZ1R5cGU+KCk7CisgICAgCisgICAgbnVtRGVmaW5lZCA9IDA7
CisgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKICAgICAgICAgCi0gICAgICAgIHVuc2ln
bmVkIG51bURlZmluZWQgPSAwOwotICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwor
ICAgIGZvciAoOyBudW1EZWZpbmVkIDwgbXlSZWxldmFudExlbmd0aDsgKytudW1EZWZpbmVkKSB7
CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVm
aW5lZF0uZ2V0KCk7CisgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICAgICAgSlNWYWx1ZSB2
ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
IXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Ci0gICAgICAgICAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG15UmVsZXZhbnRMZW5n
dGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBl
PigpW2ldLmdldCgpOworICAgICAgICBpZiAodikgeworICAgICAgICAgICAgaWYgKHYuaXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251bURlZmlu
ZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRl
ZmluZWQ7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdV
c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRVbmRlZmluZWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxl
bmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmNsZWFyKCk7Ci0gICAgICAgIAotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBudW1EZWZpbmVkOwogICAgIH0KICAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KKyAgICBuZXdS
ZWxldmFudExlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgCisgICAgaWYg
KGhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKQorICAgICAgICBBU1NFUlQoIWFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IG5ld1JlbGV2YW50TGVuZ3RoOyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxp
bmRleGluZ1R5cGU+KClbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bmV3UmVsZXZhbnRMZW5ndGg7IGkgPCBteVJlbGV2YW50TGVuZ3RoOyArK2kpCisgICAgICAgIGlu
ZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uY2xlYXIoKTsKIAorICAgIGlmIChoYXNBcnJh
eVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBuZXdSZWxldmFudExlbmd0aDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAx
MzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDggKzcxLDU0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHB1c2goRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgcG9wKEV4ZWNTdGF0
ZSopOwogCi0gICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFy
dEluZGV4LCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAgICAgICAgZW51
bSBTaGlmdENvdW50TW9kZSB7CisgICAgICAgICAgICAvLyBUaGlzIGZvcm0gb2Ygc2hpZnQgaGlu
dHMgdGhhdCB3ZSdyZSBkb2luZyBxdWV1ZWluZy4gV2l0aCB0aGlzIGFzc3VtcHRpb24gaW4gaGFu
ZCwKKyAgICAgICAgICAgIC8vIHdlIGNvbnZlcnQgdG8gQXJyYXlTdG9yYWdlLCB3aGljaCBoYXMg
cXVldWUgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIFNoaWZ0Q291bnRGb3JTaGlmdCwKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBmb3JtIG9mIHNoaWZ0IGhpbnRzIHRoYXQg
d2UncmUganVzdCBkb2luZyBjYXJlIGFuZCBmZWVkaW5nIG9uIGFuIGFycmF5IHRoYXQKKyAgICAg
ICAgICAgIC8vIGlzIHByb2JhYmx5IHR5cGljYWxseSB1c2VkIGZvciBvcmRpbmFyeSBhY2Nlc3Nl
cy4gV2l0aCB0aGlzIGFzc3VtcHRpb24gaW4gaGFuZCwKKyAgICAgICAgICAgIC8vIHdlIHRyeSB0
byBwcmVzZXJ2ZSB3aGF0ZXZlciBpbmRleGluZyB0eXBlIGl0IGhhcyBhbHJlYWR5LgorICAgICAg
ICAgICAgU2hpZnRDb3VudEZvclNwbGljZQorICAgICAgICB9OworCisgICAgICAgIGJvb2wgc2hp
ZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
Pmdsb2JhbERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGJvb2wgc2hpZnRDb3VudEZvclNw
bGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
Z1R5cGUoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICB9CisgICAgICAgIHRlbXBs
YXRlPFNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgorICAgICAgICBib29sIHNoaWZ0Q291
bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzaGlmdENvdW50TW9kZSkgeworICAgICAg
ICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNo
aWZ0Q291bnRGb3JTaGlmdChleGVjLCBzdGFydEluZGV4LCBjb3VudCk7CisgICAgICAgICAgICBj
YXNlIFNoaWZ0Q291bnRGb3JTcGxpY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291
bnRGb3JTcGxpY2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHVuc2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgp
KSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTcGxpY2UoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoZXhl
Yywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlPFNoaWZ0
Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgorICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHNoaWZ0Q291bnRNb2RlKSB7CisgICAgICAgICAgICBj
YXNlIFNoaWZ0Q291bnRGb3JTaGlmdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENv
dW50Rm9yU2hpZnQoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgY2FzZSBT
aGlmdENvdW50Rm9yU3BsaWNlOgorICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRG
b3JTcGxpY2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciYpOwogICAgICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxs
RnJhbWUqLCB1aW50MzJfdCBsZW5ndGgpOwpAQCAtOTgsMTQgKzE0NCw0MCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1f
c3BhcnNlTWFwLmdldCgpOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNoaWZ0Q291
bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGNvdW50KTsKKyAgICAgICAgYm9vbCBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh1
bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKik7CiAKLSAg
ICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsK
LQorICAgICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJv
b2wgdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpOwogICAg
ICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIGJvb2wsIHVuc2ln
bmVkKTsKKworICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAg
ICAgICB2b2lkIHNvcnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFyZUZ1
bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKTsKKyAg
ICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAg
ICAgIHZvaWQgc29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0aCk7CisgICAgICAgIAorICAgICAg
ICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRW
ZWN0b3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25z
dCBDYWxsRGF0YSYpOworCisgICAgICAgIGJvb2wgc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5
U3RvcmFnZSopOworICAgICAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJv
b2wgd3JpdGFibGUpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNvcnRp
bmcoKTsKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAg
ICAgdm9pZCBjb21wYWN0Rm9yU29ydGluZyh1bnNpZ25lZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQm
IG5ld1JlbGV2YW50TGVuZ3RoKTsKICAgICB9OwogCisgICAgaW5saW5lIEJ1dHRlcmZseSogY3Jl
YXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOworICAg
ICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1Jf
TEVOKSk7CisgICAgICAgIGhlYWRlci5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAgIGdsb2Jh
bERhdGEsIDAsIDAsIHRydWUsIGhlYWRlciwgaGVhZGVyLnZlY3Rvckxlbmd0aCgpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAg
aW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKICAgICAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKQEAgLTEyMSw3ICsxOTMsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGgpCiAgICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFy
cmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpID09IEFycmF5V2l0aENvbnRpZ3VvdXMpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBj
cmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7
CisgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbExlbmd0aCA8IE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQorICAgICAgICAgICAg
ICAgICAgIHx8IChpbml0aWFsTGVuZ3RoICYmIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0g
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVB
cnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfQogICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+
KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJm
bHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAg
IHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMjEzLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRl
bXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAgICAgKmJ1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwg
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwotICAg
ICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBB
cnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICB2b2lkKiB0
ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICAg
ICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAw
LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgICpidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5n
dGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJp
YXMgPSAwOworICAgICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3
ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAg
bV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBK
U0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKIAogICAg
IG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Ci0g
ICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90
eXBlLmdldCgpLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKKyAgICBtX2FycmF5U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0
aENvbnRpZ3VvdXMpKTsKKyAgICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpKTsKICAgICBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlKSk7CiAgICAgbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAKQEAgLTQx
MCw2ICs0MTEsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpoYXZlQUJhZFRpbWUoSlNHbG9iCiAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIEpTQXJyYXkgYWxsb2NhdGlvbnMgdGhhdCBsb2FkIHRo
ZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgZnJvbQogICAgIC8vIHRoaXMgb2JqZWN0IG5vdyBsb2Fk
IGEgc3RydWN0dXJlIHRoYXQgdXNlcyBTbG93UHV0LgogICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsKKyAg
ICBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkpOwogICAgIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGFsbCBvYmplY3RzIHRoYXQgaGF2ZSBpbmRleGVkIHN0b3JhZ2Ugc3dpdGNoIHRvIHRo
ZSBzbG93IGtpbmQgb2YKICAgICAvLyBpbmRleGVkIHN0b3JhZ2UuCkBAIC00ODUsNiArNDg3LDcg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25hbWVTY29wZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fYXJndW1lbnRzU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZSk7CisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1
Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmFtZVNj
b3BlU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FyZ3VtZW50
c1N0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVj
dHVyZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBz
b29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCisgICAgICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyAvLyBUaGlzIGdl
dHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRl
IHRvIGhhdmUgYSBiYWQgdGltZS4KICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9h
cnJheVN0cnVjdHVyZUZvclNsb3dQdXQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlOwpAQCAtMjY3LDcgKzI2OCw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBTdHJ1Y3R1cmUqIG5hbWVTY29wZVN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZVNjb3BlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVj
dHVyZSogYXJndW1lbnRzU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNTdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgU3RydWN0dXJlKiBh
cnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2FycmF5U3Ry
dWN0dXJlV2l0aEFycmF5U3RvcmFnZS5nZXQoKTsgfQogICAgICAgICB2b2lkKiBhZGRyZXNzT2ZB
cnJheVN0cnVjdHVyZSgpIHsgcmV0dXJuICZtX2FycmF5U3RydWN0dXJlOyB9CisgICAgICAgIHZv
aWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIHsgcmV0dXJuICZt
X2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGJv
b2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Jvb2xlYW5PYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0NvbnN0cnVjdG9yU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQpAQCAtNDc5
LDcgKzQ4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0
cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBK
U0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaW5pdGlhbExlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYID8gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSA6IGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CiAgICAgfQogCiAg
ICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDI0ICsx
MzEsNDAgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAg
ICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkg
dGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgCisgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7CisgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7CisgICAgICAgICAgICBzaXplX3QgY291bnQ7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewor
ICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld0J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkg
PD0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgY291bnQg
PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCkpOwotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3Vy
cmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAg
ICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7
IGNvdW50LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVu
dFNvdXJjZSsrKS0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRl
QmFycmllcih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJl
bnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3I7CisgICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CkBAIC0xNTgsNiArMTc0
LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAK
ICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0
dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwKQpAQCAtMjM0LDYgKzI1MywyMCBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7
CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAg
CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpAQCAtMzUxLDYgKzM4
NCwxNiBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9wZXJ0eU5hbWVdLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgaWYgKHByb3BlcnR5
TmFtZSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgYnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgocHJvcGVydHlOYW1lICsgMSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTQ0Myw2ICs0
ODYsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogdm9pZCBK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIE5PVEU6IHRo
aXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQsIGFzIGl0IHdpbGwgcGVyZm9ybSB0d28gY29udmVy
c2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCisgICAgICAgIC8vIHRoaXMgY2FzZSBpZiB3ZSBldmVy
IGNhcmVkLgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjUsNiArNTEzLDI0IEBAIHZvaWQg
SlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWMKICAgICBnbG9iYWxPYmplY3QoKS0+
aGF2ZUFCYWRUaW1lKGdsb2JhbERhdGEpOwogfQogCitXcml0ZUJhcnJpZXI8VW5rbm93bj4qIEpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVY
KTsKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRU
eXBlKSk7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7
CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHZlY3Rvckxl
bmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBu
ZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7CisgICAgc2V0QnV0dGVyZmx5
KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3
QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cit9CisKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNy
ZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0g
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOwpAQCAtNDgwLDcgKzU0Niw3IEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICByZXN1bHQtPm1fc3BhcnNlTWFw
LmNsZWFyKCk7CiAgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICAgICByZXN1
bHQtPm1faW5kZXhCaWFzID0gMDsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkpOworICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0
aW9uKCkpOwogICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0
cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ5MCwxNiArNTU2LDk2IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIKICAgICByZXR1cm4gY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7CiB9CiAKK0FycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiwgdW5z
aWduZWQgbmVlZGVkTGVuZ3RoKQoreworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFj
aXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJv
cGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKKyAgICAKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAg
ICAgICAgZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOworICAgIAorICAgIG1lbWNweSgKKyAgICAgICAgbmV3
QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9i
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBwcm9w
ZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAKKyAgICBBcnJheVN0b3Jh
Z2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0
b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChuZWVkZWRMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPnNl
dExlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFy
KCk7CisgICAgbmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld1N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IHB1YmxpY0xlbmd0
aDsgaS0tOykgeworICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOworICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAg
ICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgIH0KKyAgICAKKyAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9uKTsKKyAgICBzZXRCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiBu
ZXdTdG9yYWdlOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPnN1Z2dl
c3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Cit9CisKK1dyaXRlQmFycmllcjxVbmtub3du
PiogSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhp
bmdTaG91bGRCZVNwYXJzZSgpIHx8IHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygp
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbENv
bnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMCk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgQVNT
RVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgICAgICBBU1NFUlQoIXN0cnVjdHVy
ZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRDb250
aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgIAogICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpKSkKICAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJl
dHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpl
bnN1cmVJbmRleGVkU3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGlmIChVTkxJS0VMWShzdHJ1Y3R1cmUoKS0+bmVl
ZHNTbG93UHV0SW5kZXhpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFy
cmF5U3RvcmFnZShnbG9iYWxEYXRhKS0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChVTkxJS0VM
WShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRh
KS0+YnV0dGVyZmx5KCk7CisgICAgICAgIHJldHVybiBCdXR0ZXJmbHk6OmZyb21Db250aWd1b3Vz
KGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApKTsKKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIH0KQEAgLTUwNyw2ICs2NTMsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
ZW5zdXJlQXJyYXlTdG9yYQogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIG1hZGUgd2F5IG1vcmUgZWZmaWNpZW50LCBpZiB3ZSBjYXJlZC4KKyAg
ICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VB
bHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOworICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hl
bkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpKTsKICAgICAgICAgCkBAIC01MjYsNiArNjc2LDExIEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKIHZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1
dEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwpAQCAtNTY5LDggKzcyNCw3
IEBAIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2JhbERhdGEKICAgICBpZiAoc2hv
dWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24oZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3Jh
Z2UpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUpOworICAgIHN3
aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKIH0KIAogYm9vbCBKU09iamVj
dDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKQEAgLTcwNCw2ICs4NTgsMTQgQEAgYm9vbCBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAg
ICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgIApAQCAtODc3LDYgKzEwMzksMTcgQEAgdm9pZCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+
bV9idXR0ZXJmbHk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5ndGggPSBidXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTEyNjYsNiArMTQzOSwzNSBAQCBib29sIEpT
T2JqZWN0OjphdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluCiAgICAgcmV0dXJuIGFzT2JqZWN0KHBy
b3RvdHlwZVZhbHVlKS0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3Rv
dHlwZShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCit2b2lkIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1
dGVzKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgCisgICAgLy8gRm9yIHVzIHRv
IGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxl
bmd0aCwgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5n
dGguCisgICAgQVNTRVJUKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAK
KyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
CisgICAgaWYgKGkgPj0gTUFYX0FSUkFZX0lOREVYIC0gMQorICAgICAgICB8fCAoaSA+PSBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYCisgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihpLCBjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKG1fYnV0dGVyZmx5KSkpKSB7CisgICAgICAg
IEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2Jh
bERhdGEpOworICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxz
ZSk7CisgICAgICAgIEFTU0VSVChpID49IGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSk7CisgICAg
ICAgIGFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZW5zdXJlQ29udGlndW91c0xlbmd0aChnbG9iYWxEYXRhLCBpICsgMSk7CisK
KyAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworfQor
CiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzQ4LDE3ICsxNTUwLDI5IEBAIHZv
aWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpIHsKLSAgICAgICAg
ICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewotICAgICAg
ICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
aSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwg
MCkpOworICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAg
ICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAg
ICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhLCAwLCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAg
ICAgICBpZiAoc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91
cyhnbG9iYWxEYXRhLCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JM
ZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IDE7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAg
ICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1
dGVzKGV4ZWMsIGksIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTEzODQsOCArMTU5OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuCiBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlKQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLQorICAgIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaGFzQXJy
YXlTdG9yYWdlKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChhcnJh
eVN0b3JhZ2UoKSA9PSBzdG9yYWdlKTsKICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSB8fCBhdHRyaWJ1dGVzKTsKICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
OwogCkBAIC0xNDY3LDE0ICsxNjgzLDMyIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG8KICAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIGlmIChp
bmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRlcykKLSAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
aSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7Ci0gICAgICAgIGlmICghaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCi0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwotICAgICAgICAKLSAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBn
ZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNl
KCkgfHwgYXR0cmlidXRlcykgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1v
ZGUsIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAgICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGln
dW91cyhnbG9iYWxEYXRhLCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRP
bmx5IHwgQWNjZXNzb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDk5LDEyICsxNzMzLDcgQEAgQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIGVsc2UgaWYgKCFjdXJyZW50VmVj
dG9yTGVuZ3RoKQogICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVu
Z3RoLCBsYXN0QXJyYXlTaXplKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2Fs
bHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVu
Z3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2Vk
TGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRo
aXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3Jl
YXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNp
cmVkTGVuZ3RoICYgMSk7CisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHRpbWVzVGhyZWVQbHVz
T25lRGl2aWRlZEJ5VHdvKGRlc2lyZWRMZW5ndGgpOwogICAgIH0KIAogICAgIEFTU0VSVChpbmNy
ZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CkBAIC0xNTI0LDkgKzE3NTMsMTAgQEAgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgICAgICB2ZWN0b3JMZW5n
dGggPSAwOwogICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFT
SCgpOwpAQCAtMTUzNSw2ICsxNzY1LDE2IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmpl
Y3Q6OmdldE5ld1YKICAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwg
bGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKIH0KIAordW5zaWduZWQgSlNPYmplY3Q6OmNvdW50RWxl
bWVudHNJbkNvbnRpZ3VvdXMoQnV0dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgdW5zaWduZWQg
bnVtVmFsdWVzID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOyBpLS07KSB7CisgICAgICAgIGlmIChidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkK
KyAgICAgICAgICAgIG51bVZhbHVlcysrOworICAgIH0KKyAgICByZXR1cm4gbnVtVmFsdWVzOwor
fQorCiBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxl
YXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1
c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcApAQCAt
MTU0Myw2ICsxNzgzLDEwIEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpT
R2wKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YXJyYXlTdG9yYWdlKCk7CisgICAgCisgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYCisgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOwpAQCAtMTU3NCw2ICsx
ODE4LDIyIEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c0xlbmd0aFNs
b3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNT
RVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgCisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVu
Z3RoID0gc3RkOjptaW4oCisgICAgICAgIGxlbmd0aCA8PCAxLAorICAgICAgICBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKTsKKyAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJy
YXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAorICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICBuZXdWZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVu
Z3RoKG5ld1ZlY3Rvckxlbmd0aCk7Cit9CisKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRP
ZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CkBAIC0xNjAy
LDYgKzE4NjIsMTcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAog
ICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAg
ICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgMCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw4ICsxNDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTYxLDggKzE2Miw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDcsNiArMjA5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
OwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTgsNiArMjIyLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNjcsOSArMjczLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgICAgIHJldHVy
biBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgICAgICByZXR1
cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkKQEAgLTI4
NSw4ICsyOTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NiwxNSArMzA0LDIzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAg
ICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwotICAgICAg
ICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
OworICAgICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsKKyAgICAgICAgICAgICAg
ICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZCkg
ewogICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MzE1LDYgKzMzMSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpbml0aWFsaXpl
SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CkBA
IC0zMzEsNiArMzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKQEAg
LTM0NCw2ICszNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOwpA
QCAtNTQxLDYgKzU2NSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gZm9vLT5hdHRl
bXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKC4uLik7CiAgICAgICAgIGJvb2wgYXR0ZW1w
dFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgMCBpZiBjb250aWd1b3VzIHN0
b3JhZ2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQorICAgICAgICAvLyBpbmRl
eGluZyBzaG91bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUu
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91cyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9k
ZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCiAgICAgICAgIC8vIHRoaXMgaWYgeW91
J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhl
CiAgICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdl
LCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdApAQCAtNTUzLDYgKzU4NywxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEp
OwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKExJS0VMWShoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZs
eU9mZnNldCgpCkBAIC02MTUsMTEgKzY1NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSog
Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNp
Z25lZCBuZWVkZWRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRh
Jik7CiAgICAgICAgIAogICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhj
ZXB0aW9uKTsKIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250
aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKTsKICAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOwogCiAgICAgICAgIGJvb2wgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKQEAgLTYz
MCw2ICs2NzcsNTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbm90aWZ5UHJlc2Vu
Y2VPZkluZGV4ZWRBY2Nlc3NvcnMoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBi
b29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgaW5kZXgsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAg
Ly8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2tseSB0byBzdWNjZWVkIGFuZCB5
b3UncmUgc3VyZSB0aGF0CisgICAgICAgIC8vIHRoZSBhcnJheSBpcyBjb250aWd1b3VzLgorICAg
ICAgICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChsZW5ndGgg
PCBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAg
ZW5zdXJlQ29udGlndW91c0xlbmd0aFNsb3coZ2xvYmFsRGF0YSwgbGVuZ3RoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0
aCkKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHNJbkNv
bnRpZ3VvdXMoQnV0dGVyZmx5KiBidXR0ZXJmbHkpOworICAgICAgICAKKyAgICAgICAgdGVtcGxh
dGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBpbmRleGluZ0RhdGEoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWluKAorICAgICAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTY2NCw3ICs3
NjEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAg
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91c1Nsb3coSlNH
bG9iYWxEYXRhJik7CiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFn
ZVNsb3coSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
QnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IHZvaWQgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4ZWMKIAogY2hhciogSlNWYWx1
ZTo6ZGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9
IDEyODsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7CiAgICAgc3RhdGljIGNo
YXIgZGVzY3JpcHRpb25bc2l6ZV07CiAKICAgICBpZiAoISp0aGlzKQpAQCAtMjEzLDkgKzIxMywx
MiBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgICAgIHUuYXNEb3Vi
bGUgPSBhc0RvdWJsZSgpOwogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRv
dWJsZTogJTA4eDolMDh4LCAlbGYiLCB1LmFzVHdvSW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBd
LCBhc0RvdWJsZSgpKTsKICNlbmRpZgotICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpCi0gICAgICAg
IHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiQ2VsbDogJXAiLCBhc0NlbGwoKSk7Ci0gICAg
ZWxzZSBpZiAoaXNUcnVlKCkpCisgICAgfSBlbHNlIGlmIChpc0NlbGwoKSkgeworICAgICAgICBz
bnByaW50ZigKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBzaXplLCAiQ2VsbDogJXAgKCVwOiAl
cywgJXMpIiwKKyAgICAgICAgICAgIGFzQ2VsbCgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCksIGFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwKKyAgICAgICAgICAg
IGluZGV4aW5nVHlwZVRvU3RyaW5nKGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSgpKSk7CisgICAgfSBlbHNlIGlmIChpc1RydWUoKSkKICAgICAgICAg
c25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJUcnVlIik7CiAgICAgZWxzZSBpZiAoaXNGYWxz
ZSgpKQogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkZhbHNlIik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQog
I2lmICFFTkFCTEUoWUFSUl9KSVQpCiAgICAgdXNlUmVnRXhwSklUKCkgPSBmYWxzZTsKICNlbmRp
ZgotCisgICAgCiAgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRlZCBhbmQgbWFrZSBj
b3JyZWN0aW9ucyB0byB0aGUgb3B0aW9uczoKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkp
OwogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPj0gdGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsMTEgKzMy
MywxNSBAQCBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyCiAgICAgfQog
fQogCi1Ob25Qcm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRJbmRleGluZ1Ry
YW5zaXRpb24oKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dEluZGV4aW5nKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgp
KSk7Ci0gICAgCi0gICAgaWYgKGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNj
ZXNzZXMoKSB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpKQorICAgIHJldHVy
biBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKKyAgICAgICAg
fHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKTsKK30KKworTm9uUHJvcGVydHlU
cmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNv
bnN0Cit7CisgICAgaWYgKG5lZWRzU2xvd1B1dEluZGV4aW5nKCkpCiAgICAgICAgIHJldHVybiBB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgCiAgICAgcmV0dXJuIEFsbG9jYXRlQXJy
YXlTdG9yYWdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIE5vblByb3BlcnR5VHJh
bnNpdGlvbiBzdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSBjb25zdDsKKyAgICAgICAgYm9v
bCBuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0OworICAgICAgICBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0OwogICAgICAgICAK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2ds
b2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmkKIC8v
IFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3Qg
cmVsYXRlZCB0byBwcm9wZXJ0aWVzLgogLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUg
c3RyaW5nIHBvcnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KIGVudW0gTm9uUHJvcGVydHlU
cmFuc2l0aW9uIHsKKyAgICBBbGxvY2F0ZUNvbnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0
b3JhZ2UsCiAgICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZSwKQEAgLTU3LDEyICs1OCwxNiBAQCBpbmxpbmUgdW5zaWduZWQgdG9B
dHRyaWJ1dGVzKE5vblByb3BlcnR5CiBpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlw
ZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24p
CiB7CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3Vv
dXM6CisgICAgICAgIEFTU0VSVCghKG9sZFR5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xv
d1B1dEFycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1
b3VzOwogICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRU
eXBlIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29u
dGlndW91cykgfCBIYXNBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxvY2F0ZVNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAg
ICAgICAgQVNTRVJUKG9sZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICBBU1NFUlQo
IShvbGRUeXBlICYgSGFzQ29udGlndW91cykpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+
SGFzQXJyYXlTdG9yYWdlKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBZGRJ
bmRleGVkQWNjZXNzb3JzOgogICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVk
QWNjZXNzb3JzOwpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291
cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGhhc1R3b08KICAgICByZXR1cm4g
IWhhc1plcm9Pck9uZUJpdHNTZXQodmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgVCB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhUIHZhbHVlKQoreworICAgIC8v
IE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgLy8gICAodmFsdWUgKiAzICsgMSkg
LyAyOworICAgIC8vIG9yOgorICAgIC8vICAgKHVuc2lnbmVkKWNlaWwodmFsdWUgKiAxLjUpKTsK
KyAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAg
IHJldHVybiB2YWx1ZSArICh2YWx1ZSA+PiAxKSArICh2YWx1ZSAmIDEpOworfQorCiAjaWYgIUNP
TVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhT1MoU09MQVJJUykKIHVzaW5nIHN0
ZDo6aXNmaW5pdGU7CiAjaWYgIUNPTVBJTEVSX1FVSVJLKEdDQzExX0dMT0JBTF9JU0lORl9JU05B
TikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167462</attachid>
            <date>2012-10-06 15:32:23 -0700</date>
            <delta_ts>2012-10-07 22:03:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>holycontiguous_7.patch</filename>
            <type>text/plain</type>
            <size>310996</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NyBA
QAorMjAxMi0xMC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcga2luZCBvZiBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgY2FsbGVkIENvbnRpZ3VvdXMsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgIAorICAgICAgICAtIE5vIGhlYWRlciBiaXRzIGJleW9uZCBJ
bmRleGVkSGVhZGVyLiBUaGlzIHJlc3VsdHMgaW4gYSAxNiBieXRlIHJlZHVjdGlvbgorICAgICAg
ICAgIGluIG1lbW9yeSB1c2FnZSBwZXIgYXJyYXkgdmVyc3VzIGFuIEFycmF5U3RvcmFnZSBhcnJh
eS4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHRoYXQgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBm
b3IgYW4gZW1wdHkgYXJyYXkgaXMgbm93IGp1c3QgMyAqIDggb24gYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LiBPZiB0aGF0LCBvbmx5IDggYnl0ZXMgYXJlIGFycmF5LXNwZWNpZmlj
OyB0aGUgcmVzdCBpcworICAgICAgICAgIG91ciBzdGFuZGFyZCBvYmplY3QgaGVhZGVyIG92ZXJo
ZWFkLgorICAgICAgICAKKyAgICAgICAgLSBObyBuZWVkIGZvciBob2xlIGNoZWNrcyBvbiBzdG9y
ZS4gVGhpcyByZXN1bHRzIGluIGEgfjQlIHNwZWVkLXVwIG9uCisgICAgICAgICAgS3Jha2VuIGFu
ZCBhIH4xJSBzcGVlZC11cCBvbiBWOHY3LgorICAgICAgICAKKyAgICAgICAgLSBwdWJsaWNMZW5n
dGggPD0gdmVjdG9yTGVuZ3RoLiBUaGlzIG1lYW5zIHRoYXQgZG9pbmcgbmV3IEFycmF5KGJsYWgp
CisgICAgICAgICAgaW1tZWRpYXRlbHkgYWxsb2NhdGVzIHJvb20gZm9yIGJsYWggZWxlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIE5vIHNwYXJzZSBtYXAgb3IgaW5kZXggYmlhcy4KKyAgICAg
ICAgCisgICAgICAgIElmIHlvdSBldmVyIGRvIHRoaW5ncyB0byBhbiBhcnJheSB0aGF0IHdvdWxk
IHJlcXVpcmUgcHVibGljTGVuZ3RoID4KKyAgICAgICAgdmVjdG9yTGVuZ3RoLCBhIHNwYXJzZSBt
YXAsIG9yIGluZGV4IGJpYXMsIHRoZW4gd2Ugc3dpdGNoIHRvIEFycmF5U3RvcmFnZQorICAgICAg
ICBtb2RlLiBUaGlzIGhhcHBlbnMgc2VlbXMgdG8gbmV2ZXIgaGFwcGVuIGluIGFueSBiZW5jaG1h
cmsgd2UgdHJhY2ssIGFuZAorICAgICAgICBpcyB1bmxpa2VseSB0byBoYXBwZW4gdmVyeSBmcmVx
dWVudGx5IG9uIGFueSB3ZWJzaXRlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dDo6YXBwZW5kKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNo
YWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZSk6CisgICAgICAg
IChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFsSW5mbyk6CisgICAg
ICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9m
QnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZCeVZhbEluZm9z
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6bW9kZVRvU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6REZHOjptb2RlSXNKU0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRz
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHlt
b3JwaGljKToKKyAgICAgICAgKEpTQzo6REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91
cyk6CisgICAgICAgIChKU0M6OkRGRzo6cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1
Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICog
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJhdGlvbik6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQ
dXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFs
KToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3Vv
dXNHZXRCeVZhbCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoU2FtcGxpbmdTY29wZSk6CisgICAg
ICAgIChKU0M6OlNhbXBsaW5nU2NvcGU6OlNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpT
YW1wbGluZ1Njb3BlOjp+U2FtcGxpbmdTY29wZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6
OkJ5VmFsQ29tcGlsYXRpb25JbmZvOjpCeVZhbENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChC
eVZhbENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSklUKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZSk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjphcnJheVByb2ZpbGVTYXcpOgorICAgICAgICAoSlNDOjpKSVQ6OmNob29z
ZUFycmF5TW9kZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9uZXdfYXJyYXkpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFy
cmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2V0QnlWYWwpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJf
RlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpwdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50
aW9ucy5oOgorICAgICAgICAoSlNDOjppc0RlbnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChK
U0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQpOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jVW5TaGlmdCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAg
KEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
Y29udGlndW91cyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUNvbnRpZ3VvdXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToK
KyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjppbmRleGluZ1R5cGVUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9J
bmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc0NvbnRpZ3Vv
dXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
ZXRMZW5ndGgpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENv
dW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnRWZWN0b3IpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNv
cHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5n
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudEZv
clNwbGljZSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hp
ZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNoaWZ0KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9yU3BsaWNlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVD
b250aWd1b3VzU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
Z2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlU2xv
dyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c3dp
dGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFBy
b3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dp
dGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3Vu
dEVsZW1lbnRzSW5Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNl
VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNM
ZW5ndGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
blNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpz
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlhbGl6ZUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1NwYXJzZU1hcCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5kZXhp
bmdEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlbGV2YW50TGVuZ3RoKToKKyAgICAg
ICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlw
dGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dEluZGV4aW5nKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVy
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6bmV3SW5kZXhpbmdUeXBlKToKKwogMjAxMi0xMC0wNSAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIHdh
eSB0byBnYXRoZXIgYW5kIGxvZyBIZWFwIG1lbW9yeSB1c2UgYW5kIHBhdXNlIHRpbWVzCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKIAkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJG
MUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdElu
ZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMzMTVG
NkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsKIAkJMEYwRkM0
NUExNEJEMTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQg
LyogTExJbnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNF
MDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1
RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYxNjAxNUQxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTY1LDYgKzE2Niw3IEBACiAJCTBGN0IyOTRCMTRDM0NEMkYw
MDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMjk0QzE0QzNDRDQzMDA3QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYwMjAw
MDQ3MkE5IC8qIERGR0J5dGVDb2RlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29t
bW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMw
OTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDBDMTU3RUUwOUYwMDRB
NEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcCAqLzsgfTsKIAkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpT
U3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUxNTdG
MzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9OwpAQCAt
ODQ4LDYgKzg1MCw3IEBACiAJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJ
bmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5k
ZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUw
MDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0lu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxsTGlua0luZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3
IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmRleGluZ1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1
RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
NjAxNUIxNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkzOCw2ICs5NDEsNyBAQAogCQkwRjc3
MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RC
MSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU3ltYm9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjEwOCw3ICsyMTEyLDYgQEAKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcg
LyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBG
NyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0
NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAotCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIx
QTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIw
MDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1
MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3
NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCkBAIC0yMTE2LDYgKzIxMTksNyBAQAogCQkJCTkz
M0EzNDlBMDM4QUU3QzYwMDg2MzVDRSAvKiBJZGVudGlmaWVyLmggKi8sCiAJCQkJMEZCN0YzOEQx
NUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggKi8sCiAJCQkJMEZCN0YzOEUxNUVE
OEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBG
MTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdG
MzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKIAkJCQlFMTc4NjM2QzBE
OUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYz
M0YwRDlCRUMwMDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKQEAgLTIyNzQs
NiArMjI3OCw3IEBACiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5o
ICovLAogCQkJCTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJ
CQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUMy
RDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJ
KTsKIAkJCXBhdGggPSBydW50aW1lOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0
ODAsNiArMjQ4NSw3IEBACiAJCQkJMEY2Mzk0NTExNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJv
ZmlsZS5jcHAgKi8sCiAJCQkJMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmls
ZS5oICovLAogCQkJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRp
b25zLmggKi8sCisJCQkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICov
LAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAog
CQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywKIAkJCQkw
RjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwICovLApAQCAtMjk1
OSw2ICsyOTY1LDcgQEAKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMw
IC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyNTUzRDIx
NjEzNkUxQTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU0MUIy
MTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwpAQCAtMzU2NSw2ICszNTcyLDcgQEAKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyog
TExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4
OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRB
OTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxM0UwNEUxNjE2
NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1
NDFCMTE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2NCw3ICs1NjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChqdW1w
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBhcHBlbmQoSnVtcExpc3QmIG90
aGVyKQorICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBKdW1wTGlzdCYgb3RoZXIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fanVtcHMuYXBwZW5kKG90aGVyLm1fanVtcHMuYmVnaW4oKSwgb3Ro
ZXIubV9qdW1wcy5zaXplKCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzOSw2ICsyMzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIFBhdGNoYWJsZUp1bXAoanVtcCgpKTsKICAgICB9CisKKyAgICBQYXRjaGFibGVKdW1wIHBh
dGNoYWJsZUJyYW5jaFRlc3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcs
IFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBQYXRjaGFibGVKdW1wKGJyYW5jaFRlc3QzMihjb25kLCByZWcsIG1hc2spKTsKKyAgICB9
CiAjZW5kaWYKIAogICAgIHZvaWQganVtcChMYWJlbCB0YXJnZXQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQnlWYWxJbmZvX2gKKyNkZWZpbmUgQnlWYWxJbmZvX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVMb2NhdGlv
bi5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5l
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEpJVEFycmF5TW9kZSB7IEpJVENvbnRpZ3Vv
dXMsIEpJVEFycmF5U3RvcmFnZSB9OworCitpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5kZXhp
bmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChpbmRleGlu
Z1R5cGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgIGNh
c2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CitpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEpJVENv
bnRpZ3VvdXM7CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3JhZ2U7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CisgICAgfQorfQorCitz
dHJ1Y3QgQnlWYWxJbmZvIHsKKyAgICBCeVZhbEluZm8oKSB7IH0KKyAgICAKKyAgICBCeVZhbElu
Zm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcCwg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSwgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZSwgaW50MTZf
dCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAgICAgICAgOiBieXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpCisgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCisgICAgICAgICwg
YXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAgICAgLCBiYWRUeXBlSnVtcFRvRG9uZShiYWRUeXBl
SnVtcFRvRG9uZSkKKyAgICAgICAgLCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aChyZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXg7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcDsKKyAgICBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlOyAvLyBUaGUgYXJyYXkgbW9kZSB0aGF0IHdhcyBiYWtlZCBpbnRvIHRoZSBp
bmxpbmUgSklUIGNvZGUuCisgICAgaW50MTZfdCBiYWRUeXBlSnVtcFRvRG9uZTsKKyAgICBpbnQx
Nl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmU7Cit9OworCitpbmxpbmUgdW5zaWduZWQgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJ
bmRleChCeVZhbEluZm8qIGluZm8pCit7CisgICAgcmV0dXJuIGluZm8tPmJ5dGVjb2RlSW5kZXg7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2Vu
ZGlmIC8vIEJ5VmFsSW5mb19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2RlZmluZSBDb2RlQmxvY2tfaAogCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVk
ZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1
ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
T2Zmc2V0LmgiCkBAIC0yMDksNiArMjEwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgICAgICAKKyAgICAgICAgQnlWYWxJbmZvJiBnZXRCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5
VmFsSW5mbywgdW5zaWduZWQsIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXg+KG1fYnlWYWxJbmZv
cy5iZWdpbigpLCBtX2J5VmFsSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAg
IH0KIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAgLTYxMCw2ICs2MTYsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6
ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQogICAgICAgICBz
aXplX3QgbnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZVN0dWJJbmZvcy5zaXplKCk7IH0KICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0cnVj
dHVyZVN0dWJJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3NbaW5k
ZXhdOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldE51bWJlck9mQnlWYWxJbmZvcyhzaXpl
X3Qgc2l6ZSkgeyBtX2J5VmFsSW5mb3MuZ3JvdyhzaXplKTsgfQorICAgICAgICBzaXplX3QgbnVt
YmVyT2ZCeVZhbEluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9ieVZhbEluZm9zLnNpemUoKTsgfQor
ICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyhzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYnlW
YWxJbmZvc1tpbmRleF07IH0KIAogICAgICAgICB2b2lkIGFkZEdsb2JhbFJlc29sdmVJbmZvKHVu
c2lnbmVkIGdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbikKICAgICAgICAgewpAQCAtMTI4OSw2ICsx
Mjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQogICAgICAg
ICBWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+IG1fc3RydWN0dXJlU3R1YkluZm9zOworICAgICAg
ICBWZWN0b3I8QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7CiAgICAgICAgIFZlY3RvcjxHbG9iYWxS
ZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5mb3M7CiAgICAgICAgIFZlY3RvcjxDYWxsTGlu
a0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxMaW5rSW5m
bz4gbV9tZXRob2RDYWxsTGlua0luZm9zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0
cnVtLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTksMTcgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9CT1VO
RFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVT
OgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAg
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2Ug
U0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMyw5IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkxNSw2ICs5MjMsNyBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CiAgICAg
ICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKICAgICAgICAg
RWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBzd2l0
Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsKQEAgLTkyNCwxMSArOTMzLDE4IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBB
cnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTl9CT1VO
RFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9E
RVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAg
IGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNlIFBP
TFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
Q2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzODMsOSBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBI
SUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBmb3IgR2V0QXJyYXlMZW5n
dGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1
bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNr
aW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5
ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5j
bGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSwxNCBAQCBBcnJh
eTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgICAgIHJldHVybiBBcnJh
eTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6CiAgICAgICAg
IGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRl
eGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0FycmF5U3Rv
cmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1dCBt
b2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAgICAgICAgICByZXR1cm4g
QXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8vIEZJWE1FOiB3ZSBkb24n
dCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBub3QuIFdlJ3JlIGd1ZXNz
aW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAgcmV0dXJuIEFycmF5OjpV
bmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk6
CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHMg
OiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWlsIDog
QXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRp
Z3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsKKyAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0
b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIDog
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8g
QXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xl
KCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFycmF5U3RvcmFnZSk7CiAg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CkBA
IC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBw
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgog
ICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJyYXk6
OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAg
ICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRp
Z3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJl
dHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJv
ZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4g
QXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRl
ZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJy
YXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
KToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUlu
dGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFu
a1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3Jp
dGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQogICAgICAgICAg
ICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAtMTQ0LDYgKzE2NCwyMiBA
QCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91
bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJl
dHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAg
ICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNU
b1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgor
ICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9u
KCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0
cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Ns
b3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAg
ICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNl
IEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CkBA
IC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBt
b2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Cisg
ICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1Rv
VGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c091dE9m
Qm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBy
ZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c1RvVGFp
bCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAg
ICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAg
cmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9s
ZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6
TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM6CisgICAgICAg
IHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJh
eVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3RvcmFnZSI7CiAgICAgY2Fz
ZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxh
bmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1
b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgor
ICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFy
cmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiUG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
aAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAgZW51bSBNb2RlIHsKICAg
ICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQgc3Rv
cmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5nLgorICAgIENvbnRpZ3Vv
dXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBDb250aWd1b3VzT3V0T2ZCb3VuZHMsCisg
ICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAor
ICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAg
IFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAogICAgIEFycmF5U3RvcmFn
ZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFycmF5U3RvcmFnZSwKQEAg
LTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5k
ZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KKyAgICBCbGFu
a1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAogICAgIEJsYW5rVG9TbG93
UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisg
ICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhpYyBhcnJheSBzdG9yYWdl
LiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hlY2tpbmcgb3Igc3RvcmFn
ZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aENvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LApAQCAtODks
NiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2Ui
IGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3RpbmcgY2hl
Y2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5lIEFMTF9DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05fQVJS
QVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNh
c2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19DT05USUdV
T1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91
czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5lIENPTlRJR1VPVVNfVE9f
VEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGln
dW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCisjZGVmaW5lIE9VVF9P
Rl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJh
eTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMK
ICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAg
ICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0gTW9kZSB7CiAjZGVmaW5l
IEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCisjZGVmaW5lIElOX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJh
eTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZpbmUg
QVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAg
ICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9s
ZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCiAgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwogCiAvLyBO
ZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIEVGRkVDVEZV
TF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJyYXk6OkJsYW5rVG9BcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09OVElH
VU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0NvbnRp
Z3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAg
ICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3Jh
Z2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgIFwKKyNk
ZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAg
XAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUwotI2RlZmluZSBT
TE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAorI2RlZmluZSBTTE9XX1BV
VF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICBcCiAgICAgQXJyYXk6
OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIFBPTFlNT1JQSElDX0VGRkVDVEZV
TF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0NvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfRUZGRUNURlVMX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01P
REVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJS
QVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBISUNf
RUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhlbHBlcnMgZm9yIHBvbHltb3JwaGljIGFy
cmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9QT0xZTU9SUEhJQ19N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQT0xZTU9SUEhJQ19FRkZF
Q1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUE9MWU1P
UlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSosIEFy
cmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBAIC0xNDUsOCArMjAzLDEwIEBAIGNvbnN0
IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1
dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9E
RVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZseShB
cnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQVJSQVlfV0lUSF9DT05U
SUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOgor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXIK
IGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewog
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdF
X01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMTg0LDE4ICsy
NDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFycmF5OjpNb2RlIAogICAgIH0K
IH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQor
eworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBI
SUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFycmF5
OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewogICAgIGNhc2Ug
QVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFM
TF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgbW9kZUlzUG9s
eW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgcG9s
eW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAg
IEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRlc0Fy
cmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChh
cnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOworICAgIHJldHVybiB0cnVl
OworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkK
IHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtMjA0LDYgKzMwNiw3IEBAIGlubGluZSBi
b29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OSw3ICszNTIsMTEgQEAg
aW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAgIGNhc2UgQXJyYXk6
OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzoKICAgICBjYXNl
IE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9N
T0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1v
CiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBtb2Rl
KQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIFBP
TFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNlIEFy
cmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKQEAgLTI3Myw3ICsz
ODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBCiBpbmxpbmUg
Ym9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkg
ewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTc0LDYgKzE1NzQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
Ym9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRvR3Jh
cGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0xNTk3LDYgKzE1OTksOCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAg
Tm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9k
ZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDkgKzM1OSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBwcm9w
ZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZhbC4K
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgotICAg
ICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3Rpbmcg
ZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGlu
ZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSArMTIx
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVk
Z2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVk
Z2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlm
IChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlTcGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJl
ZGljdGlvbigpKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNob3Vs
ZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShu
b2RlLmFycmF5TW9kZSgpKSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihjaGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4KCkp
OwogICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2Rl
UHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVkc1N0
b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZUluZGV4
IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9k
ZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9Ob2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQ
dHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2Rl
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEzNywx
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRp
b24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAg
ICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAg
ICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxk
MSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwg
bm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIDMpOworICAgICAgICAgICAgYmxlc3NB
cnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgICAg
ICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlSW5k
ZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wgKCpz
dG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2Vu
ZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRleCBp
bmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwg
Ym9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewogICAgICAgICBBU1NFUlQobW9kZUlz
U3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihhcnJh
eSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAg
IE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBh
cnJheSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgICAg
IG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnks
IGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAgICAg
ICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2UgYmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0ZXJm
bHkuCiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2UgaXQn
cyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXggPSBt
X2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCArNDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwg
T3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9yYWdl
Q2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBp
bmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQogICAgIHsKICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGls
ZUluZGV4XTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9PSBB
cnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2RlIGZv
cmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAg
Zm9yY2VFeGl0LnJlZigpOwogICAgICAgICAgICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4ID0g
bV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUgKzQzMywyNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1faW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRleCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICgh
bW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJyYXlNb2RlKCkpKQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxl
ZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgCi0gICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShu
b2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpKTsK
LSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgZGVm
YXVsdDogeworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQ
dHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGluZGV4
LmluZGV4VW5jaGVja2VkKCkpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFw
aC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUluZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uo
c3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQogICAgIH0KICAgICAK
ICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VP
VVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAg
ICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19Q
VVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVT
OgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9k
ZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2LDcg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGlu
ZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXgg
aXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5j
YW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCkt
PnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcxLDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVj
dG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsK
LSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBhcnJh
eS0+cHV0QnlJbmRleElubGluZShleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTYwMSw2ICs1
OTcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7CiB9CiAgICAgICAgIAorRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgYXJyYXktPmJ1dHRlcmZs
eSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXktPmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgoKSAr
IDEpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7
Cit9CisgICAgICAgIAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdF
eHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQog
ewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAg
LTEzMDksNiArMTMxNSwxNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2No
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmds
b2JhbERhdGEsIGV4ZWMpOworICAgIAorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMoZ2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsxMzMxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
b2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGludDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworCisgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0
LT5lbnN1cmVJbmRleGVkU3RvcmFnZShnbG9iYWxEYXRhKSk7Cit9CisKIGRvdWJsZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAg
cmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwg
c2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3Bl
cmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VTdEkpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVN0WikoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJl
Kiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
KCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0
ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFtZSosIGludDMyX3QpOwpAQCAtMTEwLDYgKzExMCw3
IEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgY2hh
ciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9F
T1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPWikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUyko
RXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04g
KCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKIApAQCAtMTQ4LDYgKzE0
OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpT
QXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChF
eGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJ
ZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CkBAIC0xOTIsNyArMTk0LDkg
QEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXpl
X3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0
eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqKTsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3Qp
OwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVy
LCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlv
biBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlv
bnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBzdGF0aWMgYm9vbCB0cnlD
YWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7IAogICAgICAgICBzdHViSml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihJc0FycmF5KSkpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250
aWd1b3VzIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpKTsKICAgICAgICAgCiAgICAgICAgIHN0
dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDQ1LDYgKzIwNDUsMTEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9CiB9CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVn
LCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0VGFn
UmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KyAgICAKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWdSZWcsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgIAorICAgIHJldHVybiBzbG93
Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJl
ZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkUmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZ1JlZywgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsK
K30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29u
dGlndW91c1B1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBH
UFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2Fk
UmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBp
ZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNB
Y2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgc2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICBtX2pp
dC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisKKyAgICAgICAgaW5Cb3VuZHMubGlu
aygmbV9qaXQpOworICAgIH0KKworICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OworICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgCisg
ICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCgpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1
dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3Rv
cmFnZVJlZywgR1BSUmVnIHZhbHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQorewor
ICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYg
KGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Cisg
ICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKwor
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQg
bV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkp
IHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhp
cyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVs
eSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAg
ICAgICAvLyBwcm9maWxpbmcuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRo
aXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKKyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBi
cmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBl
bnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JP
ZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3Jp
dGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQp
OworICAgICAgICB9CisgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQor
ICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wKCk7CkBAIC0yNTY1LDYgKzI2
NzIsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSks
IHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01P
REVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAg
ICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIo
KSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQz
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlz
KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9Cisg
ICAgICAgICAgICAgICAgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKTsK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25H
ZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRU
YWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5
bG9hZFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MygpKTsKQEAgLTI1ODcsNiArMjc0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
T1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVU
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMjYyNCw2ICsyNzgxLDU2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZ
TU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5n
cHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2Fz
ZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdFRhZ1JlZyk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0VGFnUmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0lu
Y2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlm
IChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGlu
aygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3Vn
aCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0VGFnUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5
bG9hZFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5j
bHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91
Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFRhZ1Jl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChu
b2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1
bHRQYXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRo
cm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwK
KyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXls
b2FkUmVnKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzE0LDYgKzI5MjEsNTUgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09O
VElHVU9VU19NT0RFUzogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
Y2hpbGQzKTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BS
KCk7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnID0gdmFsdWUucGF5bG9hZEdQ
UigpOworICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVC
YXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVn
LCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBjaGlsZDQpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OworCisgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAg
ICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIodmFsdWVUYWdSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29u
dGlndW91c1B1dEJ5VmFsKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZyk7CisKKyAg
ICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAg
ICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CkBAIC0yNzQzLDYwICsyOTk5
LDc5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mobm9kZS5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBi
ZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENoZWNrIGlm
IHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZl
Y3Rvci4KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0
aGVuIHRoZSBiYXNlbGluZSBKSVQKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5
IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAg
ICAgICAgICAgICAgLy8gcHJvZmlsaW5nLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFy
cmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFu
Z2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52
ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNp
bXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAgICAg
ICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQg
YmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVl
ZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21w
aWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVn
KTsKIAogICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgp
OwogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwot
Ci0gICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVl
UGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2Vzcyhh
cnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91
bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpCi0g
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaXNIb2xlVmFsdWUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJl
eW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1
bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogewor
ICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ1JlZyA9IHZhbHVlLnRhZ0dQUigpOwor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2Vz
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cnVjdHVyZTo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhp
Y0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJy
YXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxU
aHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJv
cGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAg
ICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGZhbGxUaHJvdWdoKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAg
ICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiB0aGUgZGVjaXNpb24gb2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3Ry
aWN0IG1vZGUgc2hvdWxkIGJlIG1hZGUKKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxp
bmUgY2FsbCBmcmFtZSwgbm90IHRoZSBtYWNoaW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRB
cnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QsCisgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjkxOSwyNSArMzE5NCw1NSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIg
PSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFy
cmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0
b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOworICAgICAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91
bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQ
dXNoLAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSKSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9h
ZEdQUiwgYmFzZUdQUikpOworICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3Rv
cmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAKKyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5k
bGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwog
ICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2pp
dC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VH
UFIpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uQXJyYXlQdXNoLCBKU1ZhbHVlUmVncyhzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwg
dmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25B
cnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpLCB2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC0yOTQ4LDQ2ICszMjUzLDg4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlVGFnKHRoaXMpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgdmFsdWVQYXlsb2FkKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxl
bmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWVUYWcuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZVBheWxvYWQuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VM
ZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6
CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogewor
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSks
IHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5l
ZENhc2UgPQorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdmFsdWVUYWdHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKAorICAgICAg
ICAgICAgICAgIHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VHUFIsIHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwKKyAgICAgICAgICAgICAgICB2YWx1
ZVBheWxvYWRHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgdmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSksCisgICAgICAgICAgICAgICAgdmFsdWVUYWdHUFIpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
OworCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBz
bG93UGF0aE1vdmUoCisgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmlu
ZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXlsb2Fk
R1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVy
YXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBiYXNlR1BSKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9h
ZEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7Cisg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKKworICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKLSAgICAg
ICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOworICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFn
ZUxlbmd0aEdQUikpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgdmFsdWVUYWdHUFIpOwotICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSwgdmFsdWVQYXlsb2FkR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHZh
bHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKTsKIAotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZyksIHZhbHVlVGFnR1BSKSk7CisgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwog
Ci0gICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAotICAgICAgICAgICAg
ICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlzLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5w
YXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAor
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZp
bmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXlsb2FkR1BSKSk7CiAgICAgICAgIAotICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAg
ICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3AsCi0gICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFy
cmF5UG9wLAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVU
YWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNW
YWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMDksMTAgKzIxMDksMTExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSYgbm8KICAgICB9CiB9CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBH
UFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQor
eworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVnKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZykpOworICAgIAorICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJl
ZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHRSZWcpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWcpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9k
ZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBH
UFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5
TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBpZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkp
IHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgc2xv
d0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
cHJvcGVydHlSZWcsIHRlbXBSZWcpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOworCisgICAgICAgIGluQm91bmRzLmxpbmsoJm1faml0KTsKKyAgICB9CisK
KyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAg
CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcg
c3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJh
eTo6TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIGlmIChpc0luQm91
bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOworICAgIGVsc2UK
KyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChiZXlvbmRBcnJheUJvdW5kcyk7CisKKyAgICAvLyBD
aGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFs
dWVzSW5WZWN0b3IuCisgICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUpKSB7CisgICAg
ICAgIC8vIFRoaXMgaXMgdW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwg
dGhlbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQg
dGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKKyAgICAgICAgLy8g
cHJvZmlsaW5nLgorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgIGlmIChpc1Nsb3dQ
dXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0
cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQg
aW52ZXJ0CisgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkg
bm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCisgICAgICAgICAg
ICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgorICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0
IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAg
ICAgICBub3RIb2xlVmFsdWUubGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICAvLyBTdG9y
ZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgorICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3Ao
KTsKLQorICAgIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAg
ICAgIGluaXRDb25zdGFudEluZm8obV9jb21waWxlSW5kZXgpOwpAQCAtMjU5NSw2ICsyNjk2LDUx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01P
REVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAg
Y2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VG
RkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBj
b21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9y
YWdlUmVnLCByZXN1bHRSZWcpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NU
T1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CkBAIC0yNjE1LDYgKzI3NjEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKQEAgLTI2MjcsMjEgKzI3NzQsNjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZh
bChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcs
IHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdl
KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHJlc3VsdC5ncHIoKSk7Ci0KKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRS
ZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAg
ICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBp
ZiAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAg
IGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3Vz
KSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c0dl
dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJy
YXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxU
aHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9u
ZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRo
cm91Z2gpOwogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIo
KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CkBAIC0yNzM1LDggKzI5
MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAo
YXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAg
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05U
SUdVT1VTX01PREVTOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBj
aGlsZDMpOwogCiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAg
LTI3NTYsNTkgKzI5NDcsNzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAg
ICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAg
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OwotICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUg
d3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhl
IGJhc2VsaW5lIEpJVAotICAgICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQg
dGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAg
ICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1
dEFjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29y
dCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdl
IHdvdWxkIGludmVydAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBC
dXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdl
J3JlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0g
ICAgICAgICAgICAgICAgICAgIGlzSG9sZVZhbHVlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2Ug
bWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJl
Zyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BS
UmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5
LCBub2RlKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
cyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCgKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
UmVnLCB0ZW1wb3JhcnlSZWcpOworCisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAg
ICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAg
IHN0b3JhZ2UudXNlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2Vz
LmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVn
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0
ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9w
KCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1
ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3By
KCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBk
YXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm90
SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBH
UFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3Jh
cnksIG5vZGUpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2
YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKwogICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAg
ICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAg
ICAgICBzdG9yYWdlLnVzZSgpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8g
dGhlIGFycmF5LgotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
Ci0KLSAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoaXNIb2xlVmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKQEAgLTI4MjAsNiArMzAyOCw2MyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01P
REVTOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeSh0aGlzKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCB0ZW1wb3JhcnlSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9y
YWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXBvcmFyeVJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBvcmFy
eVJlZyk7CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9k
ZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQo
KSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBvcmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVn
LCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5
TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBz
dG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2Fz
ZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3Vn
aCk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2Uo
KTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworCisgICAgICAgICAgICAvLyBGSVhNRTogdGhl
IGRlY2lzaW9uIG9mIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGluIHN0cmljdCBtb2RlIHNob3VsZCBi
ZSBtYWRlCisgICAgICAgICAgICAvLyBiYXNlZCBvbiB0aGUgaW5saW5lIGNhbGwgZnJhbWUsIG5v
dCB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLgorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAg
ICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTI5NzMsMjYgKzMyMzgsNTQgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CisgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9y
YWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOwor
ICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAg
ICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCi0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1t
MzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJy
ZSBsZW5ndGhzLgorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
IHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJ
blZlY3RvcikpKTsKKyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxl
bmd0aEdQUiwKLSAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBO
b1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIs
IGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0
aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdl
TGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTMwMDIsNDEgKzMyOTUsNzcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWUodGhpcyk7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAg
ICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAg
IAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91
c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
CisgICAgICAgICAgICAgICAgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAg
bV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLAorICAgICAg
ICAgICAgICAgIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNs
b3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVH
UFIpOworCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMs
CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJM
ZW5ndGgsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczogeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhp
cyk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGgu
Z3ByKCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5l
ZENhc2VzOwotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCB1bmRlZmluZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICBzZXRV
bmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQu
c3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0lu
VmVjdG9yKSkpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAg
ICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMs
IHRoaXMsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAg
ICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSwgdmFsdWVHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0
aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFs
dWVHUFIsIGJhc2VHUFIpKTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zMjEwLDggKzM1MzksMTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJS
ZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlKCksIHNpemVHUFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVgpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGJpZ0xlbmd0
aC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpKSwgc3RydWN0dXJlR1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIpOwor
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTUsNiArMzE1LDQxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYg
bm8KICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0g
JkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTk9OX0FSUkFZX0NP
TlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3Vz
KSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTOiB7
CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
dGVtcEdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXBHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHR1cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4gQnV0
IHdlIGN1cnJlbnRseSBoYXZlIG5vIGV2aWRlbmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgc28g
d291bGQgYmUgcHJvZml0YWJsZSwgbm9yIGRvIEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRoZSBw
cmVzZW50IHRlc3QKKyAgICAgICAgLy8gY292ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgorICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywg
dGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOwor
ICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1
cm47CisgICAgfQogICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCkBA
IC0zNTIsNiArMzg3LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYg
bm8KICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAg
ICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4g
YmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJhbmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUgbm8g
ZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBkb2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxlLCBu
b3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdpdGggdGhlIHByZXNlbnQgdGVzdAorICAgICAgICAv
LyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBhdGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgICAgICAgICAocG9seW1vcnBoaWNJbmNsdWRl
c0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkgPyBIYXNDb250aWd1b3VzIDogMCkKKyAgICAg
ICAgICAgICAgICAgICAgfCAocG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFy
cmF5TW9kZSgpKSA/IEhhc0FycmF5U3RvcmFnZSA6IDApKSkpOworICAgICAgICAKKyAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmQXJndW1l
bnRzOjpzX2luZm87CiAgICAgICAgIGJyZWFrOwpAQCAtMzkwLDcyICs0NDgsMTA3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAgICBBU1NFUlQoIW1vZGVBbHJl
YWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2Rl
KCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAKKyAgICBJbmRleGluZ1R5cGUgZGVz
aXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
KSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgCi0g
ICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAg
ICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgZGVzaXJlZEluZGV4aW5n
VHlwZU1hc2sgPSBIYXNDb250aWd1b3VzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5
OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9
IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtU
b1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0g
SGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAg
ICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9y
YWdlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gc3RydWN0dXJlLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2Ug
YWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIEluZGV4aW5nVHlwZSBkZXNpcmVk
SW5kZXhpbmdUeXBlTWFzayA9Ci0gICAgICAgICAgICBpc1Nsb3dQdXRBY2Nlc3Mobm9kZS5hcnJh
eU1vZGUoKSkgPyAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkgOiBI
YXNBcnJheVN0b3JhZ2U7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0g
bV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSk7CisgICAgbV9qaXQubG9hZFB0cigK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2Fk
UHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgLy8gV2UgY2FuIHNraXAgYWxs
IHRoYXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpOwog
ICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKKyAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAg
Ci0gICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKLSAgICAgICAgLy8gTmV4dCBjaGVjayB0
aGF0IHRoZSBvYmplY3QgZG9lcyBub3QgaW50ZXJjZXB0IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0
IGRvZXMsCi0gICAgICAgIC8vIHRoZW4gdGhpcyBtb2RlIHdvbid0IHdvcmsuCisgICAgc2xvd0Nh
c2UubGluaygmbV9qaXQpOworICAgIAorICAgIC8vIElmIHdlJ3JlIGFsbGVnZWRseSBjcmVhdGlu
ZyBjb250aWd1b3VzIHN0b3JhZ2UgYW5kIHRoZSBpbmRleCBpcyBib2d1cywgdGhlbgorICAgIC8v
IGp1c3QgZG9uJ3QuCisgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXk6OkJsYW5rVG9D
b250aWd1b3VzKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvKSkpOworICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIFRydXN0
ZWRJbW0zMihNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBO
ZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nl
c3Nlcy4gSWYgaXQgZG9lcywKKyAgICAvLyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgorICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1
Y3R1cmVHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKICAgICAgICAgCi0gICAgICAgIC8v
IE5vdyBjYWxsIG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCi0gICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIC8vIE5vdyBjYWxsIG91dCB0byBjcmVh
dGUgdGhlIGFycmF5IHN0b3JhZ2UuCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQ
Uik7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgY2FzZSBBcnJheTo6Qmxh
bmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29u
dGlndW91cywgdGVtcEdQUiwgYmFzZVJlZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlT
dG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyh0ZW1wR1BSKTsKLQotICAgICAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgc3Ry
dWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKLSAgICAgICAgLy8g
dGVtcG9yYXJpZXMuIE5vciB3b3VsZCBpdCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRo
ZXIgd2F5IHdlJ3JlIHRhbGtpbmcKLSAgICAgICAgLy8gYWJvdXQgYSBsb2FkLgotICAgICAgICBt
X2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIAot
ICAgICAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJyYXkg
c3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGlzIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0
aGUgCi0gICAgICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMg
YXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4KLSAgICAgICAgLy8gVGhhdCdzIGZpbmUs
IHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCi0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5
cGVNYXNrKSkpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IHN0b3JhZ2VSZXN1bHQodGVtcEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
LSAgICB9CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNI
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHRl
bXBHUFIpOworCisgICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBi
ZWNhdXNlIHNpbGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCisgICAgLy8gdGVtcG9yYXJpZXMu
IE5vciB3b3VsZCBpdCBiZSB1c2VmdWwgZm9yIGl0IHRvIGRvIHNvLiBFaXRoZXIgd2F5IHdlJ3Jl
IHRhbGtpbmcKKyAgICAvLyBhYm91dCBhIGxvYWQuCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIAorICAgIC8vIEZpbmFsbHksIGNoZWNrIHRo
YXQgd2UgaGF2ZSB0aGUga2luZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdl
dC4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbiBjaGVj
aywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAorICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlvbiBj
b3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4KKyAg
ICAvLyBUaGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJs
ZS4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sp
KSk7CisgICAgICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIHN0b3JhZ2VSZXN1bHQo
dGVtcEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTdG9yYWdlKE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0zMjA1LDEyICszMjk4LDIzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJy
YXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBB
UlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09O
VElHVU9VU19NT0RFUzogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2Up
OwogICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJl
c3VsdFJlZyk7CisgICAgICAgICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZTogeworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0
b3JhZ2UpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIApAQCAtMzM5OSw2ICszNTAzLDE2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzdG9yYWdlUmVz
dWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKK0dQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFy
eSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIGlmICghcHV0QnlWYWxXaWxsTmVlZEV4
dHJhUmVnaXN0ZXIoYXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Cisg
ICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlYWxUZW1wb3JhcnkodGhpcyk7CisgICAgdGVtcG9yYXJ5
LmFkb3B0KHJlYWxUZW1wb3JhcnkpOworICAgIHJldHVybiB0ZW1wb3JhcnkuZ3ByKCk7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCitjbGFzcyBHUFJUZW1wb3Jhcnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNs
b3dQYXRoR2VuZXJhdG9yOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0xMTY2LDYgKzExNjcs
MTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
b2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPWiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIGludDMyX3Qgc2l6ZSkKKyAgICB7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAg
LTEyMTgsMTEgKzEyMjQsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
R1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNp
emUpKTsKQEAgLTE0NjgsNiArMTQ3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBf
REZHT3BlcmF0aW9uX0VPWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBp
bnQzMl90IGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOwpAQCAtMTUzMSwxMSArMTU0NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgR1BSUmVnIGFyZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXls
b2FkLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpLCBUcnVzdGVkSW1tUHRyKHNp
emUpKTsKQEAgLTIxNDksNiArMjE3MCw1MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwoTm9kZSYsIEdQ
UlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJS
ZWcgcmVzdWx0UmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5
U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVn
LCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7CisjZWxzZQorICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJS
ZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVn
IHJlc3VsdFRhZ1JlZywgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBi
YXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVz
dWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyk7CisjZW5kaWYKKyAgICAKKyAgICBi
b29sIHB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKEFycmF5OjpNb2RlIGFycmF5TW9kZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIC8vIEZvciBBcnJh
eVN0b3JhZ2UsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBzdG9yZXMgdG8gaG9sZXMgZXhjZXB0
IGlmCisgICAgICAgIC8vIHdlJ3JlIGluIFNsb3dQdXQgbW9kZS4KKyAgICAgICAgY2FzZSBBUlJB
WV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAg
IC8vIEZvciBDb250aWd1b3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3IgYW55IGFjY2VzcyB0
aGF0IG1heSBzdG9yZQorICAgICAgICAvLyB0byB0aGUgdGFpbC4KKyAgICAgICAgY2FzZSBDT05U
SUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdV
T1VTX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgICAgIC8vIEFsbCBw
b2x5bW9ycGhpYyBtb2RlcyBuZWVkIGFuIGV4dHJhIHJlZy4KKyAgICAgICAgY2FzZSBBTExfUE9M
WU1PUlBISUNfTU9ERVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFy
eSYsIEFycmF5OjpNb2RlKTsKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZh
bChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1v
ZGUoKSk7CisgICAgfQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBH
UFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQ
UlJlZyB0ZW1wUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5
U3RvcmFnZVB1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVn
LCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7Cisj
ZWxzZQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3Rv
cmFnZVJlZywgR1BSUmVnIHZhbHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5v
ZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJl
ZywgR1BSUmVnIHZhbHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKTsKKyNlbmRpZgor
ICAgIAogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwogICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDEzMDMxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczOCw4ICs3MzgsMjUgQEAgc3RhdGljIGlubGluZSBKU09iamVjdCog
Y2hlY2tlZFJldHVybihKUwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorY2xhc3MgU2Ft
cGxpbmdTY29wZSB7CitwdWJsaWM6CisgICAgU2FtcGxpbmdTY29wZShJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXIpCisgICAgICAgIDogbV9pbnRlcnByZXRlcihpbnRlcnByZXRlcikKKyAgICB7Cisg
ICAgICAgIGludGVycHJldGVyLT5zdGFydFNhbXBsaW5nKCk7CisgICAgfQorICAgIH5TYW1wbGlu
Z1Njb3BlKCkKKyAgICB7CisgICAgICAgIG1faW50ZXJwcmV0ZXItPnN0b3BTYW1wbGluZygpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7Cit9OworCiBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIHRoaXNPYmopCiB7CisgICAgU2FtcGxpbmdT
Y29wZSBzYW1wbGluZ1Njb3BlKHRoaXMpOworICAgIAogICAgIEpTU2NvcGUqIHNjb3BlID0gY2Fs
bEZyYW1lLT5zY29wZSgpOwogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzT2JqLCBj
YWxsRnJhbWUpKTsKICAgICBBU1NFUlQoIXNjb3BlLT5nbG9iYWxEYXRhKCktPmV4Y2VwdGlvbik7
CkBAIC0xMTM3LDYgKzExNTQsOCBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVw
YXJlRm9yCiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2xvc3VyZSYg
Y2xvc3VyZSkgCiB7CisgICAgU2FtcGxpbmdTY29wZSBzYW1wbGluZ1Njb3BlKHRoaXMpOworICAg
IAogICAgIEFTU0VSVCghY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxl
Y3RvckJ1c3koKSk7CiAgICAgaWYgKGNsb3N1cmUub2xkQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
aXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKQEAgLTExNzIsNiAr
MTE5MSw4IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmVuZFJlcGVhdENhbGwoQ2FsbEZyYW0KIAogSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Njb3BlKiBzY29wZSwgaW50IGdsb2Jh
bFJlZ2lzdGVyT2Zmc2V0KQogeworICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlz
KTsKKyAgICAKICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc1ZhbHVlLCBjYWxsRnJh
bWUpKTsKICAgICBBU1NFUlQoIXNjb3BlLT5nbG9iYWxEYXRhKCktPmV4Y2VwdGlvbik7CiAgICAg
QVNTRVJUKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
OwogCiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOworICAgIG1fYnlW
YWxJbnN0cnVjdGlvbkluZGV4ID0gMDsKICAgICBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXggPSAw
OwogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogICAgIApAQCAtNzM4LDYgKzczOSwyMCBA
QCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgbV9jb2RlQmxv
Y2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3NDb21waWxh
dGlvbkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkKICAgICAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5jb3B5VG9TdHViSW5mbyhtX2NvZGVCbG9jay0+c3RydWN0
dXJlU3R1YkluZm8oaSksIHBhdGNoQnVmZmVyKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVy
T2ZCeVZhbEluZm9zKG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkgewor
ICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uYmFkVHlwZUp1
bXApKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5kb25lVGFyZ2V0KTsKKyAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd1BhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uc2xvd1BhdGhUYXJnZXQpOworICAgICAgICBD
b2RlTG9jYXRpb25DYWxsIHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1f
YnlWYWxDb21waWxhdGlvbkluZm9baV0ucmV0dXJuQWRkcmVzcyk7CisgICAgICAgIAorICAgICAg
ICBtX2NvZGVCbG9jay0+YnlWYWxJbmZvKGkpID0gQnlWYWxJbmZvKAorICAgICAgICAgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4LAorICAgICAgICAgICAgYmFkVHlw
ZUp1bXAsCisgICAgICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmFycmF5TW9kZSwK
KyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihiYWRUeXBlSnVtcCwgZG9uZVRh
cmdldCksCisgICAgICAgICAgICBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIocmV0dXJuQWRkcmVz
cywgc2xvd1BhdGhUYXJnZXQpKTsKKyAgICB9CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9m
Q2FsbExpbmtJbmZvcyhtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNhbGxM
aW5rSW5mb3MoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJs
b2NrLT5jYWxsTGlua0luZm8oaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2NCw2ICsyNjQsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
Y29weVRvU3R1YkluZm8oU3RydWN0dXJlU3R1YkluZm8mIGluZm8sIExpbmtCdWZmZXIgJnBhdGNo
QnVmZmVyKTsKICAgICB9OwogCisgICAgc3RydWN0IEJ5VmFsQ29tcGlsYXRpb25JbmZvIHsKKyAg
ICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8oKSB7IH0KKyAgICAgICAgCisgICAgICAgIEJ5VmFs
Q29tcGlsYXRpb25JbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIGJhZFR5cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KQorICAgICAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKKyAg
ICAgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAgICAgICAgICwgZG9uZVRhcmdl
dChkb25lVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIGJhZFR5cGVKdW1wOworICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZVRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHNsb3dQYXRoVGFyZ2V0OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBy
ZXR1cm5BZGRyZXNzOworICAgIH07CisKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mbyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgaG90UGF0aEJl
Z2luOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBob3RQYXRoT3RoZXI7CkBAIC0zNDgs
NiArMzY3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVP
ZmZzZXQgPSBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgICAgIGppdC5wcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUdldEJ5VmFsKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlR2V0QnlWYWwoYnlWYWxJ
bmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5
dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1v
ZGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogICAgICAgICB7CkBA
IC0zOTcsNiArNDMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiwgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiwgaW50LCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVf
dCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1
cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciwgQ2Fs
bEZyYW1lKik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihT
dHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0
IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5BZGRyZXNzUHRyLCBib29sIGRp
cmVjdCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlW
YWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFy
cmF5TW9kZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFtcG9s
aW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwpAQCAtNDUyLDYgKzQ4
OCwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0
Y2gsIEFycmF5UHJvZmlsZSopOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVG
b3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdp
c3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSopOworICAg
ICAgICAKKyAgICAgICAgSklUQXJyYXlNb2RlIGNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUq
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGlu
IHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRleGluZyB0eXBlLgorICAgICAgICAvLyBQcm9wZXJ0
eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQu
CisgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBz
bG93IGNhc2VzLiBGYWxsLXRocm91Z2gKKyAgICAgICAgLy8gY2FzZSBjb250YWlucyByZXN1bHQg
aW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2ZpbGVkLgorICAgICAgICBKdW1wTGlzdCBl
bWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVy
dHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5n
IHR5cGUuCisgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4g
UHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCisgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJh
c2UgaXMgY2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KKyAgICAg
ICAgLy8gcmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAg
ICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKTsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1h
eUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApAQCAtODcwLDYgKzkyMiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKICAgICAgICAgVmVj
dG9yPExhYmVsPiBtX2xhYmVsczsKICAgICAgICAgVmVjdG9yPFByb3BlcnR5U3R1YkNvbXBpbGF0
aW9uSW5mbz4gbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbzsKKyAgICAgICAgVmVjdG9y
PEJ5VmFsQ29tcGlsYXRpb25JbmZvPiBtX2J5VmFsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBW
ZWN0b3I8U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbz4gbV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8+
IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPEp1bXBUYWJsZT4g
bV9qbXBUYWJsZTsKQEAgLTg3OSw2ICs5MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
VmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICB1bnNpZ25lZCBtX3By
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9ieVZhbElu
c3RydWN0aW9uSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRl
eDsKICAgICAgICAgdW5zaWduZWQgbV9jYWxsTGlua0luZm9JbmRleDsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDMx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NDcsMjMgKzQ0NywyMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxv
Y2F0ZUJhc2ljU3RvcmFnCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1
bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxS
ZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyLCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IHN0ZDo6
bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihpbml0aWFsTGVuZ3Ro
KSk7CisgICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9W
RUNUT1JfTEVOKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCAwLCB0cnVlLCBpbml0aWFsTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7
CisKKyAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mQXJy
YXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSB0aGUgYmFj
a2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gCiAgICAg
Ly8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24uCiAgICAgZW1p
dEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRlIHRoZSBjZWxsIGZvciB0aGUg
YXJyYXkuCi0gICAgbG9hZFB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NP
ZkFycmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOwogICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmpl
Y3Q8SlNBcnJheSwgTWFya2VkQmxvY2s6Ok5vbmU+KHNjcmF0Y2gsIGNlbGxSZXN1bHQsIHN0b3Jh
Z2VQdHIpOwogCi0gICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbyBpbiB0aGUgQXJy
YXlTdG9yYWdlLgotICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVz
dWx0LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJbW0zMihs
ZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5W
ZWN0b3JPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwot
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5
U3RvcmFnZTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFwT2Zmc2V0
KCkpKTsKKyAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBpbmRleGlu
ZyBoZWFkZXIuCisgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1
bHQsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIHN0b3JlMzIoSW1t
MzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3bHkgYWxsb2NhdGVk
IEFycmF5U3RvcmFnZS4KICAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxS
ZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwpAQCAtNDcyLDEyICs0NzEsMTIg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsg
aSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlUHRyKHN0
b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOworICAgICAgICBzdG9y
ZVB0cihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICogaSkpOwogI2Vsc2UKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0
b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICogaSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3Rv
cmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAgICAgICAg
IGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAq
IHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YodWludDMyX3QpKSwgc3RvcmFnZVB0cik7Ci0gICAg
ICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsg
c2l6ZW9mKHVpbnQzMl90KSkpOworICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Mo
c3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgc2l6ZW9m
KHVpbnQzMl90KSkpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNTYxLDEwICs1NjAsMjUgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRgogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlKQogewotICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCiAgICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKKyNl
bmRpZgorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5UHJvZmls
ZSogcHJvZmlsZSwgSW5kZXhpbmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQorICAgIHJldHVybiAhIShwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSAm
IChhc0FycmF5TW9kZXMoTm9uQXJyYXkgfCBjYXBhYmlsaXR5KSB8IGFzQXJyYXlNb2RlcyhBcnJh
eUNsYXNzIHwgY2FwYWJpbGl0eSkpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
Cit9CisKK2lubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9m
aWxlKiBwcm9maWxlKQoreworICAgIGlmIChhcnJheVByb2ZpbGVTYXcocHJvZmlsZSwgSGFzQXJy
YXlTdG9yYWdlKSkKKyAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAgICByZXR1cm4g
SklUQ29udGlndW91czsKIH0KIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2NjEsNyArMTY2MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jX2V4cChJbnN0cnVj
dGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKSB7CisgICAgaWYg
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpCisgICAgICAg
IHx8IENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7
CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjgwLDggKzE2ODEsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19hcnJheShJbnN0cnVjdAogICAgIC8vIElmIHRoZSBhbGxvY2F0aW9uIHdv
dWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFrZSB0aGUgcHJvcGVyIHN0dWIgY2Fs
bCBhYm92ZSBpbiAKICAgICAvLyBlbWl0X29wX25ld19hcnJheS4KICAgICBpbnQgbGVuZ3RoID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6Omlz
T3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKGxlbmd0aCkpKSkKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5p
c0hhdmluZ0FCYWRUaW1lKCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0
dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0
aCkpKSkKICAgICAgICAgcmV0dXJuOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gV2UncmUg
aGF2aW5nIGEgYmFkIHRpbWUuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdo
IHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMjcgKzIwNCw3
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWdu
ZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9w
ZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogICAgIAog
ICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIp
OwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVn
VDEsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5
U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgcHJv
ZmlsZSk7CisKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7
CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAotICAgIGxvYWQzMihCYXNl
SW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlZ1QxKTsgLy8gdGFnCi0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsgLy8gcGF5
bG9hZAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Cisg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwo
KTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBKdW1wIHJlc3VsdE9LID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgIGJyZWFrcG9pbnQoKTsKKyAgICByZXN1bHRPSy5saW5rKHRoaXMpOworI2VuZGlmCisKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5
X3ZhbCksIGRzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBl
LCBtb2RlLCBkb25lKSk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dl
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMSwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qz
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFk
ZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAK
KyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRhZworICAgIGxvYWQz
MihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVt
cHR5VmFsdWVUYWcpKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAorSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSk7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAg
IAorICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCisgICAgbG9hZDMyKEJhc2VJbmRl
eChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksIHJlZ1QwKTsgLy8gcGF5bG9hZAorICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorICAgIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpAQCAtMjQ4LDEwICsyOTksMTYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
dmVjdG9yIGxlbmd0aCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFs
dWUKICAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisgICAgCiAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOwogICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KGJhc2UpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5KTsKLSAg
ICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3Qp
OworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
c2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQpA
QCAtMjYwLDIwICszMTcsODIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVj
dGlvbgogewogICAgIHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgIHVuc2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
YXJyYXlQcm9maWxlOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHBy
b3BlcnR5LCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDEpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGUocmVnVDEsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUo
cmVnVDEsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
SklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVP
ZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KIAorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIAorICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIEp1
bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAKKyAgICBMYWJl
bCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdU
MCk7CisgICAgc3RvcmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3Rv
cmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisgICAgCisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QyLCByZWdUMSk7CisgICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhz
dG9yZVJlc3VsdCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAogICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwgcmVnVDMsIFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKICAgICAKKyAg
ICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1
c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKwogICAgIEp1bXAgZW1wdHkgPSBi
cmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOwogICAgIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwpAQCAtMjgzLDcgKzQwMiw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBKdW1wIGVu
ZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZSk7CisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJv
ZmlsZSk7CiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgIGJyYW5j
aDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAgICAgCkBAIC0yOTIsNiArNDExLDEw
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBqdW1wKCku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKICAgICAKICAgICBlbmQubGluayh0aGlzKTsKKyAg
ICAKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDEsIHJlZ1QzLCBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Cisg
ICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTMwMywxMyArNDI2LDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwg
YmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFz
ZSBub3QgYXJyYXkgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBj
aGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcworICAgIAorICAg
IExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKICAgICAKICAgICBKSVRTdHViQ2FsbCBzdHViUHV0
QnlWYWxDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfdmFsKTsKICAgICBzdHViUHV0QnlWYWxDYWxs
LmFkZEFyZ3VtZW50KGJhc2UpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJv
cGVydHkpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQodmFsdWUpOwotICAgIHN0
dWJQdXRCeVZhbENhbGwuY2FsbCgpOworICAgIENhbGwgY2FsbCA9IHN0dWJQdXRCeVZhbENhbGwu
Y2FsbCgpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Cisg
ICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChJbnN0cnVjdGlvbgogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2Us
IHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVk
aWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMTExLDE3ICsxMTIsNjQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdU
MiwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlT
dG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9m
aWxlKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
IAotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgSklUQXJyYXlNb2RlIG1vZGUg
PSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIEp1bXAgcmVzdWx0T0sgPSBicmFuY2hUZXN0UHRyKE5vblplcm8s
IHJlZ1QwKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgcmVzdWx0T0subGluayh0aGlzKTsKKyNl
bmRpZgogCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25l
KSk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChy
ZWdUMiwgcmVnVDEsIFNjYWxlUHRyKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9
CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwor
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAt
MTQ2LDEwICsxOTQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1
YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKICAgICAKKyAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CisgICAgCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29w
X2dldF9ieV92YWwpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGJhc2UsIHJlZ1QyKTsKICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNh
bGwoZHN0KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKGRzdCk7CisKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdl
dCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4Kys7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiB9CkBAIC0yMjYsNyArMjgw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogewogICAgIHVu
c2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2ln
bmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNp
Z25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBA
IC0yMzQsMTAgKzI4OCw3MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0
aW9uCiAgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdU
MiwgcmVnVDMsIHByb2ZpbGUpOworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9v
c2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRD
b250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklU
QXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNl
dCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwg
cmVnVDMsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3Vv
dXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAg
IEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgIExhYmVs
IHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMyk7CisgICAgc3RvcmVQdHIocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyKSk7CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIG91dE9mQm91bmRz
LmxpbmsodGhpcyk7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgIAorICAgIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1QzKTsKKyAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNz
KHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBqdW1wKCku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBKdW1wIGVtcHR5ID0g
YnJhbmNoVGVzdFB0cihaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKQEAgLTI0Nyw4ICsz
NjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgSnVt
cCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJy
YXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAg
ICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFs
dWVzSW5WZWN0b3JPZmZzZXQoKSkpOwogICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3Vs
dCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKQEAgLTI1Nyw4
ICszNzMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAg
anVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBlbmQubGluayh0aGlzKTsK
LQotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyAgICAK
KyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjcwLDEzICszODYsMTkgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJv
cGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNl
KTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIG5v
dCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW4gdmVjdG9yIGNoZWNr
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRzCisgICAgCisgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2Fs
bCh0aGlzLCBjdGlfb3BfcHV0X2J5X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1
bWVudChyZWdUMCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwg
cmVnVDIpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQodmFsdWUsIHJlZ1QyKTsK
LSAgICBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0QnlW
YWxDYWxsLmNhbGwoKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7
CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2luZGV4KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02NTYsNyAr
Nzc4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsK
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChyZWdUMiwgcmVnVDEs
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KTsKICAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihJc0FycmF5KSk7Ci0gICAgSnVtcCBm
YWlsdXJlQ2FzZXMyID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFz
QXJyYXlTdG9yYWdlKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzQ29udGlndW91cykp
OwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0
b3JhZ2UKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKQEAgLTEyNzQsNiArMTM5Niw3NiBAQCBib29sIEpJVDo6aXNEaXJlY3RQ
dXRCeUlkKFN0cnVjdHVyZVN0dWJJCiAgICAgfQogfQogCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7
CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGln
dW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJy
YXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAg
IAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9u
TGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUs
IGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVK
dW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX1NUVUIoCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5l
IGdldF9ieV92YWwgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAg
ICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X3ZhbF9nZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0
Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUp
KTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
U1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X3Zh
bCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICBtX2Nv
ZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJU
b0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dl
bmVyaWMpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5j
bHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSAi
U3Ryb25nLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMjQxNCw2ICsyNDE1
LDMwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKAorICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sKKyAgICBpZiAoTElLRUxZKGJhc2VWYWx1
ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKKyAgICAgICAgaWYgKEpTVmFs
dWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHkoY2FsbEZy
YW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7
CisgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKKyAgICAgICAgaWYg
KGlzSlNTdHJpbmcoYmFzZVZhbHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRl
eChpKSkgeworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCksIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
dmFsX3N0cmluZykpOworICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdl
dEluZGV4KGNhbGxGcmFtZSwgaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1
ZS5nZXQoY2FsbEZyYW1lLCBpKTsKKyAgICB9CisKKyAgICBpZiAoaXNOYW1lKHN1YnNjcmlwdCkp
CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0
YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnByaXZhdGVOYW1lKCkpOworCisgICAgSWRlbnRp
ZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52
YWx1ZShjYWxsRnJhbWUpKTsKKyAgICByZXR1cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHBy
b3BlcnR5KTsKK30KKwogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dl
dF9ieV92YWwpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAt
MjQyMywzNSArMjQ0OCw0NCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
OwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsK
ICAgICAKLSAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNT
dHJpbmcoKSkpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpLT5mYXN0R2V0T3duUHJvcGVydHkoY2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52
YWx1ZShjYWxsRnJhbWUpKSkgewotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHN1YnNjcmlwdC5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90
IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZh
bHVlKSAmJiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewotICAgICAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFNU
VUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZykp
OwotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJ
bmRleChjYWxsRnJhbWUsIGkpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIGlmIChiYXNl
VmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIC8vIFNl
ZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgdGhpcyBhdCBhbGwuCisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAg
IGlmIChvYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgeworICAgICAgICAgICAg
Ly8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7CisgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24oU1RVQl9SRVRVUk5fQUREUkVTUywgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYykpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNldEZvck5vbkRGR0NvZGUo
KTsKKyAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBCeVZh
bEluZm8mIGJ5VmFsSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhi
eXRlY29kZU9mZnNldCAtIDEpOworICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJv
dXRpbmUpOworICAgICAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoaW5kZXhp
bmdUeXBlKSkgeworICAgICAgICAgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRB
cnJheU1vZGVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpCisgICAgICAgICAgICAgICAgICAg
IEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQUREUkVTUywgYXJyYXlNb2Rl
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJh
c2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQorICAgIAor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNj
cmlwdCwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKyAgICAKK0RFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgaWYgKGlzTmFtZShzdWJz
Y3JpcHQpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJh
bWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFt
ZSgpKTsKLSAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgfQorICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
c3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAKLSAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFt
ZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIHByb3BlcnR5KTsKLSAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0
YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBn
ZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERS
RVNTKTsKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogICAgIApAQCAtMjUwMiwyMyArMjUzNiwxNCBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFs
KQorc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHN0
YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLQotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFt
ZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUu
YXJnc1sxXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sy
XS5qc1ZhbHVlKCk7Ci0KICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewog
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAgICAgIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFz
T2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1
aWNrbHkoaSkpCi0gICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2Jh
bERhdGEsIGksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2ts
eShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3Qs
IGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpKTsKICAgICAgICAgfSBlbHNlCkBAIC0yNTI4LDExICsyNTUzLDYxIEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxs
RnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRl
TmFtZSgpLCB2YWx1ZSwgc2xvdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgSWRlbnRpZmllciBw
cm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0cmluZyhjYWxsRnJhbWUpLT52YWx1ZShj
YWxsRnJhbWUpKTsKLSAgICAgICAgaWYgKCFzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2VwdGlv
bikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2Vw
dGlvbi4KKyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pIHsg
Ly8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24u
CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwg
cHJvcGVydHksIHZhbHVlLCBzbG90KTsKICAgICAgICAgfQogICAgIH0KK30KKworREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tf
RlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJh
bWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3Nb
MF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFd
LmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFs
dWUoKTsKKworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQz
MigpKSB7CisgICAgICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgor
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpOworICAgICAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkp
IHsKKyAgICAgICAgICAgIC8vIERvbnQgZXZlciB0cnkgdG8gb3B0aW1pemUuCisgICAgICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSk7Cisg
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24oU1RVQl9SRVRV
Uk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gY2FsbEZyYW1lLT5ieXRlY29kZU9mZnNl
dEZvck5vbkRGR0NvZGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7Cisg
ICAgICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmdldEJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOworICAgICAgICAgICAgQVNTRVJUKCFi
eVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgICAgICAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRl
eGluZ1R5cGUoaW5kZXhpbmdUeXBlKSkgeworICAgICAgICAgICAgICAgIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpCisgICAg
ICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsKCZjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgU1RVQl9SRVRVUk5fQURE
UkVTUywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CisK
KyAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOworfQorCitERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcF9wdXRfYnlfdmFsX2dlbmVyaWMpCit7CisgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0Zy
YW1lLmNhbGxGcmFtZTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sx
XS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1Zh
bHVlKCk7CisgICAgCisgICAgcHV0QnlWYWwoY2FsbEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlw
dCwgdmFsdWUpOwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcw
LDYgKzM3MCw3IEBAIGV4dGVybiAiQyIgewogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0
aV9vcF9nZXRfYnlfaWRfc2VsZl9mYWlsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVS
TkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5n
X2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpT
VmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7CisgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV92
YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNv
ZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3Rp
X29wX2luKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRK
U1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pbnN0YW5jZW9mKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwpAQCAtNDQ2LDYgKzQ0Nyw3IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQg
SklUX1NUVUIgY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfaW5k
ZXgoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RV
QiBjdGlfb3BfcHV0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
KyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2dl
dHRlcl9zZXR0ZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9p
ZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2dsb2JhbF92YXJfY2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYWN0
aXZhdGlvbihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTE3MSw3
ICsxMTcxLDcgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAgbG9hZHAgSlNDZWxs
OjptX3N0cnVjdHVyZVt0M10sIHQyCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MSwgdDApCiAgICAg
YnRpeiB0MiwgSXNBcnJheSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93Ci0gICAgYnRpeiB0MiwgSGFz
QXJyYXlTdG9yYWdlLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKKyAgICBidGl6IHQyLCAoSGFzQ29u
dGlndW91cyB8IEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpLCAub3BH
ZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2FkaSA0W1BDXSwgdDEKICAgICBsb2FkcCAzMltQQ10s
IHQyCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKQEAgLTEzMDYsMTAg
KzEzMDYsMjEgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZGkgMTJbUENdLCB0Mwog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQzLCBJbnQzMlRhZywgdDEsIC5vcEdl
dEJ5VmFsU2xvdykKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MworICAg
IGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cworICAgIAor
ICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
cHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZGkgVGFnT2Zmc2V0W3Qz
LCB0MSwgOF0sIHQyCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldFt0MywgdDEsIDhdLCB0MQorICAg
IGptcCAub3BHZXRCeVZhbERvbmUKKworLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0
aXogdDIsIEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UsIC5vcEdldEJ5
VmFsU2xvdwogICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93Ci0gICAgbG9hZGkgNFtQ
Q10sIHQwCiAgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0Mywg
dDEsIDhdLCB0MgogICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zm
c2V0W3QzLCB0MSwgOF0sIHQxCisKKy5vcEdldEJ5VmFsRG9uZToKKyAgICBsb2FkaSA0W1BDXSwg
dDAKICAgICBiaWVxIHQyLCBFbXB0eVZhbHVlVGFnLCAub3BHZXRCeVZhbFNsb3cKICAgICBzdG9y
ZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQwLCA4XQogICAgIHN0b3JlaSB0MSwgUGF5bG9hZE9mZnNl
dFtjZnIsIHQwLCA4XQpAQCAtMTM4MywyOSArMTM5NCw1MiBAQCBfbGxpbnRfb3BfcHV0X2J5X3Zh
bDoKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAgICBsb2FkcCAxNltQ
Q10sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFzQXJy
YXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaSA4W1BDXSwgdDAKLSAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgSW50MzJUYWcsIHQyLCAub3BQdXRCeVZhbFNs
b3cpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDAsIEludDMyVGFnLCB0Mywg
Lm9wUHV0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQw
Ci0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6
bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBiaWVxIEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDAsIHQyLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wUHV0
QnlWYWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaSAxMltQQ10sIHQz
Ci0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcodDMsIHQxLCB0MykKLSAgICB3cml0ZUJh
cnJpZXIodDEsIHQzKQotICAgIHN0b3JlaSB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRh
Z09mZnNldFt0MCwgdDIsIDhdCi0gICAgc3RvcmVpIHQzLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9y
ICsgUGF5bG9hZE9mZnNldFt0MCwgdDIsIDhdCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywg
Lm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGlu
Z0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFs
Q29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdDoK
KyAgICBsb2FkaSAxMltQQ10sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcodDIs
IHQxLCB0MikKKyAgICB3cml0ZUJhcnJpZXIodDEsIHQyKQorICAgIHN0b3JlaSB0MSwgVGFnT2Zm
c2V0W3QwLCB0MywgOF0KKyAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbdDAsIHQzLCA4XQor
ICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzOgorICAg
IGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVj
dG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgaWYgVkFMVUVfUFJPRklMRVIKKyAg
ICAgICAgbG9hZHAgMTZbUENdLCB0MQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjpt
X21heVN0b3JlVG9Ib2xlW3QxXQorICAgIGVuZAorICAgIGFkZGkgMSwgdDMsIHQyCisgICAgc3Rv
cmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGlj
TGVuZ3RoW3QwXQorICAgIGptcCAub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdAorCisu
b3BQdXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAu
b3BQdXRCeVZhbFNsb3cKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGJp
ZXEgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDMsIDhdLCBFbXB0eVZh
bHVlVGFnLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5Cisub3BQdXRCeVZhbEFycmF5U3Rv
cmFnZVN0b3JlUmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlMlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisgICAg
c3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MywgOF0K
KyAgICBzdG9yZWkgdDIsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3Qw
LCB0MywgOF0KICAgICBkaXNwYXRjaCg1KQogCi0ub3BQdXRCeVZhbEVtcHR5OgorLm9wUHV0QnlW
YWxBcnJheVN0b3JhZ2VFbXB0eToKICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBzdG9y
ZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QzXQorICAgICAgICBsb2FkcCAx
NltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hv
bGVbdDFdCiAgICAgZW5kCiAgICAgYWRkaSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5W
ZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGJp
YiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKICAgICBhZGRpIDEs
IHQyLCB0MQogICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3Vs
dAorICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5
VmFsU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4
LDcgKzEwMTgsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBsb2FkcCBKU0Nl
bGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQxLCB0MCkKICAg
ICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBidGl6IHQyLCBI
YXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXogdDIsIChIYXND
b250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSksIC5v
cEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgbG9h
ZHAgNjRbUEIsIFBDLCA4XSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNd
LCB0MApAQCAtMTE0NywxNCArMTE0NywyNSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBs
b2FkcCAzMltQQiwgUEMsIDhdLCB0MwogICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQxKQogICAg
IGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwg
Lm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwg
Lm9wR2V0QnlWYWxTbG93KQogICAgIHN4aTJwIHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVt0MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlW
YWxOb3RDb250aWd1b3VzCisKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdworICAg
IGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCisgICAgbG9hZHAgW3QzLCB0MSwgOF0sIHQyCisgICAg
YnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BH
ZXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFz
U2xvd1B1dEFycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAu
b3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRwIEFy
cmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6IHQyLCAub3BHZXRC
eVZhbFNsb3cKKworLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcCB0MiwgW2NmciwgdDAsIDhd
CiAgICAgbG9hZHAgNDBbUEIsIFBDLCA4XSwgdDAKICAgICB2YWx1ZVByb2ZpbGUodDIsIHQwKQpA
QCAtMTIyNiwyOSArMTIzNyw1MSBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBsb2FkcCBK
U0NlbGw6Om1fc3RydWN0dXJlW3QxXSwgdDIKICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0Mwog
ICAgIGFycmF5UHJvZmlsZSh0MiwgdDMsIHQwKQotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFn
ZSwgLm9wUHV0QnlWYWxTbG93CiAgICAgbG9hZGlzIDE2W1BCLCBQQywgOF0sIHQwCi0gICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MiwgLm9wUHV0QnlWYWxTbG93KQotICAgIHN4
aTJwIHQyLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDMsIC5vcFB1
dEJ5VmFsU2xvdykKKyAgICBzeGkycCB0MywgdDMKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0
ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5k
ZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYnRw
eiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0sIC5vcFB1dEJ5VmFsRW1wdHkKLS5v
cFB1dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MywgdDEpCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91
cywgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzCisgICAgCisgICAgYmlhZXEgdDMsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQ
dXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kcworLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVS
ZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MiwgdDEpCisgICAgd3JpdGVCYXJyaWVyKHQxKQorICAgIHN0b3JlcCB0MSwgW3Qw
LCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQorCisub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJv
dW5kczoKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BS
T0ZJTEVSCisgICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQyCisgICAgICAgIHN0b3JlYiAx
LCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDJdCisgICAgZW5kCisgICAgYWRkaSAx
LCB0MywgdDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91
c1N0b3JlUmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBI
YXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0
QnlWYWxTbG93CisgICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0sIC5v
cFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVS
ZXN1bHQ6CisgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQyCisgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MiwgdDEpCiAgICAgd3JpdGVCYXJyaWVyKHQxKQotICAgIHN0b3JlcCB0MSwgQXJy
YXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdCisgICAgc3RvcmVwIHQxLCBBcnJheVN0b3Jh
Z2U6Om1fdmVjdG9yW3QwLCB0MywgOF0KICAgICBkaXNwYXRjaCg1KQogCi0ub3BQdXRCeVZhbEVt
cHR5OgorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eToKICAgICBpZiBWQUxVRV9QUk9GSUxF
UgotICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QzXQor
ICAgICAgICBsb2FkcCAzMltQQiwgUEMsIDhdLCB0MQorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQ
cm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QxXQogICAgIGVuZAogICAgIGFkZGkgMSwgQXJyYXlT
dG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgLXNpemVvZiBJbmRl
eGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5
VmFsU3RvcmVSZXN1bHQKLSAgICBhZGRpIDEsIHQyLCB0MQorICAgIGJpYiB0MywgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1
dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKKyAgICBhZGRpIDEsIHQzLCB0MQogICAgIHN0
b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1Ymxp
Y0xlbmd0aFt0MF0KLSAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGptcCAub3BQ
dXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKICAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9wdXRfYnlfdmFsKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw5IEBAIGVuZAogCiAjIENv
bnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCiBjb25zdCBJc0FycmF5ID0g
MQorY29uc3QgSGFzQ29udGlndW91cyA9IDIKIGNvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKLWNv
bnN0IEFsbEFycmF5VHlwZXMgPSAxNQorY29uc3QgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSA9IDE2
CiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtaW5EZW5zaXR5TXVsdGlwbGkKIAogaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZl
Y3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKIHsKLSAgICByZXR1cm4g
bGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11
bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworICAgIHJldHVybiBsZW5ndGggLyBtaW5EZW5zaXR5TXVs
dGlwbGllciA8PSBudW1WYWx1ZXM7CiB9CiAKIGlubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGlu
Z0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDggQEAgc3Rh
dGljIHVuc2lnbmVkIGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbQogLy8gY3VycmVudENvdW50KSB3
aWxsIGJlIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgYXMgYXBwcm9wcmlhdGU7IGluIHRo
ZQogLy8gY2FzZSBvZiBzaGlmdCB0aGlzIG11c3QgYmUgcmVtb3ZpbmcgdmFsdWVzLCBpbiB0aGUg
Y2FzZSBvZiB1bnNoaWZ0IHRoaXMKIC8vIG11c3QgYmUgaW50cm9kdWNpbmcgbmV3IHZhbHVlcy4K
LXN0YXRpYyBpbmxpbmUgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVz
dWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRN
b2RlIHNoaWZ0Q291bnRNb2RlPgordm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWdu
ZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQoY3VycmVudENv
dW50ID4gcmVzdWx0Q291bnQpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gY3VycmVudENvdW50IC0g
cmVzdWx0Q291bnQ7CkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0
KEV4ZWNTdGF0ZSogZXhlYwogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJheS0+
bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFzQXJyYXkodGhpc09iaiktPnNoaWZ0Q291bnQoZXhlYywg
aGVhZGVyLCBjb3VudCkpCisgICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYm
IGFzQXJyYXkodGhpc09iaiktPnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRl
ciwgY291bnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjMxLDcgKzIzMiw4
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMKICAgICAgICAgfQog
ICAgIH0KIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1
bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6
U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50
Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNT
RVJUKHJlc3VsdENvdW50ID4gY3VycmVudENvdW50KTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHJl
c3VsdENvdW50IC0gY3VycmVudENvdW50OwpAQCAtMjQ3LDEwICsyNDksMTAgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBleAogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlz
T2JqKSkgewogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7Ci0gICAg
ICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT51bnNoaWZ0Q291bnQo
ZXhlYywgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0gbGVu
Z3RoICYmIGFycmF5LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGV4ZWMsIGhlYWRlciwg
Y291bnQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIAogICAgIGZvciAodW5z
aWduZWQgayA9IGxlbmd0aCAtIGN1cnJlbnRDb3VudDsgayA+IGhlYWRlcjsgLS1rKSB7CiAgICAg
ICAgIHVuc2lnbmVkIGZyb20gPSBrICsgY3VycmVudENvdW50IC0gMTsKICAgICAgICAgdW5zaWdu
ZWQgdG8gPSBrICsgcmVzdWx0Q291bnQgLSAxOwpAQCAtNTI2LDcgKzUyOCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgYXJyYXktPnB1c2goZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwogICAgIH0KLQorICAgIAogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQz
MihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC01NDQsNiArNTQ2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIH0KKyAgICAKICAgICBKU1ZhbHVlIG5ld0xlbmd0aChzdGF0
aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZXhlYy0+YXJn
dW1lbnRDb3VudCgpKSk7CiAgICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCwgbmV3TGVuZ3RoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG5ld0xlbmd0aCk7CkBAIC02MDAsNyArNjAzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCAwKTsKLSAgICAg
ICAgc2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMSwgMCwgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8
SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5n
dGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBwdXRQcm9wZXJ0eShl
eGVjLCB0aGlzT2JqLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihsZW5n
dGggLSAxKSk7CkBAIC03MzAsNyArNzMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0KKyAgICAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpKTsKIApA
QCAtNzYyLDExICs3NjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogCiAgICAgdW5zaWduZWQgYWRkaXRpb25hbEFyZ3MgPSBzdGQ6Om1heDxpbnQ+KGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChhZGRpdGlvbmFsQXJncyA8IGRlbGV0
ZUNvdW50KSB7Ci0gICAgICAgIHNoaWZ0KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3Vu
dCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7CisgICAgICAgIHNoaWZ0PEpTQXJyYXk6OlNoaWZ0
Q291bnRGb3JTcGxpY2U+KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRp
b25hbEFyZ3MsIGxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBl
bHNlIGlmIChhZGRpdGlvbmFsQXJncyA+IGRlbGV0ZUNvdW50KSB7Ci0gICAgICAgIHVuc2hpZnQo
ZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3Ro
KTsKKyAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihleGVjLCB0
aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgpOwogICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KQEAgLTc5MSw3ICs3OTQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBuckFy
Z3MgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJncykgewotICAgICAgICB1
bnNoaWZ0KGV4ZWMsIHRoaXNPYmosIDAsIDAsIG5yQXJncywgbGVuZ3RoKTsKKyAgICAgICAgdW5z
aGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDAsIG5y
QXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDYgKzU2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNl
KSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOwogICAgIH0KICAgICAKKyAg
ICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5vdCBqdXN0IGJlY2F1c2UgaXQncyBoYW5keSwgYnV0
IHRvIHJlbWluZCB5b3UgdGhhdAorICAgIC8vIHRoZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJmbGll
cyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICBzdGF0aWMgQnV0dGVyZmx5
KiBmcm9tUG9pbnRlcihjaGFyKiBwdHIpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxCdXR0ZXJmbHkqPihwdHIpOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBwb2ludGVy
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7IH0KKyAgICAKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIo
KSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhp
bmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CkBA
IC03MCw5ICs3OSwyMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4
aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0K
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBw
cm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0
eVN0b3JhZ2UoKTsgfQorICAgIAorICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJu
IGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgpOyB9CisgICAgdWludDMyX3QgdmVjdG9y
TGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0KKyAg
ICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigp
LT5zZXRQdWJsaWNMZW5ndGgodmFsdWUpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodWlu
dDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKHZhbHVlKTsg
fQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgVCogaW5kZXhpbmdQYXlsb2Fk
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KICAgICBBcnJheVN0b3Jh
Z2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+
KCk7IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMoKSB7IHJldHVybiBp
bmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+ID4oKTsgfQorICAgIAorICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGZyb21Db250aWd1b3VzKFdyaXRlQmFycmllcjxVbmtub3duPiogY29u
dGlndW91cykKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZs
eSo+KGNvbnRpZ3VvdXMpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KICAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0
b3JhZ2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNp
emVBcnJheQogCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRl
eGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0Fy
cmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgQVNTRVJUKG51bWJl
ck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRl
IHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCkBAIC0xNjMsNyArMTYz
LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cgogCiBpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bnVtYmVyT2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGlu
IHVuc2hpZnQoKSwgYWJvdmUuCiAgICAgbWVtbW92ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQy
LDE3IEBAIGlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXQKIAogaW5saW5l
IHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAg
ICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBy
ZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFBy
b3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICByZXR1cm4gMDsK
LSAgICAKLSAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZGV4
aW5nVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgY2hhciogaW5kZXhpbmdUeXBl
VG9TdHJpbmcoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgY2hhciBy
ZXN1bHRbMTI4XTsKKyAgICBjb25zdCBjaGFyKiBiYXNpY05hbWU7CisgICAgc3dpdGNoIChpbmRl
eGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAg
YmFzaWNOYW1lID0gIk5vbkFycmF5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJh
eVdpdGhDb250aWd1b3VzOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQ29udGln
dW91cyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAg
ICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFy
cmF5Q2xhc3MiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6
CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9
ICJBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYmFzaWNOYW1lID0gIlVua25vd24hIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIHNucHJpbnRmKAorICAgICAgICByZXN1bHQsIHNpemVvZihyZXN1bHQpLCAiJXMlcyIsIGJh
c2ljTmFtZSwKKyAgICAgICAgKGluZGV4aW5nVHlwZSAmIE1heUhhdmVJbmRleGVkQWNjZXNzb3Jz
KSA/ICJ8TWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMiIDogIiIpOworICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDE5ICszMiwyMSBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAvLyBG
bGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBIYXNDb250aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIAogLy8gQWRk
aXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNl
IGFyZSB1c3VhbGx5CiAvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVj
dGx5Lgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAg
PSAzMjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGlu
IHRoZSBwYXN0Lgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vz
c29ycyAgPSA2NDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nl
c3NvcnMgID0gMzI7CiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7
CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAg
ICAgPSBIYXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UgICAgICAgID0gSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFy
cmF5U3RvcmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAg
ICAgICAgICAgICAgICA9IElzQXJyYXk7IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXki
IGJ1dCB0aGlzIHdvdWxkIGxlYWQgdG8gZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgor
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAg
ID0gSXNBcnJheSB8IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdl
Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
ICAgID0gSXNBcnJheSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU0LDEw
IEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJh
eTogICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91
czogICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBB
UlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZQpAQCAtNzYsNiArODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhh
c0luZGV4aW5nSGVhZGVyKEluZAogICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBl
KTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91
cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKIHsKICAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5
U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKQEAgLTg2LDYgKzk3LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNob3VsZFVzZVNsb3dQdXQoSW5kZQogICAgIHJldHVybiAhIShpbmRl
eGluZ1R5cGUgJiBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciogaW5k
ZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9zc2li
bGUgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAg
ICAgICA9IDMxOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOCBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3Ro
LCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhj
ZXB0aW9uLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlz
IHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhl
IGZvbGxvd2luZyAnaWYnLgpAQCAtNDAyLDEyICs0MDEsNzEgQEAgYm9vbCBKU0FycmF5OjpzZXRM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTQXJy
YXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0
aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgaWYgKCFuZXdMZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAor
ICAgICAgICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xv
YmFsRGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBpZiAobmV3TGVu
Z3RoID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNh
c2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBkbyBmYXN0IHB1c2guCisgICAgICAgICAgICB8fCAobmV3
TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKKyAgICAgICAgICAgICAgICAmJiAhaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMo
bV9idXR0ZXJmbHkpKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24s
CisgICAgICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5n
bG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9idXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVu
Z3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3TGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3RoOykKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChuZXdMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
K30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZW5n
dGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOworICAgICAgICBpZiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5j
bGVhcigpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgp
OworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAtNDMxLDI2ICs0ODksMjggQEAgSlNWYWx1ZSBKU0Fy
cmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdp
dGggYXJndW1lbnQgaW5keC4KLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGlu
ZGV4KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICAgICAgaWYg
KCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIENh
bGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0
aCIsIGluZHgsIGFuZCB0cnVlLgotICAgICAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUp
OwotICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlMZW5ndGgo
KTsKKyAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBpbmR4LgorICAgIEpTVmFsdWUg
ZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAvLyBDYWxsIHRoZSBbW0RlbGV0
ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCisg
ICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgLy8gQ2FsbCB0aGUgW1tQ
dXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwg
YW5kIHRydWUuCisgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAvLyBSZXR1
cm4gZWxlbWVudC4KKyAgICByZXR1cm4gZWxlbWVudDsKIH0KIAogLy8gUHVzaCAmIHB1dEluZGV4
IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCB3aXRoIHR3byBzbWFsbCBkaWZmZXJlbmNlcy4KQEAgLTQ2
NCw2ICs1MjQsMjYgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkg
eworICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAg
ICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2
YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52
YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0
aG91dEF0dHJpYnV0ZXMoZXhlYywgbGVuZ3RoLCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewog
ICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgaWYgKGF0dGVt
cHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1
ZSkpIHsKQEAgLTUwNSwxMiArNTg1LDggQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYQogICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCitib29sIEpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKGNvdW50ID4g
MCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CiAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgCkBA
IC01NjUsMTAgKzY0MSw2MSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBl
eGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
bnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNp
Z25lZCBjb3VudCkKK3sKKyAgICBBU1NFUlQoY291bnQgPiAwKTsKKyAgICAKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91
czogeworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOworICAgICAgICAKKyAg
ICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBz
aGlmdC4gV2UncmUgd2lsbGluZyB0byBkbworICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90
IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCArIGNv
dW50KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAgICAgICAgICAgcmV0dXJuIHNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAKKyAgICAgICAg
dW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgLy8gU3RvcmluZyB0
byBhIGhvbGUgaXMgZmluZSBzaW5jZSB3ZSdyZSBzdGlsbCBoYXZpbmcgYSBnb29kIHRpbWUuIEJ1
dCByZWFkaW5nCisgICAgICAgICAgICAvLyBmcm9tIGEgaG9sZSBpcyB0b3RhbGx5IG5vdCBmaW5l
LCBzaW5jZSB3ZSBtaWdodCBoYXZlIHRvIHJlYWQgZnJvbSB0aGUgcHJvdG8KKyAgICAgICAgICAg
IC8vIGNoYWluLgorICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpICsgY291bnRdLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkgewor
ICAgICAgICAgICAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0aCBpcyB0byBlbnN1cmUg
dGhhdCB3ZSBkb24ndCBtYWtlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gbWlzdGFrZSBp
biB0aGUgZnV0dXJlOiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSgpIGNhbid0IGRvIGFueXRo
aW5nCisgICAgICAgICAgICAgICAgLy8gYWJvdXQgaG9sZXMgKGF0IGxlYXN0IGZvciBub3cpLCBi
dXQgaXQgY2FuIGRldGVjdCB0aGVtIHF1aWNrbHkuIFNvCisgICAgICAgICAgICAgICAgLy8gd2Ug
Y29udmVydCB0byBhcnJheSBzdG9yYWdlIGFuZCB0aGVuIGFsbG93IHRoZSBhcnJheSBzdG9yYWdl
IHBhdGggdG8KKyAgICAgICAgICAgICAgICAvLyBmaWd1cmUgaXQgb3V0LgorICAgICAgICAgICAg
ICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwg
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5jZSB3
ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3VuZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0aGF0
IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgorICAgICAgICAgICAgLy8gYmFycmllci4KKyAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmll
cih2KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRM
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xl
YXIoKTsKKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgob2xk
TGVuZ3RoIC0gY291bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB1bnNoaWZ0IGNhbiBiZSBo
YW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4gICAgCi1ib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQor
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKIAogICAgIEFTU0VSVChzdGFydEluZGV4IDw9IGxlbmd0aCk7CkBAIC02MTAsNiArNzM3
LDQ3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
eXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQp
Cit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5Q2xhc3M6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhbmRsZSB0aGlzLiBCdXQgaXQgc2hv
dWxkbid0IGV2ZXIgY29tZSB1cCwgc28gd2Ugd29uJ3QuCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUg
dW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbyBzbworICAgICAgICAvLyBvbmx5IGlmIGl0J3Mg
bm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5ndGggLSBzdGFydEluZGV4ID49
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgCisgICAgICAg
IGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGggKyBj
b3VudCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGkt
LSA+IHN0YXJ0SW5kZXg7KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBz
dGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5n
bG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSAr
IGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBOT1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQg
b2YgdGhlIGFycmF5IHRoYXQgd2Ugc2hpZnRlZCBvdXQKKyAgICAgICAgLy8gb2YuIFRoaXMgaXMg
ZmluZSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gc3RvcmUgb3ZlciB0aGF0IGFy
ZWEsIGFuZAorICAgICAgICAvLyBpbiBjb250aWd1b3VzIG1vZGUgc3RvcmluZyBpbnRvIGEgaG9s
ZSBpcyBndWFyYW50ZWVkIHRvIGJlaGF2ZSBleGFjdGx5IHRoZSBzYW1lCisgICAgICAgIC8vIGFz
IHN0b3Jpbmcgb3ZlciBhbiBleGlzdGluZyBlbGVtZW50LgorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3Rh
cnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogc3Rh
dGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQq
IGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5h
c051bWJlcigpOwpAQCAtNjI0LDYgKzc5Miw0NSBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmlu
Z1BhaXJGb3JRU29ydChjCiAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUodmEtPnNlY29uZCwg
dmItPnNlY29uZCk7CiB9CiAKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2
b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBj
b21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERh
dGEpCit7CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhDb250aWd1b3VzIHx8
IGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIAorICAgIHVuc2ln
bmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICB1bnNpZ25lZCBuZXdSZWxldmFu
dExlbmd0aDsKKyAgICBjb21wYWN0Rm9yU29ydGluZzxpbmRleGluZ1R5cGU+KAorICAgICAgICBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQsCisgICAgICAgIG5ld1JlbGV2YW50TGVuZ3RoKTsK
KyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGRhdGEgPSBpbmRleGluZ0RhdGE8aW5k
ZXhpbmdUeXBlPigpOworICAgIAorICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQXJy
YXlTdG9yYWdlICYmIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbmV3UmVsZXZhbnRMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAo
IWRhdGFbaV0uaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQorICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21w
YXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgCisgICAgLy8gRm9yIG51bWVy
aWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vz
b3J0LiBXZQorICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHks
IHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBz
d2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICBxc29ydChk
YXRhLCBuZXdSZWxldmFudExlbmd0aCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNv
bXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAgIHJldHVybjsKK30KKwogdm9pZCBKU0FycmF5Ojpz
b3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxs
VHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VSVCgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CkBAIC02MzIsMTE3ICs4MzksMTI5IEBAIHZvaWQgSlNB
cnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGUKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFj
dEZvclNvcnRpbmcoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAg
ICAgc29ydE51bWVyaWNWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oZXhlYywgY29tcGFyZUZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
QVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7Ci0gICAgICAgIHNpemVf
dCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92
ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJl
cnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAgICAg
ICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEpOwotICAgICAgICAKLSAgICAgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2gg
aXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAgICAgICAvLyBh
bHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5v
IHVzZXIgdmlzaWJsZQotICAgICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBv
cmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgICAgICBxc29ydChzdG9yYWdlLT5t
X3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1i
ZXJzRm9yUVNvcnQpOwotICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgc29ydE51bWVyaWNWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVjLCBj
b21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogfQogCi12b2lkIEpT
QXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqIGV4
ZWMsIFdyaXRlQmFycmllcjxVbmtub3duPiogYmVnaW4sIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3Ro
KQogewotICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7Ci0gICAgCi0gICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6
CisgICAgaWYgKCFyZWxldmFudExlbmd0aCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIENv
bnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBz
byB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgLy8g
VGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBl
ciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKKyAgICAv
LyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21l
IG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgIC8v
IHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5n
IGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgogICAgICAgICAKLSAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZygpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIEFTU0VSVCghc3Rv
cmFnZS0+bV9zcGFyc2VNYXApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAv
LyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2
ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAg
ICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQg
dHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFy
eQotICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFz
aGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJl
dHVybgotICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVm
ZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KLSAgICAgICAg
Ci0gICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQpOwotICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KKyAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMocmVsZXZhbnRMZW5ndGgp
OworICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIEhlYXA6Omhl
YXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKICAgICAgICAgCi0gICAgICAg
IGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIHZhbHVlc1tp
XS5maXJzdCA9IHZhbHVlOwotICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0g
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgICAg
IH0KKyAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBiZWdpbltpXS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgIGlzU29ydGlu
Z1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1By
aW1pdGl2ZSgpOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93
aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMg
ZXZlbiBhZnRlcgotICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlv
bi4KKyAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRv
U3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAvLyBhIHRvU3RyaW5n
IGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAg
ICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4
ZWMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAg
ICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGlu
ZShleGVjKTsKICAgICAgICAgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZh
bHVlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQg
YmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgICAg
ICAvLyB0aGFuIE8oTiBsb2cgTikuCisgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3Ry
aW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQu
IFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAvLyB0aGFuIE8oTiBsb2cgTikuCiAgICAg
ICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQotICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzKQotICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOwotI2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0
aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KLSAgICAgICAgLy8gRUNNQVNj
cmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2Us
IGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBpZiAoaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzKQogICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Cisg
ICAgZWxzZQorICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
I2Vsc2UKKyAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5
IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90
IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3Jt
IGEgc3RhYmxlIHNvcnQuCisgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwog
I2VuZGlmCisgICAgCisgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhl
IGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCisgICAgLy8gaW5jcmVhc2Ug
dGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMu
CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3Vv
dXM6CisgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZ2xvYmFsRGF0YSwgcmVsZXZhbnRM
ZW5ndGgpOworICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSB0b1N0
cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBz
dG9yYWdlLAotICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3Jp
Z25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICBp
bmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCk7Ci0gICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBpZiAoYXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpIHsKKyAgICAgICAg
ICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgcmVsZXZhbnRMZW5n
dGgpOworICAgICAgICAgICAgYmVnaW4gPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKQotICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPCBy
ZWxldmFudExlbmd0aCkKKyAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgocmVs
ZXZhbnRMZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2
YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJlZ2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6
CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAg
IGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3RoOwor
ICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAg
ICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOwogICAg
ICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVl
cyk7CisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oCisg
ICAgICAgICAgICBleGVjLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3RoOwor
ICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KAorICAgICAg
ICAgICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLCBuZXdSZWxldmFudExlbmd0aCk7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAgICAgICAgIAorICAg
ICAgICBzb3J0Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oCisgICAgICAg
ICAgICBleGVjLCBzdG9yYWdlLT5tX3ZlY3RvciwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC04MjgsMTA4ICsxMDQ3LDEx
NiBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiAgICAgc3RhdGlj
IGhhbmRsZSBudWxsKCkgeyByZXR1cm4gMHg3RkZGRkZGRjsgfQogfTsKIAotdm9pZCBKU0FycmF5
Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBl
IGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCit0ZW1wbGF0ZTxJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0VmVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxs
RGF0YSYgY2FsbERhdGEpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsK
KyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7
CiAgICAgCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBj
YXNlIEFycmF5Q2xhc3M6Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNl
cHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KKyAg
ICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJl
IGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgogICAgICAgICAKLSAgICAgICAgLy8gVGhlIG1heGlt
dW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkg
dXAgdG8gbm8gZ29vZAotICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCi0g
ICAgICAgIEFTU0VSVChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKLSAgICAgICAgaWYgKGFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAvLyBUaGUg
bWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xl
YXJseSB1cCB0byBubyBnb29kCisgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgor
ICAgIEFTU0VSVChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKKyAgICBpZiAobV9idXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgo
KSwgYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKCFhcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwotICAgICAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1
c2VkVmVjdG9yTGVuZ3RoOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSByZWxldmFu
dExlbmd0aDxpbmRleGluZ1R5cGU+KCk7CisgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZl
Y3Rvckxlbmd0aDsKICAgICAgICAgCi0gICAgICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICAg
ICAgcmV0dXJuOworICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4g
dHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
Y29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOwotICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOwotICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKLSAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7CisgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJh
Y3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3Ig
Ml4zMSBpdGVtcworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7CisgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKKyAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKICAgICAgICAgCi0gICAgICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVu
Y3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlSlMpCisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRy
KG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9u
KSwgMikpOwogICAgICAgICAKLSAgICAgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
LmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0
aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwg
ZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAgICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1
cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgIC8vIEZJWE1FOiBJZiB0
aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwg
ZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdo
aWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCiAgICAgICAgIAotICAgICAgICB1bnNp
Z25lZCBudW1EZWZpbmVkID0gMDsKLSAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsK
KyAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQg
PSAwOwogICAgICAgICAKLSAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3Jp
bmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5n
IGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCi0gICAgICAgIGZvciAoOyBudW1EZWZpbmVk
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgICAgICBpZiAobnVt
RGVmaW5lZCA+IGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVk
KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgIHRyZWUuaW5zZXJ0
KG51bURlZmluZWQpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpID4g
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgp
OwotICAgICAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IHY7Ci0gICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOwotICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7Ci0gICAgICAgICAg
ICAgICAgfQorICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3Npbmcg
dmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIg
b25lcyBpbnRvIHRoZSB0cmVlLgorICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgIGlmIChudW1EZWZpbmVkID4gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEpTVmFsdWUg
diA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAg
ICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAg
ICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChp
ID4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7Cisg
ICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Cisg
ICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAg
KytudW1EZWZpbmVkOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQogICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1V
bmRlZmluZWQ7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIWFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcCk7CisgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQg
KyBudW1VbmRlZmluZWQ7CiAgICAgICAgIAotICAgICAgICAvLyBUaGUgYXJyYXkgc2l6ZSBtYXkg
aGF2ZSBjaGFuZ2VkLiAgRmlndXJlIG91dCB0aGUgbmV3IGJvdW5kcy4KLSAgICAgICAgdW5zaWdu
ZWQgbmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCA9IG1pbihhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCks
IGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgLy8gVGhlIGFycmF5IHNpemUg
bWF5IGhhdmUgY2hhbmdlZC4gIEZpZ3VyZSBvdXQgdGhlIG5ldyBib3VuZHMuCisgICAgdW5zaWdu
ZWQgbmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4o
KTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xk
ID0gbWluKG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCBudW1EZWZpbmVkKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpKSk7Ci0gICAgICAg
IHVuc2lnbmVkIHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0
b3JMZW5ndGgsIG5ld1VzZWRWZWN0b3JMZW5ndGgpOwotICAgICAgICB1bnNpZ25lZCBjbGVhckVs
ZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIHVzZWRWZWN0b3JM
ZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBt
X3N0b3JhZ2UuCi0gICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKLSAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRy
ZWUpOwotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c1RvRXh0cmFjdFRo
cmVzaG9sZDsgKytpKSB7Ci0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZh
bHVlKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Ly8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7IGkgPCB1bmRlZmluZWRFbGVtZW50c1RocmVz
aG9sZDsgKytpKQotICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldFVu
ZGVmaW5lZCgpOwotCi0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhl
IHZlY3RvciBhcmUgemVyb2VkIG91dC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdW5kZWZp
bmVkRWxlbWVudHNUaHJlc2hvbGQ7IGkgPCBjbGVhckVsZW1lbnRzVGhyZXNob2xkOyArK2kpCi0g
ICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICB1bnNp
Z25lZCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZCA9IG1pbihtaW4obmV3ZXN0VXNlZFZlY3Rv
ckxlbmd0aCwgbnVtRGVmaW5lZCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzLnNpemUoKSkpOworICAgIHVuc2lnbmVkIHVuZGVmaW5lZEVsZW1lbnRzVGhy
ZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG5ld1VzZWRWZWN0b3JMZW5ndGgp
OworICAgIHVuc2lnbmVkIGNsZWFyRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZl
Y3Rvckxlbmd0aCwgdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgICAgIAorICAgIC8vIENvcHkgdGhl
IHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0
b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKKyAgICBpdGVyLnN0YXJ0X2l0
ZXJfbGVhc3QodHJlZSk7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c1RvRXh0cmFj
dFRocmVzaG9sZDsgKytpKSB7CisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJd
LnZhbHVlKTsKKyAgICAgICAgKytpdGVyOworICAgIH0KKyAgICAvLyBQdXQgdW5kZWZpbmVkIHZh
bHVlcyBiYWNrIGluLgorICAgIGZvciAodW5zaWduZWQgaSA9IGVsZW1lbnRzVG9FeHRyYWN0VGhy
ZXNob2xkOyBpIDwgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAgaW5k
ZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5zZXRVbmRlZmluZWQoKTsKKworICAgIC8vIEVu
c3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgaSA8IGNsZWFy
RWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlw
ZT4oKVtpXS5jbGVhcigpOworICAgIAorICAgIGlmIChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdU
eXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOworfQorCit2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxE
YXRhJiBjYWxsRGF0YSkKK3sKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwor
ICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2Fz
ZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBhcnJheVN0
b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xk
OworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgc29ydFZlY3RvcjxBcnJh
eVdpdGhDb250aWd1b3VzPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSk7CisgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBzb3J0VmVjdG9yPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oZXhlYywgY29tcGFyZUZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAgICAgICByZXR1cm47Ci0gICAgfQogICAg
ICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkz
OCwxMTMgKzExNjUsMTIxIEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmEKIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFy
Z3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIHVuc2lnbmVk
IHZlY3RvckVuZDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICAKICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlD
bGFzczoKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRp
Z3VvdXM6IHsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OworICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICAgICAgdW5zaWduZWQgdmVjdG9y
RW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytp
KSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0g
ICAgICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBh
cmdzLmFwcGVuZCh2LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICg7
IGkgPCBzdG9yYWdlLT5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0
KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNI
KCk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICBpZiAoIXYp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAg
fQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3RoKCk7ICsraSkKKyAgICAgICAgYXJncy5hcHBl
bmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhl
Y1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewor
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwor
ICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICAKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMt
Pmxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKTsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lU
SF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgdW5zaWduZWQg
aSA9IDA7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+
bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkg
ewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAg
ICAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fs
bEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0
QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0
b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBD
UkFTSCgpOworICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgaWYg
KCF2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQo
aSwgdi5nZXQoKSk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisg
ICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAotdW5z
aWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoKQordGVtcGxhdGU8SW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcodW5zaWduZWQm
IG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCkKIHsKICAgICBBU1NFUlQo
IWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgCi0gICAg
ICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB1bnNpZ25lZCBteVJlbGV2YW50TGVuZ3RoID0g
cmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdUeXBlPigpOworICAgIAorICAgIG51bURlZmluZWQgPSAw
OworICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CiAgICAgICAgIAotICAgICAgICB1bnNp
Z25lZCBudW1EZWZpbmVkID0gMDsKLSAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsK
KyAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IG15UmVsZXZhbnRMZW5ndGg7ICsrbnVtRGVmaW5lZCkg
eworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251bURl
ZmluZWRdLmdldCgpOworICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICg7IG51bURlZmluZWQg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUg
diA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAgaWYg
KCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAgICAg
IGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVk
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwotICAgICAgICAg
ICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBteVJlbGV2YW50TGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlw
ZT4oKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZp
bmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5k
ZWZpbmVkOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3
VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JM
ZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5jbGVhcigpOwotICAgICAgICAKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gbnVtRGVmaW5lZDsKICAgICB9CiAgICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19CisgICAgbmV3
UmVsZXZhbnRMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgIAorICAgIGlm
IChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgQVNTRVJUKCFhcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCBuZXdSZWxldmFudExlbmd0aDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8
aW5kZXhpbmdUeXBlPigpW2ldLnNldFVuZGVmaW5lZCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IG5ld1JlbGV2YW50TGVuZ3RoOyBpIDwgbXlSZWxldmFudExlbmd0aDsgKytpKQorICAgICAgICBp
bmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLmNsZWFyKCk7CiAKKyAgICBpZiAoaGFzQXJy
YXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpCisgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX251bVZh
bHVlc0luVmVjdG9yID0gbmV3UmVsZXZhbnRMZW5ndGg7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24g
MTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MSw4ICs3MSw1NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBwdXNoKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgICAgICBKU1ZhbHVlIHBvcChFeGVjU3Rh
dGUqKTsKIAotICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3Rh
cnRJbmRleCwgdW5zaWduZWQgY291bnQpOwotICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGVu
dW0gU2hpZnRDb3VudE1vZGUgeworICAgICAgICAgICAgLy8gVGhpcyBmb3JtIG9mIHNoaWZ0IGhp
bnRzIHRoYXQgd2UncmUgZG9pbmcgcXVldWVpbmcuIFdpdGggdGhpcyBhc3N1bXB0aW9uIGluIGhh
bmQsCisgICAgICAgICAgICAvLyB3ZSBjb252ZXJ0IHRvIEFycmF5U3RvcmFnZSwgd2hpY2ggaGFz
IHF1ZXVlIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICBTaGlmdENvdW50Rm9yU2hpZnQsCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBvZiBzaGlmdCBoaW50cyB0aGF0
IHdlJ3JlIGp1c3QgZG9pbmcgY2FyZSBhbmQgZmVlZGluZyBvbiBhbiBhcnJheSB0aGF0CisgICAg
ICAgICAgICAvLyBpcyBwcm9iYWJseSB0eXBpY2FsbHkgdXNlZCBmb3Igb3JkaW5hcnkgYWNjZXNz
ZXMuIFdpdGggdGhpcyBhc3N1bXB0aW9uIGluIGhhbmQsCisgICAgICAgICAgICAvLyB3ZSB0cnkg
dG8gcHJlc2VydmUgd2hhdGV2ZXIgaW5kZXhpbmcgdHlwZSBpdCBoYXMgYWxyZWFkeS4KKyAgICAg
ICAgICAgIFNoaWZ0Q291bnRGb3JTcGxpY2UKKyAgICAgICAgfTsKKworICAgICAgICBib29sIHNo
aWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdp
dGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHNoaWZ0Q291bnRGb3JT
cGxpY2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3Vu
dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bmdUeXBlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICB0ZW1w
bGF0ZTxTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KKyAgICAgICAgYm9vbCBzaGlmdENv
dW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2hpZnRDb3VudE1vZGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNoaWZ0OgorICAgICAgICAgICAgICAgIHJldHVybiBz
aGlmdENvdW50Rm9yU2hpZnQoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAg
Y2FzZSBTaGlmdENvdW50Rm9yU3BsaWNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENv
dW50Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTaGlmdChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVj
LCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEo
KSkpOworICAgICAgICB9CisgICAgICAgIGJvb2wgdW5zaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKGV4
ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTxTaGlm
dENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChzaGlmdENvdW50TW9kZSkgeworICAgICAgICAgICAg
Y2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRD
b3VudEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGNhc2Ug
U2hpZnRDb3VudEZvclNwbGljZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50
Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1l
bnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2Fs
bEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKQEAgLTk4LDE0ICsxNDQsNDAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0
aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaGlmdENv
dW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJvb2wgc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uo
dW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwogCi0g
ICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7
Ci0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpOworICAgICAgICBi
b29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKTsKICAg
ICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCBib29sLCB1bnNp
Z25lZCk7CisKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAg
ICAgICAgdm9pZCBzb3J0TnVtZXJpY1ZlY3RvcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVG
dW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSk7Cisg
ICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAg
ICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiwgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpOworICAgICAgICAKKyAgICAg
ICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0
VmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSwgY29u
c3QgQ2FsbERhdGEmKTsKKworICAgICAgICBib29sIHNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uLCBBcnJh
eVN0b3JhZ2UqKTsKKyAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBi
b29sIHdyaXRhYmxlKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0
aW5nKCk7CisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAg
ICAgIHZvaWQgY29tcGFjdEZvclNvcnRpbmcodW5zaWduZWQmIG51bURlZmluZWQsIHVuc2lnbmVk
JiBuZXdSZWxldmFudExlbmd0aCk7CiAgICAgfTsKIAorICAgIGlubGluZSBCdXR0ZXJmbHkqIGNy
ZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIEluZGV4aW5nSGVhZGVyIGhlYWRlcjsKKyAg
ICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aChzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9S
X0xFTikpOworICAgICAgICBoZWFkZXIuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9i
YWxEYXRhLCAwLCAwLCB0cnVlLCBoZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAg
IGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCkBAIC0xMjEsNyArMTkzLDE1IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVB
cnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgYnV0dGVyZmx5ID0g
Y3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgp
OworICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxMZW5ndGggPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKKyAgICAgICAgICAg
ICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09
IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRl
QXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0KICAg
ICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5
PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAg
ICByZXR1cm4gYXJyYXk7CkBAIC0xMzMsMTUgKzIxMywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0
ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7Ci0gICAgICAgICpidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgs
IHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKLSAg
ICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0g
QXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCog
dGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFn
ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAg
ICAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAg
ICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgICAgICBpZiAoIWds
b2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
MCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVu
Z3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhC
aWFzID0gMDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERh
dGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEs
NyArMjMxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAg
IG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAKICAg
ICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5UHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwot
ICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3Rv
dHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgbV9hcnJheVN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdp
dGhDb250aWd1b3VzKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSk7CiAgICAgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZSkpOwogICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCkBAIC00
MTAsNiArNDExLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xvYgog
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBKU0FycmF5IGFsbG9jYXRpb25zIHRoYXQgbG9hZCB0
aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZyb20KICAgICAvLyB0aGlzIG9iamVjdCBub3cgbG9h
ZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMgU2xvd1B1dC4KICAgICBtX2FycmF5U3RydWN0dXJlLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7Cisg
ICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsKICAgICAKICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0
aGUgc2xvdyBraW5kIG9mCiAgICAgLy8gaW5kZXhlZCBzdG9yYWdlLgpAQCAtNDg1LDYgKzQ4Nyw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1lU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FyZ3VtZW50c1N0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk7CiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0KTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9ib29sZWFuT2JqZWN0U3RydWN0dXJlKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsYmFja0NvbnN0cnVjdG9yU3Ry
dWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25hbWVT
Y29wZVN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcmd1bWVu
dHNTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1
Y3R1cmU7IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMg
c29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgLy8gVGhpcyBn
ZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRlY2lk
ZSB0byBoYXZlIGEgYmFkIHRpbWUuCiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
YXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZTsKQEAgLTI2Nyw3ICsyNjgsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBuYW1lU2NvcGVTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX25hbWVTY29wZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1
Y3R1cmUqIGFyZ3VtZW50c1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzU3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX2FycmF5U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZSog
YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0
cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UuZ2V0KCk7IH0KICAgICAgICAgdm9pZCogYWRkcmVzc09m
QXJyYXlTdHJ1Y3R1cmUoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZTsgfQorICAgICAgICB2
b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSB7IHJldHVybiAm
bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IH0KICAgICAgICAgU3RydWN0dXJlKiBi
b29sZWFuT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9ib29sZWFuT2JqZWN0U3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3RvclN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5n
ZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAgLTQ3
OSw3ICs0ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4g
SlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCA/IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgOiBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOwogICAgIH0KIAog
ICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCAr
MTMxLDQwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAg
ICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOworICAgICAgICAgICAgc2l6ZV90IGNvdW50Owor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsK
KyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3Vz
KCk7CisgICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91
cygpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
IDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGNvdW50
ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1
cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAg
ICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
OyBjb3VudC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJl
bnRTb3VyY2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJy
ZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAg
ICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQogICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0
V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwpAQCAtMTU4LDYgKzE3
NCw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAg
CiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1
dHRlcmZseS0+Y29udGlndW91cygpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpKTsKICAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcCkKQEAgLTIzNCw2ICsyNTMsMjAgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBi
cmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzog
eworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5
OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAg
IAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKQEAgLTM1MSw2ICsz
ODQsMTYgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAocHJv
cGVydHlOYW1lID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVydHlOYW1lXS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIGlmIChwcm9wZXJ0
eU5hbWUgPj0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC00NDMsNiAr
NDg2LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKIHZvaWQg
SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBOT1RFOiB0
aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50LCBhcyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNvbnZl
cnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQorICAgICAgICAvLyB0aGlzIGNhc2UgaWYgd2UgZXZl
ciBjYXJlZC4KKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3Rv
cmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDY1LDYgKzUxMywyNCBAQCB2b2lk
IEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0KCkt
PmhhdmVBQmFkVGltZShnbG9iYWxEYXRhKTsKIH0KIAorV3JpdGVCYXJyaWVyPFVua25vd24+KiBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRF
WCk7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xk
VHlwZSkpOworICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkp
OworICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAg
ICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgZmFsc2UsIDAsCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0b3JM
ZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAg
bmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRlcmZs
eShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5l
d0J1dHRlcmZseS0+Y29udGlndW91cygpOworfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
cmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9
IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKQEAgLTQ4MCw3ICs1NDYsNyBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJzZU1h
cC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAgcmVz
dWx0LT5tX2luZGV4QmlhcyA9IDA7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpKTsKKyAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbigpKTsKICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdT
dHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00OTAsMTYgKzU1Niw5NiBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyCiAgICAgcmV0dXJuIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOwogfQogCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24sIHVu
c2lnbmVkIG5lZWRlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBwdWJsaWNMZW5ndGgg
PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBh
Y2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIHBy
b3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CisgICAgCisgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisg
ICAgICAgIGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihuZWVkZWRMZW5ndGgpKTsKKyAgICAKKyAgICBtZW1jcHkoCisgICAgICAgIG5l
d0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgIG1f
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgcHJv
cGVydHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgCisgICAgQXJyYXlTdG9y
YWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBuZXdT
dG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgobmVlZGVkTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5z
ZXRMZW5ndGgocHVibGljTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVh
cigpOworICAgIG5ld1N0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdTdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBwdWJsaWNMZW5n
dGg7IGktLTspIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Cisg
ICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKKyAgICB9CisgICAgCisg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4g
bmV3U3RvcmFnZTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworfQorCitXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4
aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmco
KSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxD
b250aWd1b3VzKGdsb2JhbERhdGEsIDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIEFT
U0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1
cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAKICAgICBjYXNlIEFM
TF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hv
dWxkQmVTcGFyc2UoKSkpCiAgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhp
c3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgICAgICBy
ZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworQnV0dGVyZmx5KiBKU09iamVjdDo6
ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlKCktPm5l
ZWRzU2xvd1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSktPmJ1dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtF
TFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0
YSktPmJ1dHRlcmZseSgpOworICAgICAgICByZXR1cm4gQnV0dGVyZmx5Ojpmcm9tQ29udGlndW91
cyhjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKSk7CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiB9CkBAIC01MDcsNiArNjUzLDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmVuc3VyZUFycmF5U3RvcmEKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBGSVhN
RTogVGhpcyBjb3VsZCBiZSBtYWRlIHdheSBtb3JlIGVmZmljaWVudCwgaWYgd2UgY2FyZWQuCisg
ICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpKTsKKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKSk7CiAgICAgICAgIApAQCAtNTI2LDYgKzY3NiwxMSBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiB2b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Nsb3dQ
dXRBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogeworICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKQEAgLTU2OSw4ICs3MjQs
NyBAQCB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhCiAgICAgaWYgKHNo
b3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKGdsb2JhbERhdGEsIG5ld1N0cnVjdHVyZSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9y
YWdlKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlKTsKKyAgICBz
d2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CiB9CiAKIGJvb2wgSlNPYmpl
Y3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03MDQsNiArODU4LDE0IEBAIGJvb2wgSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0MKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlz
T2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTg3Nyw2ICsxMDM5LDE3IEBAIHZvaWQgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3Qt
Pm1fYnV0dGVyZmx5OworICAgICAgICB1bnNpZ25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC0xMjY2LDYgKzE0MzksMzUgQEAgYm9vbCBK
U09iamVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbgogICAgIHJldHVybiBhc09iamVjdChw
cm90b3R5cGVWYWx1ZSktPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90
b3R5cGUoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAordm9pZCBKU09i
amVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmli
dXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
QVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
QVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIAorICAgIC8vIEZvciB1cyB0
byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4gdGhlIHB1YmxpYyBs
ZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3IgbGVu
Z3RoLgorICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IAorICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKKyAgICAgICAgfHwgKGkgPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IoaSwgY291bnRFbGVtZW50c0luQ29udGlndW91cyhtX2J1dHRlcmZseSkpKSkgeworICAgICAg
ICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9i
YWxEYXRhKTsKKyAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgZmFs
c2UpOworICAgICAgICBBU1NFUlQoaSA+PSBhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpOworICAg
ICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpOwor
CisgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30K
Kwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTM0OCwxNyArMTU1MCwyOSBAQCB2
b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSB7Ci0gICAgICAg
ICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csCisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZv
clZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKLSAgICAg
ICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAs
IDApKTsKKyAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgeworICAgICAg
ICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAg
ICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAg
ICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAgICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3Vv
dXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9y
TGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAxOworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmli
dXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC0xMzg0LDggKzE1OTgsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4
IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhhc0Fy
cmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoYXJy
YXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVY
KTsKIApAQCAtMTQ2NywxNCArMTY4MywzMiBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3RvCiAgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewotICAgICAgICBpZiAo
aW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwotICAgICAgICBpZiAoIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKLSAgICAgICAgCi0gICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwg
Z2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJz
ZSgpIHx8IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywg
aSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBt
b2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgeworICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRp
Z3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFk
T25seSB8IEFjY2Vzc29yKSkgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShnbG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ5OSwxMiArMTczMyw3IEBAIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICghY3VycmVudFZl
Y3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExl
bmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNh
bGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xl
bmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNl
ZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBU
aGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNy
ZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVz
aXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVlUGx1
c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoaW5j
cmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUyNCw5ICsxNzUzLDEwIEBAIEFM
V0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9yTGVu
Z3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JB
U0goKTsKQEAgLTE1MzUsNiArMTc2NSwxNiBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2Jq
ZWN0OjpnZXROZXdWCiAgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgs
IGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7CiB9CiAKK3Vuc2lnbmVkIEpTT2JqZWN0Ojpjb3VudEVs
ZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAgIHVuc2lnbmVk
IG51bVZhbHVlcyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKTsgaS0tOykgeworICAgICAgICBpZiAoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0p
CisgICAgICAgICAgICBudW1WYWx1ZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG51bVZhbHVlczsK
K30KKwogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBs
ZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNh
dXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKQEAg
LTE1NDMsNiArMTc4MywxMCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChK
U0dsCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGFycmF5U3RvcmFnZSgpOworICAgIAorICAgIGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWAorICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgs
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTE1NzQsNiAr
MTgxOCwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFT
U0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChoYXNDb250aWd1b3Vz
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChsZW5ndGggPiBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxl
bmd0aCA9IHN0ZDo6bWluKAorICAgICAgICBsZW5ndGggPDwgMSwKKyAgICAgICAgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCk7CisgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0Fy
cmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgbmV3VmVjdG9yTGVuZ3Ro
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxl
bmd0aChuZXdWZWN0b3JMZW5ndGgpOworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0
T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTYw
Miw2ICsxODYyLDE3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigK
ICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAg
ICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAg
ICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTE2MSw4ICsxNjIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjA3LDYgKzIw
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07
CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7
CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjY3LDkgKzI3MywxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCkBAIC0y
ODUsOCArMjkyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkg
PCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTYsMTUgKzMwNCwyMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAg
ICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAg
ICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQp
IHsKICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAg
LTMxNSw2ICszMzEsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6
ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQog
ICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewor
ICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwpA
QCAtMzMxLDYgKzM1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CkBA
IC0zNDQsNiArMzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsK
QEAgLTU0MSw2ICs1NjUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGZvby0+YXR0
ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZSguLi4pOwogICAgICAgICBib29sIGF0dGVt
cHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CiAgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIDAgaWYgY29udGlndW91cyBz
dG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UKKyAgICAgICAgLy8gaW5k
ZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBvciBiZWNhdXNlIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1l
LgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoTElLRUxZKGhh
c0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1v
ZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQogICAgICAgICAvLyB0aGlzIGlmIHlv
dSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRo
ZQogICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFn
ZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKQEAgLTU1Myw2ICs1ODcsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRh
KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVk
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChMSUtFTFkoaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5OworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KGdsb2JhbERhdGEp
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBidXR0ZXJm
bHlPZmZzZXQoKQpAQCAtNjE1LDExICs2NTcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2Uq
IGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5z
aWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7
CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJy
YXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0
YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4
Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29u
dGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKIAogICAgICAgICBib29sIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CkBAIC02
MzAsNiArNjc3LDU2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG5vdGlmeVByZXNl
bmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNrbHkgdG8gc3VjY2VlZCBhbmQg
eW91J3JlIHN1cmUgdGhhdAorICAgICAgICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4KKyAg
ICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobGVuZ3Ro
IDwgTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgICAg
IGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KGdsb2JhbERhdGEsIGxlbmd0aCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5n
dGgpCisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjb3VudEVsZW1lbnRzSW5D
b250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIHRlbXBs
YXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogaW5kZXhpbmdEYXRhKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChpbmRl
eGluZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB1bnNpZ25lZCByZWxldmFudExlbmd0aCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC02NjQsNyAr
NzYxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3Ro
U2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAg
IAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXNTbG93KEpT
R2xvYmFsRGF0YSYpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNs
b3coSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEJ1dHRlcmZseSogZW5zdXJlSW5kZXhlZFN0b3Jh
Z2VTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBA
QCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAKIGNoYXIqIEpTVmFs
dWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUg
PSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OwogICAgIHN0YXRpYyBj
aGFyIGRlc2NyaXB0aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykKQEAgLTIxMyw5ICsyMTMs
MTIgQEAgY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKSBjb25zdAogICAgICAgICB1LmFzRG91
YmxlID0gYXNEb3VibGUoKTsKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJE
b3VibGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1sw
XSwgYXNEb3VibGUoKSk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKQotICAgICAg
ICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwIiwgYXNDZWxsKCkpOwotICAg
IGVsc2UgaWYgKGlzVHJ1ZSgpKQorICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpIHsKKyAgICAgICAg
c25wcmludGYoCisgICAgICAgICAgICBkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwICglcDog
JXMsICVzKSIsCisgICAgICAgICAgICBhc0NlbGwoKSwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBh
c0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5jbGFzc05hbWUsCisgICAgICAgICAg
ICBpbmRleGluZ1R5cGVUb1N0cmluZyhhc0NlbGwoKS0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkoKSkpOworICAgIH0gZWxzZSBpZiAoaXNUcnVlKCkpCiAgICAgICAg
IHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiVHJ1ZSIpOwogICAgIGVsc2UgaWYgKGlzRmFs
c2UoKSkKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJGYWxzZSIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkK
ICNpZiAhRU5BQkxFKFlBUlJfSklUKQogICAgIHVzZVJlZ0V4cEpJVCgpID0gZmFsc2U7CiAjZW5k
aWYKLQorICAgIAogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2Ug
Y29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgp
KTsKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVz
aG9sZEZvck9wdGltaXplU29vbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDExICsz
MjMsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0K
IH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhpbmdU
cmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUo
KSkpOwotICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFj
Y2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKSkKKyAgICByZXR1
cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpCisgICAgICAg
IHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCk7Cit9CisKK05vblByb3BlcnR5
VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBj
b25zdAoreworICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZygpKQogICAgICAgICByZXR1cm4g
QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIAogICAgIHJldHVybiBBbGxvY2F0ZUFy
cmF5U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0
SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJv
b2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAg
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBt
X2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9n
bG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAv
LyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90
IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhl
IHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVDb250aWd1b3VzLAogICAgIEFsbG9jYXRlQXJyYXlT
dG9yYWdlLAogICAgIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICBTd2l0Y2hUb1Ns
b3dQdXRBcnJheVN0b3JhZ2UsCkBAIC01NywxMiArNTgsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHRv
QXR0cmlidXRlcyhOb25Qcm9wZXJ0eQogaW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5
cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9u
KQogewogICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgQWxsb2NhdGVDb250aWd1
b3VzOgorICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Ns
b3dQdXRBcnJheVN0b3JhZ2UpKSk7CisgICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQ29udGln
dW91czsKICAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xk
VHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0Nv
bnRpZ3VvdXMpIHwgSGFzQXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWxsb2NhdGVTbG93UHV0QXJy
YXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250aWd1b3VzKSB8IEhhc1Nsb3dQ
dXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgQVNTRVJU
KCEob2xkVHlwZSAmIEhhc0NvbnRpZ3VvdXMpKTsKICAgICAgICAgcmV0dXJuIChvbGRUeXBlICYg
fkhhc0FycmF5U3RvcmFnZSkgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWRk
SW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBNYXlIYXZlSW5kZXhl
ZEFjY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNv
dXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwx
NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBoYXNUd29PCiAgICAgcmV0dXJu
ICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oVCB2YWx1ZSkKK3sKKyAgICAv
LyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgIC8vICAgKHZhbHVlICogMyArIDEp
IC8gMjsKKyAgICAvLyBvcjoKKyAgICAvLyAgICh1bnNpZ25lZCljZWlsKHZhbHVlICogMS41KSk7
CisgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAg
ICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAodmFsdWUgJiAxKTsKK30KKwogI2lmICFD
T01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIU9TKFNPTEFSSVMpCiB1c2luZyBz
dGQ6OmlzZmluaXRlOwogI2lmICFDT01QSUxFUl9RVUlSSyhHQ0MxMV9HTE9CQUxfSVNJTkZfSVNO
QU4pCg==
</data>
<flag name="review"
          id="180143"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="180144"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167502</attachid>
            <date>2012-10-07 22:03:22 -0700</date>
            <delta_ts>2012-10-08 00:10:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>holycontiguous_8.patch</filename>
            <type>text/plain</type>
            <size>313501</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NyBA
QAorMjAxMi0xMC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcga2luZCBvZiBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgY2FsbGVkIENvbnRpZ3VvdXMsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgIAorICAgICAgICAtIE5vIGhlYWRlciBiaXRzIGJleW9uZCBJ
bmRleGVkSGVhZGVyLiBUaGlzIHJlc3VsdHMgaW4gYSAxNiBieXRlIHJlZHVjdGlvbgorICAgICAg
ICAgIGluIG1lbW9yeSB1c2FnZSBwZXIgYXJyYXkgdmVyc3VzIGFuIEFycmF5U3RvcmFnZSBhcnJh
eS4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHRoYXQgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBm
b3IgYW4gZW1wdHkgYXJyYXkgaXMgbm93IGp1c3QgMyAqIDggb24gYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LiBPZiB0aGF0LCBvbmx5IDggYnl0ZXMgYXJlIGFycmF5LXNwZWNpZmlj
OyB0aGUgcmVzdCBpcworICAgICAgICAgIG91ciBzdGFuZGFyZCBvYmplY3QgaGVhZGVyIG92ZXJo
ZWFkLgorICAgICAgICAKKyAgICAgICAgLSBObyBuZWVkIGZvciBob2xlIGNoZWNrcyBvbiBzdG9y
ZS4gVGhpcyByZXN1bHRzIGluIGEgfjQlIHNwZWVkLXVwIG9uCisgICAgICAgICAgS3Jha2VuIGFu
ZCBhIH4xJSBzcGVlZC11cCBvbiBWOHY3LgorICAgICAgICAKKyAgICAgICAgLSBwdWJsaWNMZW5n
dGggPD0gdmVjdG9yTGVuZ3RoLiBUaGlzIG1lYW5zIHRoYXQgZG9pbmcgbmV3IEFycmF5KGJsYWgp
CisgICAgICAgICAgaW1tZWRpYXRlbHkgYWxsb2NhdGVzIHJvb20gZm9yIGJsYWggZWxlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIE5vIHNwYXJzZSBtYXAgb3IgaW5kZXggYmlhcy4KKyAgICAg
ICAgCisgICAgICAgIElmIHlvdSBldmVyIGRvIHRoaW5ncyB0byBhbiBhcnJheSB0aGF0IHdvdWxk
IHJlcXVpcmUgcHVibGljTGVuZ3RoID4KKyAgICAgICAgdmVjdG9yTGVuZ3RoLCBhIHNwYXJzZSBt
YXAsIG9yIGluZGV4IGJpYXMsIHRoZW4gd2Ugc3dpdGNoIHRvIEFycmF5U3RvcmFnZQorICAgICAg
ICBtb2RlLiBUaGlzIGhhcHBlbnMgc2VlbXMgdG8gbmV2ZXIgaGFwcGVuIGluIGFueSBiZW5jaG1h
cmsgd2UgdHJhY2ssIGFuZAorICAgICAgICBpcyB1bmxpa2VseSB0byBoYXBwZW4gdmVyeSBmcmVx
dWVudGx5IG9uIGFueSB3ZWJzaXRlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dDo6YXBwZW5kKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKE1hY3JvQXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNo
YWJsZUJyYW5jaFRlc3QzMik6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZSk6CisgICAgICAg
IChKU0M6OkJ5VmFsSW5mbzo6QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFsSW5mbyk6CisgICAg
ICAgIChKU0M6OmdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpnZXRCeVZhbEluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9m
QnlWYWxJbmZvcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZCeVZhbEluZm9z
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6bW9kZVRvU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6REZHOjptb2RlSXNKU0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRz
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWF5U3RvcmVUb0hvbGUpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHlt
b3JwaGljKToKKyAgICAgICAgKEpTQzo6REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91
cyk6CisgICAgICAgIChKU0M6OkRGRzo6cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1
Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICog
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJhdGlvbik6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQ
dXJlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFs
KToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5
U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3Vv
dXNHZXRCeVZhbCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoU2FtcGxpbmdTY29wZSk6CisgICAg
ICAgIChKU0M6OlNhbXBsaW5nU2NvcGU6OlNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpT
YW1wbGluZ1Njb3BlOjp+U2FtcGxpbmdTY29wZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6
OkJ5VmFsQ29tcGlsYXRpb25JbmZvOjpCeVZhbENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChC
eVZhbENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSklUKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZSk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjphcnJheVByb2ZpbGVTYXcpOgorICAgICAgICAoSlNDOjpKSVQ6OmNob29z
ZUFycmF5TW9kZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9uZXdfYXJyYXkpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFy
cmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2V0QnlWYWwpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJf
RlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpwdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50
aW9ucy5oOgorICAgICAgICAoSlNDOjppc0RlbnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChK
U0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQpOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jVW5TaGlmdCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAg
KEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
Y29udGlndW91cyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUNvbnRpZ3VvdXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToK
KyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjppbmRleGluZ1R5cGVUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9J
bmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc0NvbnRpZ3Vv
dXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
ZXRMZW5ndGgpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENv
dW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnRWZWN0b3IpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNv
cHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5n
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudEZv
clNwbGljZSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hp
ZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNoaWZ0KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9yU3BsaWNlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ29udGln
dW91c0FycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFkVGltZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVD
b250aWd1b3VzU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
Z2VTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlU2xv
dyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c3dp
dGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFBy
b3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dp
dGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3Vu
dEVsZW1lbnRzSW5Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNl
VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNM
ZW5ndGhTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
blNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpz
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlhbGl6ZUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc1NwYXJzZU1hcCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5kZXhp
bmdEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnJlbGV2YW50TGVuZ3RoKToKKyAgICAg
ICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlw
dGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uczo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dEluZGV4aW5nKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVy
ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAg
ICAgKEpTQzo6bmV3SW5kZXhpbmdUeXBlKToKKwogMjAxMi0xMC0wMyAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5LnNwbGljZSBzaG91bGQgYmUgZmFzdCB3
aGVuIGl0IGlzIHVzZWQgdG8gcmVtb3ZlIGVsZW1lbnRzIG90aGVyIHRoYW4gdGhlIHZlcnkgZmly
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQAogCQkwRjBDRDRDMjE1RjFB
NjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0
RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovOyB9Owog
CQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEw
MEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERFNyAvKiBJbmRl
eGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi87IH07CiAJ
CTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRCN0E3M0EwMDVE
RTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBGMTYwMTVFMTU2MTk4QzkwMEMyNTg3
QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2MDE1QjE1NjE5OEJGMDBDMjU4N0MgLyog
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjUsNiArMTY2LDcgQEAKIAkJMEY3QjI5NEIx
NEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGN0IyOTRDMTRDM0NENDMwMDdDM0RCMSAvKiBERkdCeXRlQ29kZUNhY2hlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVGMDhDQzE0
NkJFNjAyMDAwNDcyQTkgLyogREZHQnl0ZUNvZGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAv
KiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjgwMjNFQTE2MTM4MzJCMDBB
MEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMEMxNTdF
RTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8q
IEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovOyB9OwogCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFi
bGVPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjkxOUQxMDE1N0YzMzI5MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkx
OUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi87
IH07CkBAIC04NDgsNiArODUwLDcgQEAKIAkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1
dERpcmVjdEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRE
aXJlY3RJbmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzMx
NUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENh
bGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENhbGxM
aW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjEzRTA0QzE2MTY0QTFC
MDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE2MDE1QjE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTM4LDYgKzk0MSw3IEBA
CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdD
b3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QjI5NDgxNEMzQ0Qy
MzAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDQ2FsbEhlbHBlcnMuaDsgcGF0aCA9IGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeVZhbEluZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdE
IC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8q
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMTA4LDcgKzIxMTIsNiBAQAogCQkJCUY2OTJBODVDMDI1NTU5N0Qw
MUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRjY5MkE4NUQwMjU1NTk3
RDAxRkY2MEY3IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggKi8sCiAJCQkJQzJENThDMzMxNTkxMkZF
RTAwMjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCi0JCQkJQzJENThDMzMxNTkx
MkZFRTAwMjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJRERGN0FCRDIx
MUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovLAogCQkJCUJDMDJFOUI4
MEUxODQ1NDUwMDBGOTI5NyAvKiBHZXR0ZXJTZXR0ZXIuY3BwICovLAogCQkJCUJDMzM3QkRFMEUx
QUYwQjgwMDc2OTE4QSAvKiBHZXR0ZXJTZXR0ZXIuaCAqLywKQEAgLTIxMTYsNiArMjExOSw3IEBA
CiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQkw
RkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKIAkJCQkwRkI3
RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8s
CisJCQkJMEYxM0UwNEMxNjE2NEExQjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgKi8sCiAJ
CQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAogCQkJCUUx
Nzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLywKIAkJ
CQlFMTc4NjMzRjBEOUJFQzAwMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5oICovLApA
QCAtMjI3NCw2ICsyMjc4LDcgQEAKIAkJCQkxNEJGQ0U2ODEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vh
a0dDTWFwLmggKi8sCiAJCQkJMTQyMEJFN0ExMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20u
aCAqLywKIAkJCQlBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8s
CisJCQkJQzJENThDMzMxNTkxMkZFRTAwMjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMjQ4MCw2ICsyNDg1LDcgQEAKIAkJCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyog
QXJyYXlQcm9maWxlLmNwcCAqLywKIAkJCQkwRjYzOTQ1MjE1RDA3MDUxMDA2QTU5N0MgLyogQXJy
YXlQcm9maWxlLmggKi8sCiAJCQkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2Rl
Q29udmVudGlvbnMuaCAqLywKKwkJCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJ
bmZvLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5j
cHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICov
LAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8s
CkBAIC0yOTU5LDYgKzI5NjUsNyBAQAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBS
ZWplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3
MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgw
MjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CkBAIC0zNTY1LDYgKzM1NzIsNyBAQAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RC
QUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNE
MTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjEz
RTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTY0LDcgKzU2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fanVtcHMuYXBw
ZW5kKGp1bXApOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGFwcGVuZChKdW1w
TGlzdCYgb3RoZXIpCisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IEp1bXBMaXN0JiBvdGhlcikK
ICAgICAgICAgewogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQob3RoZXIubV9qdW1wcy5iZWdp
bigpLCBvdGhlci5tX2p1bXBzLnNpemUoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gUGF0Y2hhYmxlSnVtcChqdW1wKCkpOwogICAgIH0KKworICAgIFBhdGNoYWJs
ZUp1bXAgcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAoYnJhbmNoVGVzdDMyKGNvbmQsIHJlZywgbWFzaykp
OworICAgIH0KICNlbmRpZgogCiAgICAgdm9pZCBqdW1wKExhYmVsIHRhcmdldCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCeVZhbEluZm9faAorI2RlZmluZSBCeVZhbEluZm9faAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29k
ZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSklUU3R1
YlJvdXRpbmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gSklUQXJyYXlNb2RlIHsgSklU
Q29udGlndW91cywgSklUQXJyYXlTdG9yYWdlIH07CisKK2lubGluZSBib29sIGlzT3B0aW1pemFi
bGVJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2gg
KGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2lubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXhpbmdUeXBl
KEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUp
IHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1
cm4gSklUQ29udGlndW91czsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gSklUQ29udGlndW91czsKKyAgICB9
Cit9CisKK3N0cnVjdCBCeVZhbEluZm8geworICAgIEJ5VmFsSW5mbygpIHsgfQorICAgIAorICAg
IEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlTG9jYXRpb25KdW1wIGJhZFR5
cGVKdW1wLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25l
LCBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAgICAgICA6IGJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBiYWRUeXBlSnVtcChiYWRUeXBlSnVtcCkKKyAg
ICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAsIGJhZFR5cGVKdW1wVG9Eb25l
KGJhZFR5cGVKdW1wVG9Eb25lKQorICAgICAgICAsIHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKHJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25KdW1wIGJhZFR5cGVKdW1wOworICAgIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGU7IC8vIFRoZSBhcnJheSBtb2RlIHRoYXQgd2FzIGJha2VkIGlu
dG8gdGhlIGlubGluZSBKSVQgY29kZS4KKyAgICBpbnQxNl90IGJhZFR5cGVKdW1wVG9Eb25lOwor
ICAgIGludDE2X3QgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGg7CisgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKK307CisKK2lubGluZSB1bnNpZ25lZCBnZXRCeVZhbEluZm9C
eXRlY29kZUluZGV4KEJ5VmFsSW5mbyogaW5mbykKK3sKKyAgICByZXR1cm4gaW5mby0+Ynl0ZWNv
ZGVJbmRleDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCisjZW5kaWYgLy8gQnlWYWxJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIK
KyNpbmNsdWRlICJCeVZhbEluZm8uaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgi
CiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCIKQEAgLTIwOSw2ICsyMTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisgICAgICAgIAorICAgICAgICBCeVZhbEluZm8mIGdldEJ5VmFsSW5mbyh1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKihiaW5hcnlT
ZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZCwgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleD4obV9i
eVZhbEluZm9zLmJlZ2luKCksIG1fYnlWYWxJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsK
KyAgICAgICAgfQogCiAgICAgICAgIENhbGxMaW5rSW5mbyYgZ2V0Q2FsbExpbmtJbmZvKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewpAQCAtNjEwLDYgKzYxNiwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJ
bmZvcyhzaXplX3Qgc2l6ZSkgeyBtX3N0cnVjdHVyZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CiAg
ICAgICAgIHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3RydWN0dXJlU3R1YkluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJ
bmZvc1tpbmRleF07IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZCeVZhbElu
Zm9zKHNpemVfdCBzaXplKSB7IG1fYnlWYWxJbmZvcy5ncm93KHNpemUpOyB9CisgICAgICAgIHNp
emVfdCBudW1iZXJPZkJ5VmFsSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX2J5VmFsSW5mb3Muc2l6
ZSgpOyB9CisgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvKHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV9ieVZhbEluZm9zW2luZGV4XTsgfQogCiAgICAgICAgIHZvaWQgYWRkR2xvYmFsUmVzb2x2
ZUluZm8odW5zaWduZWQgZ2xvYmFsUmVzb2x2ZUluc3RydWN0aW9uKQogICAgICAgICB7CkBAIC0x
Mjg5LDYgKzEyOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQp
CiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHJ1Y3R1cmVTdHViSW5mb3M7
CisgICAgICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKICAgICAgICAgVmVjdG9y
PEdsb2JhbFJlc29sdmVJbmZvPiBtX2dsb2JhbFJlc29sdmVJbmZvczsKICAgICAgICAgVmVjdG9y
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2Fs
bExpbmtJbmZvPiBtX21ldGhvZENhbGxMaW5rSW5mb3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3
dGYvU3BlY3RydW0uaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTksMTIgKzg1OSwxNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VP
VVNfTU9ERVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
OgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CkBAIC05MDgsNiArOTEzLDkgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtOTE1LDYgKzkyMyw3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFB1dEJ5
VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBub2RlLnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwog
ICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAg
ICAgIHN3aXRjaCAobW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKSkgewpAQCAtOTI0LDExICs5
MzMsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9f
VEFJTF9NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoK
KyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgICAgIGNhc2Ug
T1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZF
Q1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAg
IGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzNjcsNyArMTM4Myw5IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmlu
Zyk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RF
UzoKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBQ
T0xZTU9SUEhJQ19NT0RFUzogLy8gVGhlc2Ugb25seSBnZXQgYSBDaGVja0FycmF5IGZvciBHZXRB
cnJheUxlbmd0aAogICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGZpbHRlciBhbnl0aGluZyBt
ZWFuaW5nZnVsIHJpZ2h0IG5vdy4gV2UgbWF5IHdhbnQgdG8gYWRkCiAgICAgICAgICAgICAvLyBD
RkEgdHJhY2tpbmcgb2YgYXJyYXkgbW9kZSBzcGVjdWxhdGlvbnMsIGJ1dCB3ZSBkb24ndCBoYXZl
IHRoYXQsIHlldC4KICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKQEAgLTE0MTAsOSArMTQyOCwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnk6IHsKICAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgRUZGRUNURlVMX05PTl9BUlJB
WV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6
CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLmNsZWFyKCk7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDE0
IEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHAKICAgICAgICAgcmV0
dXJuIEFycmF5OjpVbnByb2ZpbGVkOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KToK
ICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVy
Y2VwdEluZGV4ZWRBY2Nlc3NlcygpKQotICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1Rv
QXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRvIGdvIHRvIHNs
b3cgcHV0IG1vZGUsIG9yIG5vdC4gVGhpcyBpcyBhIGRlY2VudCBndWVzcy4KKyAgICAgICAgICAg
IHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsgLy8gRklYTUU6
IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBzbG93IHB1dCBtb2RlIG9yIG5vdC4gV2Un
cmUgZ3Vlc3NpbmcgdGhhdCB3ZSBkb24ndCBuZWVkIHNsb3cgcHV0LgogICAgICAgICByZXR1cm4g
QXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250
aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkNvbnRpZ3VvdXNPdXRP
ZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkNvbnRpZ3VvdXNU
b1RhaWwgOiBBcnJheTo6Q29udGlndW91cyk7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlX
aXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUg
PyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmls
ZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNU
b1RhaWwgOiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzKTsKICAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICByZXR1cm4gbWFr
ZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3Rv
cmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6QXJyYXlTdG9y
YWdlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKToKQEAgLTU2LDYgKzYyLDIwIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVBy
b2ZpbGUqIHAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZSk6CiAgICAgICAgIHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMp
IHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVy
biBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVz
KEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9y
YWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlX
aXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRl
ICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgICAg
IHJldHVybiBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXM7CisgICAgICAgIHJldHVybiBBcnJheTo6
VW5kZWNpZGVkOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2UpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmls
ZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gQXJy
YXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiBBcnJh
eTo6VW5kZWNpZGVkOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFy
cmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCiAg
ICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7CkBAIC0xNDQsNiAr
MTY0LDIyIEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSk7CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3Vz
OgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
CisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCktPmluZGV4aW5nVHlwZSgpICYgSGFzQ29udGlndW91cyk7CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZC
b3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNT
aW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpCisgICAgICAgICAg
ICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpICYgSXNBcnJheSk7CisKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOgpAQCAtMTcwLDcgKzIwNiw4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVj
a2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiAoSGFzQXJyYXlTdG9yYWdl
IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpCiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7
CiAgICAgICAgIAotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgor
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVT
OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKQEAgLTIyNSw2ICsyNjIsMjQgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5
OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7CisgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNUb1RhaWwiOworICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJDb250aWd1
b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Cisg
ICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1
b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIjsKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHJldHVy
biAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgog
ICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlVG9Ib2xlOgpAQCAtMjQ5LDEwICszMDQsMjAgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5n
KEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kczoKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5
U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91czoK
KyAgICAgICAgcmV0dXJuICJCbGFua1RvQ29udGlndW91cyI7CiAgICAgY2FzZSBBcnJheTo6Qmxh
bmtUb0FycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJCbGFua1RvQXJyYXlTdG9yYWdlIjsK
ICAgICBjYXNlIEFycmF5OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgcmV0
dXJuICJCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtU
b0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJCbGFua1RvQ29udGln
dW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2U6CisgICAgICAgIHJldHVybiAiQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJl
dHVybiAiQXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0
dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CiAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNSBAQCBlbnVtIE1v
ZGUgewogICAgIFN0cmluZywKICAgICAKICAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5k
ZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBub24gc2lkZS1lZmZlY3RpbmcuCisgICAg
Q29udGlndW91cywKKyAgICBDb250aWd1b3VzVG9UYWlsLAorICAgIENvbnRpZ3VvdXNPdXRPZkJv
dW5kcywKKyAgICBBcnJheVdpdGhDb250aWd1b3VzLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNU
b1RhaWwsCisgICAgQXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAorICAgIFBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91cywKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1Rh
aWwsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMsCiAgICAgQXJy
YXlTdG9yYWdlLAogICAgIEFycmF5U3RvcmFnZVRvSG9sZSwKICAgICBTbG93UHV0QXJyYXlTdG9y
YWdlLApAQCAtNjgsOCArNzcsMTYgQEAgZW51bSBNb2RlIHsKICAgICBQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAgIAogICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRp
b25hbCBpbmRleGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlzIHNpZGUtZWZmZWN0aW5nLgor
ICAgIEJsYW5rVG9Db250aWd1b3VzLAogICAgIEJsYW5rVG9BcnJheVN0b3JhZ2UsCiAgICAgQmxh
bmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCisgICAgQmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3Rv
cmFnZSwKKyAgICAKKyAgICAvLyBNb2RlcyB0aGF0IGluZGljYXRlIHBvbHltb3JwaGljIGFycmF5
IHN0b3JhZ2UuIFRoZXNlIGRvbid0IGJlbmVmaXQgZnJvbQorICAgIC8vIGFueSBjaGVja2luZyBv
ciBzdG9yYWdlIENTRS4KKyAgICBDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlX
aXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGln
dW91c09yQXJyYXlTdG9yYWdlLAogICAgIAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXks
CkBAIC04OSw2ICsxMDYsMzIgQEAgZW51bSBNb2RlIHsKIC8vIGhhdmUgdGhlIHdvcmQgIkFycmF5
U3RvcmFnZSIgaW4gdGhlbS4KIAogLy8gRmlyc3Q6IGhlbHBlcnMgZm9yIG5vbi1zaWRlLWVmZmVj
dGluZyBjaGVja3MuCisjZGVmaW5lIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91czogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c091
dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICBcCisgICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlf
V0lUSF9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgIFwK
KyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKKyNkZWZpbmUg
QUxMX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRT
X0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpD
b250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMKKyNkZWZpbmUgQ09OVElH
VU9VU19UT19UQUlMX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5
OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgIFwK
KyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwKKyNkZWZp
bmUgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRP
ZkJvdW5kcwogI2RlZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAg
ICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTA2LDMzICsxNDksNDggQEAgZW51bSBNb2RlIHsK
ICNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMKKyNkZWZp
bmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQog
I2RlZmluZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAg
ICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9y
YWdlVG9Ib2xlCi0jZGVmaW5lIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZQogI2RlZmluZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQogI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCi0gICAgU0xPV19QVVRfQVJSQVlf
U1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5
OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgIFwK
ICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRz
CiAKIC8vIE5leHQ6IGhlbHBlcnMgZm9yIHNpZGUtZWZmZWN0aW5nIGNoZWNrcy4KLSNkZWZpbmUg
RUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTIFwKLSAgICBBcnJheTo6Qmxh
bmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQUxMX0VGRkVDVEZV
TF9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFu
a1RvQ29udGlndW91cworI2RlZmluZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0Vf
TU9ERVMgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpCbGFua1RvU2xvd1B1dEFy
cmF5U3RvcmFnZQotI2RlZmluZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAg
ICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAg
ICAgICAgICBcCiAgICAgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTCi0j
ZGVmaW5lIFNMT1dfUFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICBcCisjZGVmaW5l
IFNMT1dfUFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgIFwKICAg
ICBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UKKyNkZWZpbmUgUE9MWU1PUlBISUNf
RUZGRUNURlVMX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFu
a1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFMTF9FRkZFQ1RGVUxfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBTExfRUZGRUNURlVMX0NPTlRJ
R1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBQT0xZ
TU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVMKKworLy8gRmluYWxseTogaGVscGVycyBmb3IgcG9seW1v
cnBoaWMgYXJyYXkgYWNjZXNzZXMuCisjZGVmaW5lIFBPTFlNT1JQSElDX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c09yQXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTogICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UKKyNkZWZpbmUgQUxMX1BPTFlN
T1JQSElDX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFBPTFlNT1JQ
SElDX0VGRkVDVEZVTF9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBQT0xZTU9SUEhJQ19NT0RFUwogCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9m
aWxlKiwgQXJyYXk6OkFjdGlvbiwgYm9vbCBtYWtlU2FmZSk7CiAKQEAgLTE0NSw4ICsyMDMsMTAg
QEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIGlubGluZSBib29sIG1v
ZGVVc2VzQnV0dGVyZmx5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFy
cmF5TW9kZSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTU2LDcgKzIxNiw5IEBAIGlubGluZSBib29sIG1vZGVVc2VzQnV0
dGVyZmx5KEFycmF5OjpNb2QKIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBUlJBWV9X
SVRIX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdl
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNjYsNiArMjI4LDkgQEAgaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6
TW9kZSBhcgogaW5saW5lIGJvb2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9kZSBhcnJheU1v
ZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIElOX0JPVU5EU19DT05U
SUdVT1VTX01PREVTOgorICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgIGNh
c2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CkBAIC0x
ODQsMTggKzI0OSw1NSBAQCBpbmxpbmUgYm9vbCBpc1Nsb3dQdXRBY2Nlc3MoQXJyYXk6Ok1vZGUg
CiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBtYXlTdG9yZVRvVGFpbChBcnJheTo6TW9kZSBhcnJh
eU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIENPTlRJR1VPVVNf
VE9fVEFJTF9NT0RFUzoKKyAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoK
KyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIEFMTF9Q
T0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIGJvb2wgbWF5U3RvcmVUb0hv
bGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CiAg
ICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdF
X01PREVTOgogICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
IGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBt
b2RlSXNQb2x5bW9ycGhpYyhBcnJheTo6TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCitpbmxpbmUg
Ym9vbCBwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhBcnJheTo6TW9kZSBhcnJheU1vZGUp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5
TW9kZSkpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBwb2x5bW9ycGhpY0lu
Y2x1ZGVzQXJyYXlTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CkBAIC0yMDQsNiArMzA2LDcgQEAg
aW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcgogICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQ5LDcgKzM1
MiwxMSBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vCiAgICAgY2Fz
ZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9DT05USUdVT1VTX01PREVTOgog
ICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZG
RUNURlVMX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToK
KyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFn
ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjU5LDcgKzM2Niw4IEBAIGlubGluZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChB
cnJheTo6TW8KIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKEFycmF5OjpN
b2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAg
IGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgogICAg
IGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgpAQCAt
MjczLDcgKzM4MSw3IEBAIGlubGluZSBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKEEK
IGlubGluZSBib29sIGlzRWZmZWN0ZnVsKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNo
IChtb2RlKSB7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Cisg
ICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBk
ZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NzQsNiArMTU3NCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
dHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9I
b2xlOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgogICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlQdXNoID0g
YWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGljdGlv
biksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKQEAgLTE1OTcsNiArMTU5OSw4IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9m
Qm91bmRzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8o
YXJyYXlNb2RlKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksOSArMzU5LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBmb3IgYSBzdHJ1Y3R1cmUgY2hhbmdlIG9yIGEgcHV0
IHRvIHByb3BlcnR5IHN0b3JhZ2UgdG8gYWZmZWN0CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdl
dEJ5VmFsLgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVB1
c2g6Ci0gICAgICAgICAgICAgICAgLy8gQSBwdXNoIGNhbm5vdCBhZmZlY3QgcHJldmlvdXNseSBl
eGlzdGluZyBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJz
V29ybGQoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMTIy
Miw5ICsxMjE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAg
ICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAg
ICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAg
ICAgICAgaWYgKGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hp
bGQxXS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtjaGlsZDJdLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYmICFtX2dyYXBoW2NoaWxk
MV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChjYW5DU0VT
dG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5pbmRleCgpLCBjaGlsZDIu
aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgp
OwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1v
ZGUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCksIGxlbmd0
aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBO
b2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3Jp
Z2luLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFn
ZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICBpZiAoc3RvcmFnZSA9
PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzNywx
NyArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVz
c0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVB1c2g6
IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7Cisg
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQy
KCksIDIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5v
ZGUuY2hpbGQxKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpLCAxKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CisgICAgICAgICAg
ICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAg
ICAgICAgICAgIApAQCAtMzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwg
Ym9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBz
aG91bGRHZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgTm9k
ZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5DU0VT
dG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtb2RlSXNTcGVjaWZpYyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgu
cmVmKGFycmF5KTsKIAogICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJyYXlNb2RlKSkgewotICAg
ICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5
TW9kZSksIGFycmF5KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBOb05vZGUpOworICAg
ICAgICAgICAgbV9ncmFwaC5yZWYoaW5kZXgpOworICAgICAgICAgICAgTm9kZSBhcnJheWlmeShB
cnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBpbmRleCk7CiAg
ICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNlZCBhcyBh
IGJ1dHRlcmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdpY2UgYmVj
YXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlpZnlJ
bmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2Rl
T3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIHVuc2lnbmVk
IHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNl
LCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAgICAgewogICAgICAgICBp
ZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHItPmFycmF5TW9k
ZSgpID09IEFycmF5OjpGb3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJh
eU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAgICAgICAg
IE5vZGUgZm9yY2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdpbik7CiAgICAg
ICAgICAgICBmb3JjZUV4aXQucmVmKCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggZm9yY2VFeGl0
SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGZvcmNlRXhp
dEluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKCFtb2RlSXNTcGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUoKSkpCisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpV
bnByb2ZpbGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVj
a0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmlu
ZGV4KCkpOwotICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAg
ICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJy
YXkobm9kZVB0ci0+YXJyYXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmlnaW4sIGJhc2UuaW5kZXgo
KSwgaW5kZXguaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBO
b05vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgp
ID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9CiAgICAg
fQogICAgIAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDEy
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNf
Q09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9E
RVM6CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2Fz
ZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfTU9ERVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJl
dHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Niw5
ICs1NTYsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAg
ICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBp
ZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCgh
YXJyYXktPmNhblNldEluZGV4UXVpY2tseShpbmRleCkpOwotICAgICAgICBhcnJheS0+bWV0aG9k
VGFibGUoKS0+cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUoZXhl
YywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKQEAgLTU3Myw5ICs1NzEsNyBAQCB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAg
ICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlz
dGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4UXVpY2tseShp
bmRleCkpOwotICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChhcnJheSwg
ZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAg
ICAgIGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAt
NjAxLDYgKzU5NywxNiBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKIH0KICAgICAg
ICAgCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVj
b3Zlckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQoreworICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICBhcnJheS0+
YnV0dGVyZmx5KCktPnNldFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVyZmx5KCktPnB1YmxpY0xl
bmd0aCgpICsgMSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9w
KGV4ZWMpKTsKK30KKyAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJn
dW1lbnQpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwpAQCAtMTMwOSw2ICsxMzE1LDE0IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UmVhbGxvY2F0ZUIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
IH0KIAorY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG9iamVjdC0+ZW5zdXJlQ29udGlndW91cyhnbG9iYWxEYXRhKSk7Cit9CisKIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzE3LDYgKzEzMzEsMTYgQEAgY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihvYmplY3QtPmVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CiB9CiAKK2No
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCkKK3sKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisKKyAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihvYmplY3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91Ymxl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikK
IHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBA
QCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSos
IHZvaWQqLCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgq
Sl9ERkdPcGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
ICgqSl9ERkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
U3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNmWiko
RXhlY1N0YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0xMTAs
NiArMTEwLDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlw
ZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7
CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0
YXRlKiwgSlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVj
dCosIGludDMyX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBAIC0x
NDgsNiArMTQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwog
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVy
TGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
SlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwq
IGJhc2UsIElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTE5Miw3
ICsxOTQsOSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiBjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0
ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9y
YWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsK
K2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUq
LCBKU09iamVjdCopOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0
b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
aW50MzJfdCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlv
biBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJu
IGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIg
b3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRpYyBi
b29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICBmYWlsdXJl
Q2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8
IEhhc0NvbnRpZ3VvdXMgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNDUsNiArMjA0NSwxMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUm
LCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBy
ZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKQoreworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSkpOworICAgIAorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcpOworICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZ1Jl
ZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgCisgICAgcmV0
dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHBy
b3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFRhZ1JlZywgR1BSUmVn
IHJlc3VsdFBheWxvYWRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcpOwor
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaG9sZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFn
UmVnLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChv
dXRPZkJvdW5kcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4gc2xv
d0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVy
dHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1
ZVBheWxvYWRSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1v
ZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IAorICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJ
bkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAK
KyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKworICAgICAgICBpbkJv
dW5kcy5saW5rKCZtX2ppdCk7CisgICAgfQorCisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1Jl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7CisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsK
KyAgICAKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30K
KworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlT
dG9yYWdlUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQ
UlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRS
ZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91
bmRzKTsKKyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3Vu
ZHMpOworCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJy
YXlNb2RlKSkgeworICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2Ug
dGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxsIGlt
bWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBl
eGl0CisgICAgICAgIC8vIHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAg
ICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpOworICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0
aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAorICAgICAgICAgICAgLy8gdGhl
IGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9u
bHkgaGFwcGVucyBpZiB3ZSdyZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQg
dGltZS4KKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJ
blZlY3Rvck9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3
ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlS
ZWcpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwor
ICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIH0KKyAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsK
KyAgICB9CisgICAgCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZFJlZywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwor
ICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKQEAgLTI1
NjUsNiArMjY3Miw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9h
ZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KyAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RP
X1RBSUxfTU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVT
OgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9k
ZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJh
c2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxv
YWRSZWcpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBy
ZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQzKCkpOwpAQCAtMjU4Nyw2ICsyNzQzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2Ug
U0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yNjI0LDYgKzI3
ODEsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ug
QUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0
VGFnLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGRvbmVDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdo
OworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRUYWdSZWcsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCByZXN1bHRUYWdSZWcpOworICAgICAgICAgICAgaWYgKHBvbHlt
b3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9u
ZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZh
bGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1
bHRUYWdSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZh
bChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCBy
ZXN1bHRQYXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1v
cnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRv
bmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRo
cm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBm
YWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVz
dWx0VGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkp
OworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZUdl
dEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRUYWdS
ZWcsIHJlc3VsdFBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFy
cmF5SW50LAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJl
c3VsdFBheWxvYWRSZWcpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywg
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI3MTQsNiArMjkyMSw1NSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBjaGlsZDMpOworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1
ZS50YWdHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcgPSB2YWx1ZS5w
YXlsb2FkR1BSKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFs
dWVUYWdSZWcsIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2gu
Z3ByKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykg
eworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAg
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNv
bXBpbGVDb250aWd1b3VzUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVn
KTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgp
OworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
Tm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2Fk
UmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01P
REVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogewog
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKQEAgLTI3NDMs
NjAgKzI5OTksNzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhub2RlLmFycmF5TW9kZSgpKSkKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZh
bHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNIb2xlVmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlz
IGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAgICAgICAgICAgIC8vIHdpbGwgaW1t
ZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4
aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9s
ZVZhbHVlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRB
Y2Nlc3MoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQg
b2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3
b3VsZCBpbnZlcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0
IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdy
ZQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAg
ICAgICAgICAgICAgICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1t
MzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3
ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0aERv
ZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBh
eWxvYWRSZWcpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVy
dHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2Uu
dXNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCi0g
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRz
QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25k
QXJyYXlCb3VuZHMpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlN
b2RlKSkKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBOb1Jlc3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxv
YWRSZWcpKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01P
REVTOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFn
R1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnID0gdmFsdWUucGF5bG9h
ZEdQUigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsK
KyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgaWYgKHBv
bHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxs
VGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
dG9yYWdlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5
bG9hZFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5j
bHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91
Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2RlLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJl
ZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0
KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOworCisgICAgICAgICAgICBiYXNlLnVzZSgpOwor
ICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKwor
ICAgICAgICAgICAgLy8gRklYTUU6IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdy
ZSBpbiBzdHJpY3QgbW9kZSBzaG91bGQgYmUgbWFkZQorICAgICAgICAgICAgLy8gYmFzZWQgb24g
dGhlIGlubGluZSBjYWxsIGZyYW1lLCBub3QgdGhlIG1hY2hpbmUgY29kZSBibG9jay4KKyAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJv
dW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHBy
b3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTE5LDI1ICszMTk0LDU1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3Rv
cmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIC8vIFJlZnVzZSB0byBoYW5k
bGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQ
YXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZh
bHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBh
eWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25BcnJheVB1c2gsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIs
IHN0b3JhZ2VMZW5ndGhHUFIpLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSLCBiYXNlR1BSKSk7CisgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAgICAgICAgLy8gUmVmdXNl
IHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZm
ZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxv
YWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgCi0gICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAg
ICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
c3RvcmFnZUdQUik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOwogICAgICAgICAK
LSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25BcnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5n
dGhHUFIpLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNlR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UHVzaCwgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiksIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0g
ICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTI5NDgsNDYgKzMyNTMsODggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVUYWcodGhpcyk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSB2YWx1ZVBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlTGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZVRhZy5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlUGF5bG9hZC5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcg
c3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91
bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSwgdmFsdWVUYWdHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
dW5kZWZpbmVkQ2FzZSA9CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoMSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
CisgICAgICAgICAgICAgICAgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLAorICAgICAgICAgICAg
ICAgIHZhbHVlUGF5bG9hZEdQUik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCB2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwg
dGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihq
c1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVUYWdHUFIsCisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1
ZVBheWxvYWRHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRo
aXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwor
CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwog
ICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2Vz
OwotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CisgICAgICAgICAgICBzZXRVbmRl
ZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1ZVRhZ0dQUik7Ci0gICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgdmFsdWVUYWdHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlUGF5
bG9hZEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOwogCi0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpKTsKKyAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpKTsKICAgICAgICAgCi0gICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZyksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CiAKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAg
ICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVUYWdH
UFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVm
aW5lZCgpLnBheWxvYWQoKSksIHZhbHVlUGF5bG9hZEdQUikpOworICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAg
ICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVU
YWdHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
anNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpKTsKICAgICAgICAgCi0g
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFz
ZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3Bl
cmF0aW9uQXJyYXlQb3AsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFn
R1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBiYXNlR1BSKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3Vs
dCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEwOSwxMCArMjEwOSwxMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBH
UFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1
bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKSk7Cisg
ICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJl
ZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJl
ZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdFJlZyk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHJlc3VsdFJlZyk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRC
eVZhbChOb2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7CisgICAgQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJy
YXlNb2RlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7
CisgICAgICAgIAorICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcFJlZyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodGVt
cFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOwor
ICAgIH0KKworICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIp
KTsKKyAgICAKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsK
K30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJy
YXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcs
IEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQorewor
ICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYg
KGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Cisg
ICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKwor
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQg
bV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkp
IHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhp
cyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVs
eSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAg
ICAgICAvLyBwcm9maWxpbmcuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgaWYg
KGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNv
cnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3
ZSB3b3VsZCBpbnZlcnQKKyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdz
IHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAg
ICAgICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUg
d2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAg
ICB9CisgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAg
IC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0g
bm9kZS5vcCgpOwotCisgICAgCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFu
dDoKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7CkBAIC0yNTk1LDYg
KzI2OTYsNTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJ
R1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgor
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNf
QVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI2MTUsNiArMjc2MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAg
ICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwpAQCAtMjYyNywyMSArMjc3NCw2NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRS
ZWcpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKTsKLQorICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZC
b3VuZHMpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHJlc3VsdFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0Nv
bnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250
aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJl
c3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5j
bHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91
Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAg
ICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChmYWxsVGhyb3VnaCk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3
MzUsOCArMjkyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdw
cigpOwpAQCAtMjc1Niw1OSArMjk0Nyw3NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBh
cnJheS4KICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5W
ZWN0b3IuCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0hvbGVWYWx1ZTsKLSAg
ICAgICAgICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwg
dGhlbiB0aGUgYmFzZWxpbmUgSklUCi0gICAgICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVs
eSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAotICAg
ICAgICAgICAgICAgIC8vIHByb2ZpbGluZy4KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUg
cGF0aCwgd2Ugd291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBi
cmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBl
bnMgaWYgd2UncmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQg
dGltZS4KLSAgICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEg
aG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVn
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHBy
b3BlcnR5UmVnKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAg
ICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0
ZW1wb3JhcnksIG5vZGUpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJl
ZywgdmFsdWVSZWcsIHRlbXBvcmFyeVJlZyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7Cisg
ICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAg
ICAgICAgICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFz
bG93Q2FzZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
dmFsdWVSZWcpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVT
OiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworCisg
ICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewor
ICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAg
ICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJp
ZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYg
KG5vZGUub3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICAgICAgLy8gU3RvcmUg
dGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoRG9lc05v
dE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBub3RIb2xlVmFsdWUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAg
ICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFs
KHRlbXBvcmFyeSwgbm9kZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZh
bCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpOworCiAgICAgICAgICAgICBiYXNlLnVzZSgp
OwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsK
ICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKLQotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkp
IHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAg
ICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLApAQCAtMjgyMCw2ICszMDI4LDYz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBTExfUE9MWU1P
UlBISUNfTU9ERVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBj
aGlsZDMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1
ZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5
KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeS5ncHIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcG9yYXJ5UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwg
dGVtcG9yYXJ5UmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGln
dW91cyhub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3Vn
aC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJv
cGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5v
ZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAg
IGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZh
bGxUaHJvdWdoKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3Bl
cnR5LnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiB0aGUgZGVjaXNpb24gb2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUg
c2hvdWxkIGJlIG1hZGUKKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBm
cmFtZSwgbm90IHRoZSBtYWNoaW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisg
ICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVS
ZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewogICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMjk3MywyNiArMzIzOCw1NCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7
CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhH
UFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1
bHQsIHN0b3JhZ2VMZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNl
R1BSKSk7CisgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3Ro
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAg
ICAgIAotICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRy
dXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOworICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRs
ZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAg
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRo
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQ
dHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5v
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251
bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBz
dG9yYWdlTGVuZ3RoR1BSLAotICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7Cisg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJh
eVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgICAgICB2
YWx1ZUdQUiwgYmFzZUdQUikpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzdG9y
YWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtMzAwMiw0MSArMzI5NSw3NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BS
ID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCB1bmRlZmluZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMigKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciks
CisgICAgICAgICAgICAgICAgdmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB2YWx1ZUdQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2Fz
ZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5k
UmVjb3Zlckxlbmd0aCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxl
bmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFn
ZUxlbmd0aC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0
VW5kZWZpbmVkQ2FzZXM7Ci0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0
aEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCi0g
ICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotCi0gICAg
ICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAg
ICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1f
aml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKLSAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKLSAgICAgICAgICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcywgdGhpcywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3Zl
KAorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlzLAorICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xv
d0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkFycmF5
UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVH
UFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTMyMTAsOCAr
MzUzOSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmUoKSwgc2l6ZUdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzZWxlY3RTY3JhdGNoR1BSKHNp
emVHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1t
MzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAg
YmlnTGVuZ3RoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkpLCBzdHJ1Y3R1
cmVHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6
ZUdQUik7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxNSw2ICszMTUsNDEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJh
eShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFz
c0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0Nv
bnRpZ3VvdXMpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNf
TU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIp
OworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJh
bmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBk
b2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdp
dGggdGhlIHByZXNlbnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBh
dGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3Vv
dXMpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RF
UzogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9h
ZFB0cigKQEAgLTM1Miw2ICszODcsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJh
eShOb2RlJiBubwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1
cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGNhbiBiZSB0dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkg
aGF2ZSBubyBldmlkZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2Zp
dGFibGUsIG5vciBkbyBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0Cisg
ICAgICAgIC8vIGNvdmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNB
cnJheSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAgIChwb2x5bW9ycGhp
Y0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSA/IEhhc0NvbnRpZ3VvdXMgOiAw
KQorICAgICAgICAgICAgICAgICAgICB8IChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdl
KG5vZGUuYXJyYXlNb2RlKCkpID8gSGFzQXJyYXlTdG9yYWdlIDogMCkpKSk7CisgICAgICAgIAor
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9
ICZBcmd1bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CkBAIC0zOTAsNzIgKzQ0OCwxMDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAgIEFTU0VSVCgh
bW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5h
cnJheU1vZGUoKSkpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgIAorICAgIEluZGV4aW5n
VHlwZSBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzazsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKLSAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9N
T0RFUzogewotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwotICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0
cnVjdHVyZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAg
ICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBkZXNpcmVk
SW5kZXhpbmdUeXBlTWFzayA9IEhhc0NvbnRpZ3VvdXM7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5
cGVNYXNrID0gSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5
OjpCbGFua1RvU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlw
ZU1hc2sgPSBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdl
OgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0NvbnRpZ3VvdXMgfCBIYXNB
cnJheVN0b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNI
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBHUFJUZW1wb3Jhcnkgc3RydWN0
dXJlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyBzdHJ1
Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOwogICAgICAgICAKLSAgICAgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMgbmV4
dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgSW5kZXhpbmdUeXBl
IGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0KLSAgICAgICAgICAgIGlzU2xvd1B1dEFjY2Vzcyhu
b2RlLmFycmF5TW9kZSgpKSA/IChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlKSA6IEhhc0FycmF5U3RvcmFnZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKKyAgICBtX2ppdC5s
b2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAvLyBXZSBjYW4g
c2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdl
LgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDgo
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVN
YXNrKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOwog
ICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICAvLyBOZXh0
IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nlc3Nl
cy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4KKyAg
ICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8gSWYgd2UncmUgYWxsZWdlZGx5
IGNyZWF0aW5nIGNvbnRpZ3VvdXMgc3RvcmFnZSBhbmQgdGhlIGluZGV4IGlzIGJvZ3VzLCB0aGVu
CisgICAgLy8ganVzdCBkb24ndC4KKyAgICBpZiAobm9kZS5hcnJheU1vZGUoKSA9PSBBcnJheTo6
QmxhbmtUb0NvbnRpZ3VvdXMpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKSk7CisgICAgfQorICAgIAor
ICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBpbmRl
eGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAorICAgIC8vIHRoZW4gdGhpcyBtb2RlIHdvbid0IHdv
cmsuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSkpOwogICAgICAgICAKLSAg
ICAgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KLSAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgLy8gTm93IGNhbGwgb3V0
IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyh0ZW1wR1BSKTsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25F
bnN1cmVDb250aWd1b3VzLCB0ZW1wR1BSLCBiYXNlUmVnKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpCbGFua1Rv
U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1
cmVBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcpOwotICAgICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHRlbXBHUFIpOwotCi0gICAgICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVsb2Fk
IHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQotICAg
ICAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8g
c28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZwotICAgICAgICAvLyBhYm91dCBhIGxvYWQuCi0g
ICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUga2luZCBv
ZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KLSAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwgcmVz
dWx0IGluIHRoZSAKLSAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcg
dG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgotICAgICAgICAvLyBUaGF0
J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZElu
ZGV4aW5nVHlwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LSAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlT
dG9yYWdlOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZywgcHJvcGVydHlSZWcpOworICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnModGVtcEdQUik7CisKKyAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgc3Ry
dWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKKyAgICAvLyB0ZW1w
b3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8gc28uIEVpdGhlciB3
YXkgd2UncmUgdGFsa2luZworICAgIC8vIGFib3V0IGEgbG9hZC4KKyAgICBtX2ppdC5sb2FkUHRy
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisgICAgLy8gRmluYWxseSwg
Y2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50
ZWQgdG8gZ2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFja3dhcmRzIHNwZWN1bGF0
aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgCisgICAgLy8gYnl0ZWNvZGUgb3Bl
cmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1
dGVkLgorICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3QgdXNl
ci12aXNpYmxlLgorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdU
eXBlTWFzaykpKTsKKyAgICAgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgc3RvcmFn
ZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTMyMDUsMTIgKzMyOTgs
MjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Io
bm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgIGNhc2UgQVJSQVlf
V0lUSF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
c3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgc3RvcmFnZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBAIC0zMzk5LDYgKzM1
MDMsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHN0
b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYg
dGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgaWYgKCFwdXRCeVZhbFdp
bGxOZWVkRXh0cmFSZWdpc3RlcihhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gSW52YWxpZEdQ
UlJlZzsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVhbFRlbXBvcmFyeSh0aGlzKTsKKyAgICB0
ZW1wb3JhcnkuYWRvcHQocmVhbFRlbXBvcmFyeSk7CisgICAgcmV0dXJuIHRlbXBvcmFyeS5ncHIo
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKK2NsYXNzIEdQUlRlbXBvcmFyeTsKIGNsYXNzIEpTVmFsdWVPcGVyYW5kOwog
Y2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAgLTExNjYs
NiArMTE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25f
RU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVj
dCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6
ZSkpOwpAQCAtMTIxOCwxMSArMTIyNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOwpAQCAtMTQ2OCw2ICsxNDc5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIGludDMyX3QgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0
aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXpl
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwg
VHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNTMxLDExICsxNTQ3LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsK
ICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOwpAQCAtMjE0OSw2ICsyMTcwLDUyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChO
b2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21w
aWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyNlbHNlCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwoTm9k
ZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVn
LCBHUFJSZWcgcmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwg
R1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQ
UlJlZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKTsKKyNlbmRpZgorICAg
IAorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAgLy8g
Rm9yIEFycmF5U3RvcmFnZSwgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIHN0b3JlcyB0byBob2xl
cyBleGNlcHQgaWYKKyAgICAgICAgLy8gd2UncmUgaW4gU2xvd1B1dCBtb2RlLgorICAgICAgICBj
YXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAK
KyAgICAgICAgLy8gRm9yIENvbnRpZ3VvdXMsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBhbnkg
YWNjZXNzIHRoYXQgbWF5IHN0b3JlCisgICAgICAgIC8vIHRvIHRoZSB0YWlsLgorICAgICAgICBj
YXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAg
Ly8gQWxsIHBvbHltb3JwaGljIG1vZGVzIG5lZWQgYW4gZXh0cmEgcmVnLgorICAgICAgICBjYXNl
IEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BS
VGVtcG9yYXJ5JiwgQXJyYXk6Ok1vZGUpOworICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZv
clB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2Rl
LmFycmF5TW9kZSgpKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJh
c2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1
ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21w
aWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1w
UmVnKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1
b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQ
UlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRS
ZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdlUHV0
QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcpOwor
I2VuZGlmCisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CiAgICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24g
MTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwyNSBAQCBzdGF0aWMgaW5saW5lIEpT
T2JqZWN0KiBjaGVja2VkUmV0dXJuKEpTCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCitj
bGFzcyBTYW1wbGluZ1Njb3BlIHsKK3B1YmxpYzoKKyAgICBTYW1wbGluZ1Njb3BlKEludGVycHJl
dGVyKiBpbnRlcnByZXRlcikKKyAgICAgICAgOiBtX2ludGVycHJldGVyKGludGVycHJldGVyKQor
ICAgIHsKKyAgICAgICAgaW50ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmcoKTsKKyAgICB9CisgICAg
flNhbXBsaW5nU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnByZXRlci0+c3RvcFNhbXBs
aW5nKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsK
K307CisKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWN1dGFibGUqIHBy
b2dyYW0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaikKIHsKKyAgICBT
YW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CisgICAgCiAgICAgSlNTY29wZSogc2Nv
cGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0KHRo
aXNPYmosIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhj
ZXB0aW9uKTsKQEAgLTExMzcsNiArMTE1NCw4IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0
ZXI6OnByZXBhcmVGb3IKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJhbWVD
bG9zdXJlJiBjbG9zdXJlKSAKIHsKKyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhp
cyk7CisgICAgCiAgICAgQVNTRVJUKCFjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICBpZiAoY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpAQCAt
MTE3Miw2ICsxMTkxLDggQEAgdm9pZCBJbnRlcnByZXRlcjo6ZW5kUmVwZWF0Q2FsbChDYWxsRnJh
bQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNjb3BlLCBp
bnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpCiB7CisgICAgU2FtcGxpbmdTY29wZSBzYW1wbGluZ1Nj
b3BlKHRoaXMpOworICAgIAogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzVmFsdWUs
IGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9u
KTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAw
LDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7Cisg
ICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUluZm9J
bmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC03MzgsNiAr
NzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICBt
X2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBtX3By
b3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29kZUJsb2Nr
LT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJsb2NrLT5z
ZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsg
KytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9jYXRp
b25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5i
YWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0ID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRvbmVUYXJnZXQp
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRhcmdldCk7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsKKyAgICAgICAg
CisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisgICAgICAg
ICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAg
ICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uYXJy
YXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJhZFR5cGVKdW1w
LCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihyZXR1
cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVCbG9jay0+c2V0
TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8u
c2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJl
ck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0g
bV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1ZmZl
ciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxhdGlvbklu
Zm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAKKyAgICAg
ICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUs
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0KQorICAgICAgICAgICAgOiBieXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVK
dW1wKQorICAgICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAgICAgLCBk
b25lVGFyZ2V0KGRvbmVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0OworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIHJldHVybkFkZHJlc3M7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBo
b3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhlcjsK
QEAgLTM0OCw2ICszNjcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQubV9i
eXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3Qp
OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0QnlW
YWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRh
LCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAgICAg
ICAgIHsKQEAgLTM5Nyw2ICs0MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNoYWlu
Kiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jiwg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSos
IFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNz
UHRyLCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFu
c2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJldHVybkFkZHJlc3NQdHIs
IGJvb2wgZGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0
ciwgSklUQXJyYXlNb2RlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSos
IFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CkBAIC00
NTIsNiArNDg4LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lzdGVy
SUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5
cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxl
Kik7CisgICAgICAgIAorICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFycmF5
UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEsIGJh
c2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGV4aW5nIHR5cGUuCisgICAgICAgIC8v
IFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZCB6ZXJvIGV4dGVuZGVkLiBCYXNlIGlzIGNlbGwg
Y2hlY2tlZC4KKyAgICAgICAgLy8gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuIFJldHVy
bnMgdGhlIHNsb3cgY2FzZXMuIEZhbGwtdGhyb3VnaAorICAgICAgICAvLyBjYXNlIGNvbnRhaW5z
IHJlc3VsdCBpbiByZWdUMCwgYW5kIGl0IGlzIG5vdCB5ZXQgcHJvZmlsZWQuCisgICAgICAgIEp1
bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIAorICAgICAgICAv
LyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMg
aW5kZWNpbmcgdHlwZS4KKyAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQg
bG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKKyAgICAgICAgLy8gemVyby1leHRl
bmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVk
LgorICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgorICAgICAgICBKdW1wTGlzdCBl
bWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RN
b2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCkBAIC04NzAsNiArOTIyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogICAg
ICAgICBWZWN0b3I8TGFiZWw+IG1fbGFiZWxzOwogICAgICAgICBWZWN0b3I8UHJvcGVydHlTdHVi
Q29tcGlsYXRpb25JbmZvPiBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvOworICAgICAg
ICBWZWN0b3I8QnlWYWxDb21waWxhdGlvbkluZm8+IG1fYnlWYWxDb21waWxhdGlvbkluZm87CiAg
ICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbENvbXBpbGF0
aW9uSW5mbz4gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8SnVt
cFRhYmxlPiBtX2ptcFRhYmxlOwpAQCAtODc5LDYgKzkzMiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIHVuc2ln
bmVkIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1bnNpZ25lZCBt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9nbG9iYWxSZXNvbHZl
SW5mb0luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5mb0luZGV4OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0NywyMyArNDQ3LDIyIEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVK
U0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVy
SUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3Jh
Z2VQdHIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
ID0gc3RkOjptYXgobGVuZ3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0
dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGluaXRp
YWxMZW5ndGgpKTsKKyAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVuZ3Ro
LCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIGluaXRpYWxMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKTsKKworICAgIGxvYWRQdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNoKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsKIAogICAgIC8vIFdlIGFsbG9jYXRl
IHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlv
biAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJheSBpbml0aWFsaXphdGlvbi4K
ICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJbmRl
eGluZ0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNlbGwg
Zm9yIHRoZSBhcnJheS4KLSAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CiAgICAgZW1pdEFsbG9jYXRlQmFz
aWNKU09iamVjdDxKU0FycmF5LCBNYXJrZWRCbG9jazo6Tm9uZT4oc2NyYXRjaCwgY2VsbFJlc3Vs
dCwgc3RvcmFnZVB0cik7CiAKLSAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGlu
IHRoZSBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0
b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMy
KEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpudW1W
YWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3Ro
KSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOwotICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpzcGFyc2VN
YXBPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhl
IGluZGV4aW5nIGhlYWRlci4KKyAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3Rv
cmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgc3Rv
cmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXdseSBh
bGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgogICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJl
c3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CkBAIC00NzIsMTIg
KzQ3MSwxMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVn
aXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAgc3Rv
cmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAg
ICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAjZWxzZQogICAgICAgICBsb2FkMzIoQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhz
dG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRk
cmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsK
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3Rl
ciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZih1aW50MzJfdCkpLCBzdG9yYWdlUHRy
KTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkg
KyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC01NjEsMTAgKzU2MCwy
NSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9m
aWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xl
KCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXcoQXJy
YXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJyYXlN
b2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJheU1v
ZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZShB
cnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhwcm9maWxl
LCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAg
IHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY2MSw3ICsxNjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhw
KEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsK
KyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkK
KyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTE2ODAsOCArMTY4MSwxMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFsbG9j
YXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9wZXIg
c3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGludCBs
ZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRT
cGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQorICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6aXNPdmVy
c2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IobGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBXZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5v
dCBlbm91Z2ggc3BhY2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxsLgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwy
NyArMjA0LDc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAg
ICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVu
c2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2ln
bmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7
CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1Qz
LCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qz
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDEsIHJl
Z1QzLCBwcm9maWxlKTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShw
cm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6
CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCi0gICAgbG9h
ZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDAp
OyAvLyBwYXlsb2FkCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICBhZGRTbG93Q2FzZShiYWRU
eXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAorICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEp1bXAgcmVzdWx0T0sgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7CisjZW5k
aWYKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0U3RvcmUoZHN0LCBy
ZWdUMSwgcmVnVDApOwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfdmFsKSwgZHN0LCByZWdUMSwgcmVnVDApOworICAgIAorICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQs
IGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250
aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorewor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAg
IAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OworICAgIAorICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCisg
ICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZAorICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQog
CitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1
c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKKyAg
ICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgCisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2FkMzIo
QmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkp
OworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisgICAgCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0yNDgsMTAgKzI5OSwxNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBl
bXB0eSB2YWx1ZQogICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVy
dHkpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5j
YWxsKGRzdCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CiB9CkBAIC0yNjAsMjAgKzMxNyw4MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KEluc3RydWN0aW9uCiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCBy
ZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7Ci0g
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZShyZWdUMSwgcmVnVDMsIHByb2ZpbGUpOworICAgIAorICAgIFBhdGNoYWJsZUp1bXAg
YmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgSklUQXJyYXlNb2Rl
IG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7Cisg
ICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91
c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlT
dG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisg
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9i
eXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQogCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIo
WmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7
CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFk
ZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIAor
ICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsK
KyAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKKyAgICAKKyAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0
dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgIAorICAgIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBqdW1wKCku
bGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5j
b25kaXRpb25hbFdyaXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwog
ICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgCisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCiAgICAgSnVtcCBl
bXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSk7CiAgICAgCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0yODMs
NyArNDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAg
IEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1p
dEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9uWzRd
LnUuYXJyYXlQcm9maWxlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFs
Q2FzZShwcm9maWxlKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDMs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAg
ICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKICAgICAKQEAgLTI5Miw2
ICs0MTEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGVuZC5saW5rKHRo
aXMpOworICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwgcmVn
VDMsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNj
ZXNzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMzAzLDEzICs0MjYsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW4g
dmVjdG9yIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRzCisg
ICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIEpJVFN0dWJDYWxs
IHN0dWJQdXRCeVZhbENhbGwodGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQdXRC
eVZhbENhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1
bWVudChwcm9wZXJ0eSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSk7
Ci0gICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5
VmFsQ2FsbC5jYWxsKCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0g
Y2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZp
c2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC0xMTEsMTcgKzExMiw2NCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihI
YXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVn
VDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBKSVRBcnJheU1v
ZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1
b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJh
eVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDApOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICByZXN1bHRPSy5saW5rKHRo
aXMpOworI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8u
YXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1v
ZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dD
YXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywg
cmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRy
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBzbG93
Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC0xNDYsMTAgKzE5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNr
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQogICAgIAorICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSwgcmVn
VDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7Ci0gICAgc3R1
YkNhbGwuY2FsbChkc3QpOworICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsKKwor
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQ
YXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXgrKzsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKIH0KQEAgLTIy
Niw3ICsyODAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiB7
CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVBy
b2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVy
dHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJl
Z1QxKTsKQEAgLTIzNCwxMCArMjg4LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
SW5zdHJ1Y3Rpb24KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBKSVRBcnJheU1vZGUgbW9k
ZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBj
YXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVj
b2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVy
KHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0
Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykp
OworICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisg
ICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgb3V0
T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAgZW1p
dEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVnVDMs
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1bXAg
ZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIApAQCAt
MjQ3LDggKzM2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwotICAg
IGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNz
KHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOworICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUp
OworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdl
OjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CiAgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0
b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwpA
QCAtMjU3LDggKzM3Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGVuZC5saW5r
KHRoaXMpOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCByZWdU
MywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yNzAsMTMgKzM4NiwxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0
ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGJhc2Ugbm90IGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2ZWN0
b3IgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG91dCBvZiBib3VuZHMKKyAgICAK
KyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBKSVRTdHViQ2FsbCBzdHViUHV0
QnlWYWxDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfdmFsKTsKICAgICBzdHViUHV0QnlWYWxDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHBy
b3BlcnR5LCByZWdUMik7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1ZSwg
cmVnVDIpOwotICAgIHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworICAgIENhbGwgY2FsbCA9IHN0
dWJQdXRCeVZhbENhbGwuY2FsbCgpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNz
ID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTY1Niw3ICs3NzgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
cmVnVDIpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJlZ1Qy
LCByZWdUMSwgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpOwogICAgIEp1bXAgZmFpbHVyZUNhc2Vz
MSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKElzQXJyYXkpKTsKLSAg
ICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250
aWd1b3VzKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJv
bSB0aGUgc3RvcmFnZQogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDMpOwpAQCAtMTI3NCw2ICsxMzk2LDc2IEBAIGJvb2wgSklUOjpp
c0RpcmVjdFB1dEJ5SWQoU3RydWN0dXJlU3R1YkkKICAgICB9CiB9CiAKK3ZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAg
YmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9j
ayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJl
bChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5B
ZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2Rl
TG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgi
QmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAl
cCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJl
bChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3Vv
dXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFk
ZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Ns
b3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxh
YmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVt
cFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBw
dXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAg
ICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5m
by0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9i
eV92YWxfZ2VuZXJpYykpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmplY3Qu
aCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgor
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNp
bmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0yNDE0
LDYgKzI0MTUsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoCisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNj
cmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChMSUtFTFko
YmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgICAgICBp
ZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0
eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoc3Vic2NyaXB0LmlzVUlu
dDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOworICAg
ICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNh
bkdldEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFzZVZh
bHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
YmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0KKworICAgIGlmIChpc05hbWUoc3Vi
c2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8
TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7CisKKyAg
ICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxG
cmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxG
cmFtZSwgcHJvcGVydHkpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFt
ZSk7CkBAIC0yNDIzLDM1ICsyNDQ4LDQ0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNW
YWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNj
cmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFs
dWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNj
cmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAgICAg
dWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0cmlu
ZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0g
ICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxf
c3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1
ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
aWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAg
ICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyB0aGlzIGF0IGFsbC4KKyAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsK
KyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7CisgICAg
ICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihTVFVCX1JFVFVSTl9BRERS
RVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICAgICAg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9yTm9u
REZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAg
ICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0QnlW
YWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5m
by5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNTLCBh
cnJheU1vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9
CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhDRVBU
SU9OKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorICAgIAorREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWxfZ2VuZXJpYykK
K3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoaXNO
YW1lKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0
KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSktPnBy
aXZhdGVOYW1lKCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVydHko
Y2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1l
KSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJvcGVy
dHkpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVU
VVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0yNTAyLDIzICsyNTM2LDE0IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1
dF9ieV92YWwpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBz
dGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3Rh
Y2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFt
ZS5hcmdzWzJdLmpzVmFsdWUoKTsKLQogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMy
KCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNl
dEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2ts
eSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5k
ZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4
KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNT
dHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI1MjgsMTEgKzI1NTMsNjEgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICBiYXNlVmFsdWUu
cHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSkt
PnByaXZhdGVOYW1lKCksIHZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFtZSkt
PnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcg
YW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4Y2Vw
dGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4
Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2Fs
bEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgfQorfQorCitE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQoreworICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
c3RhY2tGcmFtZS5jYWxsRnJhbWU7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJh
bWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1l
LmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3Nb
Ml0uanNWYWx1ZSgpOworCisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlw
dC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBh
dCBhbGwuCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwor
ICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8oKSkgeworICAgICAgICAgICAgLy8gRG9udCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAg
ICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9j
aygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihT
VFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmlj
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXpl
LgorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVj
b2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICAgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAgICBB
U1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRpbWl6
YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5
cGUpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9k
ZSkKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JF
VFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZh
bHVlKTsKKworICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0Zy
YW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFt
ZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5hcmdz
WzJdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1ZSwg
c3Vic2NyaXB0LCB2YWx1ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9p
ZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBF
bmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3Bf
Z2V0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwog
ICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRf
U1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAg
RW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RFQ0xB
UkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7CiAg
ICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJfQVJH
U19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1
dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lk
IEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhTVFVC
X0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9v
cF9wdXRfZ2V0dGVyX3NldHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
ICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFy
X29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTcxLDcgKzExNzEsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBsb2Fk
cCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQxLCB0
MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBidGl6
IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXogdDIs
IChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpIDRbUENdLCB0MQogICAgIGxvYWRw
IDMyW1BDXSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAt
MTMwNiwxMCArMTMwNiwyMSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkaSAxMltQ
Q10sIHQzCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDMsIEludDMyVGFnLCB0
MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0s
IHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1b3Vz
CisgICAgCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaSBUYWdP
ZmZzZXRbdDMsIHQxLCA4XSwgdDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QzLCB0MSwgOF0s
IHQxCisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXM6
CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSwg
Lm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJ
bmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKLSAgICBs
b2FkaSA0W1BDXSwgdDAKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zm
c2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBh
eWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKworLm9wR2V0QnlWYWxEb25lOgorICAgIGxvYWRp
IDRbUENdLCB0MAogICAgIGJpZXEgdDIsIEVtcHR5VmFsdWVUYWcsIC5vcEdldEJ5VmFsU2xvdwog
ICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDAsIDhdCiAgICAgc3RvcmVpIHQxLCBQYXls
b2FkT2Zmc2V0W2NmciwgdDAsIDhdCkBAIC0xMzgzLDI5ICsxMzk0LDUyIEBAIF9sbGludF9vcF9w
dXRfYnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxv
YWRwIDE2W1BDXSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6IHQy
LCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdwogICAgIGxvYWRpIDhbUENdLCB0MAot
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQwLCBJbnQzMlRhZywgdDIsIC5vcFB1
dEJ5VmFsU2xvdykKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgSW50MzJU
YWcsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5
W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJpZXEgQXJy
YXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDIsIDhdLCBFbXB0eVZhbHVlVGFn
LCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgotICAgIGxvYWRpIDEy
W1BDXSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyh0MywgdDEsIHQzKQotICAg
IHdyaXRlQmFycmllcih0MSwgdDMpCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVj
dG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0KLSAgICBzdG9yZWkgdDMsIEFycmF5U3RvcmFnZTo6
bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MiwgOF0KKyAgICBidGl6IHQyLCBIYXNDb250
aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQzLCAtc2l6ZW9m
IEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9w
UHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3Jl
UmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
MlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisgICAgc3RvcmVpIHQx
LCBUYWdPZmZzZXRbdDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0MCwg
dDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBpZiBWQUxVRV9QUk9G
SUxFUgorICAgICAgICBsb2FkcCAxNltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJheVBy
b2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCisgICAgZW5kCisgICAgYWRkaSAxLCB0MywgdDIK
KyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6
bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVz
dWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0
b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVh
ZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93
CisgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MywgOF0s
IEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5VmFs
QXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGkgMTJbUENdLCB0MgorICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUyUmVnKHQyLCB0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyKHQxLCB0
MikKKyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDAs
IHQzLCA4XQorICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRP
ZmZzZXRbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6Cisu
b3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0gICAg
ICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAgICAg
IGxvYWRwIDE2W1BDXSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlT
dG9yZVRvSG9sZVt0MV0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1W
YWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJ
bmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0
CisgICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
cHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogICAg
IGFkZGkgMSwgdDIsIHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0
b3JlUmVzdWx0CisgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAog
Lm9wUHV0QnlWYWxTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9i
eV92YWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTEwMTgsNyArMTAxOCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGxv
YWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0MiwgdDEs
IHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIGJ0
aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRpeiB0
MiwgKEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlKSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDEK
ICAgICBsb2FkcCA2NFtQQiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRl
cmZseVt0M10sIHQwCkBAIC0xMTQ3LDE0ICsxMTQ3LDI1IEBAIF9sbGludF9vcF9nZXRfYnlfdmFs
OgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0Mywg
dDEpCiAgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJyYXlT
dG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIo
dDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAgSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3VzLCAu
b3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxT
bG93CisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4XSwg
dDIKKyAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKyAgICBqbXAgLm9wR2V0QnlWYWxEb25l
CisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0b3Jh
Z2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFlcSB0
MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0
aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAg
bG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIs
IC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3RvcmVwIHQyLCBbY2Zy
LCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZhbHVlUHJvZmlsZSh0
MiwgdDApCkBAIC0xMjI2LDI5ICsxMjM3LDUxIEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAg
IGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRwIDMyW1BCLCBQQywg
OF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFzQXJy
YXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwgdDAK
LSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQdXRCeVZhbFNsb3cp
Ci0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0
MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxvYWRwIEpTT2JqZWN0
OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cK
LSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxF
bXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwg
dDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBidGl6IHQyLCBIYXND
b250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0Mywg
LXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0
MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRpZ3Vv
dXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEpCisgICAgc3RvcmVw
IHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGlndW91
c091dE9mQm91bmRzOgorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5k
ZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAgaWYg
VkFMVUVfUFJPRklMRVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAgICAg
c3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQKKyAg
ICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlWYWxD
b250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAgIGJ0
aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMsIC1z
aXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBd
LCAub3BQdXRCeVZhbFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQz
LCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0b3Jh
Z2VTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3RvcmVw
IHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEsIEFy
cmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1
dEJ5VmFsRW1wdHk6Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVF
X1BST0ZJTEVSCi0gICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hv
bGVbdDNdCisgICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3JlYiAx
LCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRkaSAx
LCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwg
Lm9wUHV0QnlWYWxTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDIsIHQxCisgICAgYmliIHQzLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAorICAgIGFkZGkgMSwgdDMsIHQx
CiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAg
am1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93
OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAgZW5k
CiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0IElz
QXJyYXkgPSAxCitjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9yYWdl
ID0gOAotY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlTdG9y
YWdlID0gMTYKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5o
CShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUNvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaQogCiBpbmxpbmUgYm9vbCBpc0RlbnNlRW5v
dWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQogewotICAg
IHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5E
ZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CisgICAgcmV0dXJuIGxlbmd0aCAvIG1pbkRl
bnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKIH0KIAogaW5saW5lIEluZGV4aW5nSGVhZGVy
IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQs
OCBAQCBzdGF0aWMgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tCiAvLyBjdXJyZW50
Q291bnQpIHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgbGVmdCBvciByaWdodCBhcyBhcHByb3ByaWF0
ZTsgaW4gdGhlCiAvLyBjYXNlIG9mIHNoaWZ0IHRoaXMgbXVzdCBiZSByZW1vdmluZyB2YWx1ZXMs
IGluIHRoZSBjYXNlIG9mIHVuc2hpZnQgdGhpcwogLy8gbXVzdCBiZSBpbnRyb2R1Y2luZyBuZXcg
dmFsdWVzLgotc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1bnNp
Z25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6U2hp
ZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50
LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVChj
dXJyZW50Q291bnQgPiByZXN1bHRDb3VudCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjdXJyZW50
Q291bnQgLSByZXN1bHRDb3VudDsKQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjCiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAgaWYg
KGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3Vu
dChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBs
ZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhl
YywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMzEs
NyArMjMyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYwogICAg
ICAgICB9CiAgICAgfQogfQotc3RhdGljIGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50
Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0ZTxK
U0FycmF5OjpTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KK3ZvaWQgdW5zaGlmdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVk
IGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
ICAgICBBU1NFUlQocmVzdWx0Q291bnQgPiBjdXJyZW50Q291bnQpOwogICAgIHVuc2lnbmVkIGNv
dW50ID0gcmVzdWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CkBAIC0yNDcsMTAgKzI0OSwxMCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4CiAKICAgICBpZiAoaXNKU0Fy
cmF5KHRoaXNPYmopKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2Jq
KTsKLSAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVuc2hp
ZnRDb3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgo
KSA9PSBsZW5ndGggJiYgYXJyYXktPnVuc2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhlYywg
aGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAtLWsp
IHsKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAgICAg
ICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CkBAIC01MjYsNyArNTI4LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBhcnJheS0+
cHVzaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiAgICAgfQotCisgICAgCiAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU0NCw2
ICs1NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQorICAgIAogICAgIEpTVmFsdWUgbmV3TGVu
Z3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90Pihl
eGVjLT5hcmd1bWVudENvdW50KCkpKTsKICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBuZXdMZW5ndGgpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKQEAgLTYwMCw3ICs2MDMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVk
KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIDAp
OwotICAgICAgICBzaGlmdChleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOworICAgICAg
ICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAsIDEs
IDAsIGxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHB1dFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKGxlbmd0aCAtIDEpKTsKQEAgLTczMCw3ICs3MzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YykpOwogCkBAIC03NjIsMTEgKzc2NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4PGlu
dD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdz
IDwgZGVsZXRlQ291bnQpIHsKLSAgICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgYmVnaW4sIGRl
bGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNBcnJh
eTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNvdW50
LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKLSAgICAgICAg
dW5zaGlmdChleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdz
LCBsZW5ndGgpOworICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+
KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0
aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5NCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIHVuc2ln
bmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7Ci0g
ICAgICAgIHVuc2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOworICAg
ICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwg
MCwgMCwgbnJBcmdzLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZp
c2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHku
aAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAgfQog
ICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdzIGhh
bmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9mIGJ1
dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNoYXIq
IHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQorICAg
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0
T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCk7IH0KQEAgLTcwLDkgKzc5LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hlYWRl
ciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0
aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBp
bmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVydHlT
dG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCkt
PnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkg
eyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50MzJf
dCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5ndGgo
KTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4aW5n
SGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxl
bmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5ndGgo
dmFsdWUpOyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRleGlu
Z1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAgIEFy
cmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5
U3RvcmFnZT4oKTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygpIHsg
cmV0dXJuIGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9CisgICAg
CisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjb250aWd1b3VzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
QnV0dGVyZmx5Kj4oY29udGlndW91cyk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhPZlBy
b3BlcnR5U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNTRVJU
KGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NF
UlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBBU1NF
UlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1
cmUpKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRv
IHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAgLTE2
Myw3ICsxNjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RyCiAK
IGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2VlIGNv
bW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxMCArNDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdAog
CiBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0b3Jh
Z2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFoYXNJ
bmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdU
eXBlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5kZXhpbmdUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBjaGFyKiBpbmRl
eGluZ1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN0YXRp
YyBjaGFyIHJlc3VsdFsxMjhdOworICAgIGNvbnN0IGNoYXIqIGJhc2ljTmFtZTsKKyAgICBzd2l0
Y2ggKGluZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXMpIHsKKyAgICBjYXNlIE5vbkFycmF5Ogor
ICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXkiOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdp
dGhDb250aWd1b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Ui
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBiYXNpY05h
bWUgPSAiQXJyYXlDbGFzcyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQ29u
dGlndW91czoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFz
aWNOYW1lID0gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIkFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBiYXNpY05hbWUgPSAiVW5rbm93biEiOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgc25wcmludGYoCisgICAgICAgIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCksICIl
cyVzIiwgYmFzaWNOYW1lLAorICAgICAgICAoaW5kZXhpbmdUeXBlICYgTWF5SGF2ZUluZGV4ZWRB
Y2Nlc3NvcnMpID8gInxNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyIgOiAiIik7CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAxMzAzMTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMTkgKzMyLDIxIEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7
CiAKIC8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7Citz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAgICAgICAgICA9IDI7CiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgICA9IDE2Owog
CiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlw
ZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRo
ZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFycmF5U3RvcmFnZSAg
ICAgICAgICA9IDMyOyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBoYXZlIGFycmF5IHN0
b3JhZ2UgaW4gdGhlIHBhc3QuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRl
eGVkQWNjZXNzb3JzICA9IDY0Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5k
ZXhlZEFjY2Vzc29ycyAgPSAzMjsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVz
Lgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAg
ICAgID0gMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQ29udGlndW91
cyAgICAgICAgICA9IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgPSBIYXNBcnJheVN0b3JhZ2U7CiBzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgPSBIYXNT
bG93UHV0QXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheUNsYXNz
ICAgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsgLy8gSSdkIHdhbnQgdG8gY2FsbCB0aGlz
ICJBcnJheSIgYnV0IHRoaXMgd291bGQgbGVhZCB0byBkaXNhc3Ryb3VzIG5hbWVzcGFjZSBwb2xs
dXRpb24uCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aENvbnRpZ3VvdXMgICAg
ICAgICAgICAgPSBJc0FycmF5IHwgSGFzQ29udGlndW91czsKIHN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgICAgICAgICA9IElzQXJyYXkgfCBIYXNBcnJh
eVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIApAQCAtNTIs
NiArNTQsMTAgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UAogICAg
IE5vbkFycmF5OiAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlDbGFzcwogCisj
ZGVmaW5lIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTIFwKKyAgICBOb25BcnJheVdpdGhD
b250aWd1b3VzOiAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91cworCiAj
ZGVmaW5lIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUyBcCiAgICAgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCkBAIC03Niw2ICs4MiwxMSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kCiAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0
aWVzKHR5cGUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzQ29udGlndW91cyhJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBIYXND
b250aWd1b3VzKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3RvcmFnZShJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogewogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiAo
SGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpAQCAtODYsNiArOTcs
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlU2xvd1B1dChJbmRlCiAgICAgcmV0dXJu
ICEhKGluZGV4aW5nVHlwZSAmIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwogfQogCitjb25zdCBj
aGFyKiBpbmRleGluZ1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUpOworCiAvLyBNYXNrIG9mIGFs
bCBwb3NzaWJsZSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBl
cyAgICAgICAgICAgID0gMzE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDkgKzMzNyw4IEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBu
ZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTQXJyYXk6OnNldExlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wg
dGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBs
ZW5ndGggaXMgcmVhZCBvbmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3VsZCBl
bnRlciB0aGUgZm9sbG93aW5nICdpZicuCkBAIC00MDIsMTIgKzQwMSw3MSBAQCBib29sIEpTQXJy
YXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3Ro
LCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBpZiAoIW5ld0xlbmd0
aCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNl
cHRpb24sCisgICAgICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVJbml0aWFsQ29u
dGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGlm
IChuZXdMZW5ndGggPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVYIC8v
IFRoaXMgY2FzZSBlbnN1cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KKyAgICAgICAgICAg
IHx8IChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgICAg
ICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwgY291bnRFbGVtZW50c0luQ29u
dGlndW91cyhtX2J1dHRlcmZseSkpKSkgeworICAgICAgICAgICAgcmV0dXJuIHNldExlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4
Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChuZXdMZW5ndGgg
PiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGVuc3VyZUNvbnRp
Z3VvdXNMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICBtX2J1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sIGFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBB
cnJheUNsYXNzOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3Ro
LS0pCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOwor
ICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbbGVuZ3RoXS5jbGVhcigpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAtNDMxLDI2ICs0ODksMjggQEAg
SlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgLy8gTGV0
IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1l
dGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0g
Z2V0KGV4ZWMsIGluZGV4KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIC8vIENhbGwgdGhlIFtbRGVs
ZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4K
LSAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7
Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9w
ZXJ0eS4iKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1
bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgICAgICBzZXRMZW5ndGgoZXhlYywg
aW5kZXgsIHRydWUpOwotICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0
QXJyYXlMZW5ndGgoKSAtIDE7CisgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5k
eC4KKyAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgLy8g
Q2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBp
bmR4IGFuZCB0cnVlLgorICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMs
IGluZGV4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAg
IC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMg
Imxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1
ZSk7CisgICAgLy8gUmV0dXJuIGVsZW1lbnQuCisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8v
IFB1c2ggJiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlm
ZmVyZW5jZXMuCkBAIC00NjQsNiArNTI0LDI2IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmEKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
bGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FS
UkFZX0lOREVYKSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMs
IGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2U6IHsKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAg
ICAgICAgIGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExl
bmd0aCwgdmFsdWUsIHRydWUpKSB7CkBAIC01MDUsMTggKzU4NSwxNCBAQCB2b2lkIEpTQXJyYXk6
OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBj
b3VudCkKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UodW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAg
ICBBU1NFUlQoY291bnQgPiAwKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBl
bnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAKICAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICBBU1NFUlQoY291bnQgPD0gb2xk
TGVuZ3RoKTsKICAgICAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMgb3IgaXMg
b3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2VuZXJpYyBh
bGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKG9sZExlbmd0aCAhPSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkpCisgICAgaWYg
KG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlSW5k
ZXhpbmdNb2RlKCkgfHwgc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW9sZExlbmd0aCkKQEAgLTU2
NSwxNyArNjQxLDY5IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUlu
ZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
IGNvdW50KQoreworICAgIEFTU0VSVChjb3VudCA+IDApOworICAgIAorICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7
CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KTsKKyAgICAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0
LiBXZSdyZSB3aWxsaW5nIHRvIGRvCisgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3QgaG9y
cmlibHkgc2xvdy4KKyAgICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQp
ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3VudDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICAvLyBTdG9yaW5nIHRvIGEg
aG9sZSBpcyBmaW5lIHNpbmNlIHdlJ3JlIHN0aWxsIGhhdmluZyBhIGdvb2QgdGltZS4gQnV0IHJl
YWRpbmcKKyAgICAgICAgICAgIC8vIGZyb20gYSBob2xlIGlzIHRvdGFsbHkgbm90IGZpbmUsIHNp
bmNlIHdlIG1pZ2h0IGhhdmUgdG8gcmVhZCBmcm9tIHRoZSBwcm90bworICAgICAgICAgICAgLy8g
Y2hhaW4uCisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2kgKyBjb3VudF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKSB7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRoIGlzIHRvIGVuc3VyZSB0aGF0
IHdlIGRvbid0IG1ha2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyBtaXN0YWtlIGluIHRo
ZSBmdXR1cmU6IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKCkgY2FuJ3QgZG8gYW55dGhpbmcK
KyAgICAgICAgICAgICAgICAvLyBhYm91dCBob2xlcyAoYXQgbGVhc3QgZm9yIG5vdyksIGJ1dCBp
dCBjYW4gZGV0ZWN0IHRoZW0gcXVpY2tseS4gU28KKyAgICAgICAgICAgICAgICAvLyB3ZSBjb252
ZXJ0IHRvIGFycmF5IHN0b3JhZ2UgYW5kIHRoZW4gYWxsb3cgdGhlIGFycmF5IHN0b3JhZ2UgcGF0
aCB0bworICAgICAgICAgICAgICAgIC8vIGZpZ3VyZSBpdCBvdXQuCisgICAgICAgICAgICAgICAg
cmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBjb252
ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdlJ3Jl
IGp1c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQgd2Ug
d29uJ3QgaGF2ZSBhIGRlbGV0aW9uCisgICAgICAgICAgICAvLyBiYXJyaWVyLgorICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYp
OworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZDsgaSA8IG9sZExlbmd0
aDsgKytpKQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5n
dGggLSBjb3VudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3Rh
cnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSB1bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxs
YmFjay4gICAgCi1ib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIEFTU0VSVChz
dGFydEluZGV4IDw9IGxlbmd0aCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9s
ZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUg
Z2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxlbmd0aCAhPSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IHN0b3JhZ2UtPmluU3BhcnNlTW9kZSgpKQor
ICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdl
LT5pblNwYXJzZU1vZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgbW92ZUZyb250ID0g
IXN0YXJ0SW5kZXggfHwgc3RhcnRJbmRleCA8IGxlbmd0aCAvIDI7CkBAIC02MTAsNiArNzM4LDQ4
IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCit7
CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFy
cmF5Q2xhc3M6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhbmRsZSB0aGlzLiBCdXQgaXQgc2hvdWxk
bid0IGV2ZXIgY29tZSB1cCwgc28gd2Ugd29uJ3QuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5z
aGlmdC4gV2UncmUgd2lsbGluZyB0byBkbyBzbworICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90
IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5ndGggLSBzdGFydEluZGV4ID49IE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgCisgICAgICAgIGVu
c3VyZUNvbnRpZ3VvdXNMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGggKyBjb3Vu
dCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+
IHN0YXJ0SW5kZXg7KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9i
YWxEYXRhKCkpKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNv
dW50XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBOT1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2Yg
dGhlIGFycmF5IHRoYXQgd2Ugc2hpZnRlZCBvdXQKKyAgICAgICAgLy8gb2YuIFRoaXMgaXMgZmlu
ZSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gc3RvcmUgb3ZlciB0aGF0IGFyZWEs
IGFuZAorICAgICAgICAvLyBpbiBjb250aWd1b3VzIG1vZGUgc3RvcmluZyBpbnRvIGEgaG9sZSBp
cyBndWFyYW50ZWVkIHRvIGJlaGF2ZSBleGFjdGx5IHRoZSBzYW1lCisgICAgICAgIC8vIGFzIHN0
b3Jpbmcgb3ZlciBhbiBleGlzdGluZyBlbGVtZW50LgorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiB1
bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBhcnJh
eVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHN0YXRpYyBpbnQgY29tcGFyZU51bWJl
cnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAgIGRvdWJsZSBk
YSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIoKTsKQEAgLTYyNCw2
ICs3OTQsNDUgQEAgc3RhdGljIGludCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQoYwogICAg
IHJldHVybiBjb2RlUG9pbnRDb21wYXJlKHZhLT5zZWNvbmQsIHZiLT5zZWNvbmQpOwogfQogCit0
ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0TnVt
ZXJpY1ZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxs
VHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VSVChp
bmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQ29udGlndW91cyB8fCBpbmRleGluZ1R5cGUgPT0gQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQ7CisgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgY29tcGFj
dEZvclNvcnRpbmc8aW5kZXhpbmdUeXBlPigKKyAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkLAorICAgICAgICBuZXdSZWxldmFudExlbmd0aCk7CisgICAgCisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBkYXRhID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKTsKKyAgICAK
KyAgICBpZiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSAmJiBhcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBh
bGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5l
d1JlbGV2YW50TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFkYXRhW2ldLmlzTnVtYmVyKCkp
IHsKKyAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghYWxsVmFsdWVzQXJlTnVt
YmVycykKKyAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEpOworICAgIAorICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNo
IGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAvLyBhbHNv
IGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVz
ZXIgdmlzaWJsZQorICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9m
IGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgcXNvcnQoZGF0YSwgbmV3UmVsZXZhbnRMZW5n
dGgsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0
KTsKKyAgICByZXR1cm47Cit9CisKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0
IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2Rl
KCkpOwpAQCAtNjMyLDExNyArODQxLDEyOSBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4
ZWNTdGF0ZSogZXhlCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVk
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7Ci0gICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHNvcnROdW1lcmljVmVjdG9y
PEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9z
cGFyc2VNYXApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBib29sIGFsbFZh
bHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkp
IHsKLSAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgICAgIHJldHVybiBzb3J0KGV4
ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZh
c3RlciB0aGFuIG1lcmdlc29ydC4gV2UKLSAgICAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1l
cmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAgICAg
ICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0
aXZlIHZhbHVlcy4KLSAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKLSAgICAg
ICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHNvcnROdW1lcmlj
VmVjdG9yPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEpOwogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgICAgICAKICAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0
ZSogZXhlYykKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJy
YXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0aCkKIHsKLSAgICBBU1NFUlQoIWlu
U3BhcnNlSW5kZXhpbmdNb2RlKCkpOwotICAgIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgorICAgIGlmICghcmVsZXZhbnRM
ZW5ndGgpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQg
dmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBm
cm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFi
bGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdo
IGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0
aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9t
IHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KKyAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNl
IGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGlu
Y29uc2lzdGVudC4KICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZv
clNvcnRpbmcoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwotICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydGluZyBKYXZhU2Ny
aXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2Ug
dXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGNv
bnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29u
LCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAgICAgLy8gYnVmZmVy
LiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3Rz
IGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAgICAgLy8gcmFu
ZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29t
cGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCi0gICAgICAgIAotICAgICAgICBWZWN0b3I8VmFs
dWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAg
ICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgVmVjdG9yPFZh
bHVlU3RyaW5nUGFpcj4gdmFsdWVzKHJlbGV2YW50TGVuZ3RoKTsKKyAgICBpZiAoIXZhbHVlcy5i
ZWdpbigpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hU
ZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNv
cnRWZWN0b3IoJnZhbHVlcyk7CiAgICAgICAgIAotICAgICAgICBib29sIGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcyA9IHRydWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVCghdmFsdWUu
aXNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAg
ICAgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZh
bHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOwotICAgICAgICB9CisgICAgYm9vbCBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVs
ZXZhbnRMZW5ndGg7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYmVnaW5baV0uZ2V0
KCk7CisgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7CisgICAgICAgIHZhbHVl
c1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICB9CiAg
ICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0
byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAgICAg
Ly8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50
IHZhbHVlcyBldmVuIGFmdGVyCisgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNl
cHRpb24uCiAgICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9
IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIHZhbHVlc1tpXS5zZWNv
bmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CiAgICAgICAgIAot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEhlYXA6Omhl
YXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEhl
YXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICByZXR1
cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkg
c3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNv
cnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4p
LgorICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFs
Z29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikg
cmF0aGVyCisgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgogICAgICAgICAKICNpZiBIQVZFKE1FUkdF
U09SVCkKLSAgICAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgICAg
IHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQ
YWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFs
dWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSNlbHNlCi0gICAg
ICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90
IGJlIGEgc3RhYmxlIHNvcnQuCi0gICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNw
ZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEg
c3RhYmxlIHNvcnQuCisgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKICAgICAgICAg
cXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgIGVsc2UKKyAgICAgICAgbWVy
Z2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQ
YWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbHNlCisgICAgLy8gRklYTUU6
IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUg
c29ydC4KKyAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNv
cnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAg
IHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQ
YWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgorICAgIAorICAgIC8v
IElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5
IG9yIHZlY3RvciBzdG9yYWdlLAorICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxl
IHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKSB7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBlbnN1cmVD
b250aWd1b3VzTGVuZ3RoKGdsb2JhbERhdGEsIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdl
ZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAgICAgLy8g
aW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVh
bCB2YWx1ZXMuCi0gICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCkgewotICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgICAg
ICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgICAgIGJl
Z2luID0gYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwogICAgICAgICB9Ci0gICAgICAgIGlmIChz
dG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAg
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAg
ICAgICBpZiAoYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpCisgICAg
ICAgICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgYmVnaW5baV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVt
cFNvcnRWZWN0b3IoJnZhbHVlcyk7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlD
bGFzczoKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1
b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAg
ICAgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0
aW5nPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkLCBuZXdSZWxldmFudExlbmd0aCk7CiAgICAgICAgIAorICAgICAgICBzb3J0Q29t
cGFjdGVkVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgZXhlYywgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwor
ICAgICAgICB1bnNpZ25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICAgICAgY29tcGFjdEZvclNv
cnRpbmc8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPigKKyAgICAgICAgICAgIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFTU0VSVCgh
c3RvcmFnZS0+bV9zcGFyc2VNYXApOworICAgICAgICAKKyAgICAgICAgc29ydENvbXBhY3RlZFZl
Y3RvcjxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KAorICAgICAgICAgICAgZXhlYywgc3RvcmFnZS0+
bV92ZWN0b3IsIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgICAgIApAQCAtODI4LDEwOCArMTA0OSwxMTYgQEAgc3RydWN0IEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIAogICAgIHN0YXRpYyBoYW5kbGUgbnVsbCgpIHsgcmV0
dXJuIDB4N0ZGRkZGRkY7IH0KIH07CiAKLXZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2Fs
bERhdGEmIGNhbGxEYXRhKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3Zv
aWQgSlNBcnJheTo6c29ydFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1
bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewog
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgQVNTRVJUKGluZGV4aW5n
VHlwZSA9PSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIAotICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgotICAg
ICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNl
ZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KICAgICAgICAgCi0gICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdu
b3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051
bWJlci4KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29t
cGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAgICAg
ICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgICAgICBBU1NFUlQoYXJyYXlT
dG9yYWdlKCktPmxlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKSk7Ci0gICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+bGVuZ3Ro
KCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBp
cyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAor
ICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICBBU1NFUlQobV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKSk7CisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KSkKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rv
ckxlbmd0aCA9IG1pbihhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCksIGFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwKTsKLSAgICAgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aDsKKyAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdUeXBl
PigpOworICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGg7CiAgICAgICAg
IAotICAgICAgICBpZiAoIW5vZGVDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IW5vZGVDb3VudCkKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgQVZMVHJlZTxB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlz
IGVub3VnaCBmb3IgMl4zMSBpdGVtcwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMg
PSBleGVjOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNv
bXBhcmVGdW5jdGlvbjsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5
cGUgPSBjYWxsVHlwZTsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERh
dGEgPSAmY2FsbERhdGE7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhu
b2RlQ291bnQpOworICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUs
IDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29t
cGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
Y29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21w
YXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5n
cm93KG5vZGVDb3VudCk7CiAgICAgICAgIAotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5
cGVKUykKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0
UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0
aW9uKSwgMikpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVj
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7Ci0gICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KKyAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewor
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24g
bW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZp
ZWQKLSAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRp
bmcgdGhlIHRyZWUgaGVyZS4KKyAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24g
bW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZp
ZWQKKyAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0
aGUgdHJlZSBoZXJlLgogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7
Ci0gICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgdW5zaWduZWQgbnVtRGVm
aW5lZCA9IDA7CisgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKICAgICAgICAgCi0gICAg
ICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBj
b3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRv
IHRoZSB0cmVlLgotICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsrbnVtRGVmaW5lZCkgewotICAgICAgICAgICAgaWYgKG51bURlZmluZWQgPiBhcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHYgPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVk
XS52YWx1ZSA9IHY7Ci0gICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAg
ICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IGFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFsdWUg
diA9IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICh2
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2
OwotICAgICAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAg
ICAgICAgICAgICAgKytudW1EZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KKyAgICAvLyBJdGVy
YXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5k
ZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4K
KyAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkg
eworICAgICAgICBpZiAobnVtRGVmaW5lZCA+IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5k
ZXhpbmdUeXBlPigpW251bURlZmluZWRdLmdldCgpOworICAgICAgICBpZiAoIXYgfHwgdi5pc1Vu
ZGVmaW5lZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICB0cmVlLmluc2VydChudW1E
ZWZpbmVkKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaSA+IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRl
eGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLmdldCgpOworICAgICAgICBpZiAodikgeworICAg
ICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVuZGVm
aW5lZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgICAgIHRyZWUu
aW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG5l
d1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwotICAgICAgICAK
LSAgICAgICAgQVNTRVJUKCFhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgIHVuc2ln
bmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwogICAg
ICAgICAKLSAgICAgICAgLy8gVGhlIGFycmF5IHNpemUgbWF5IGhhdmUgY2hhbmdlZC4gIEZpZ3Vy
ZSBvdXQgdGhlIG5ldyBib3VuZHMuCi0gICAgICAgIHVuc2lnbmVkIG5ld2VzdFVzZWRWZWN0b3JM
ZW5ndGggPSBtaW4oYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpLCBhcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgIC8vIFRoZSBhcnJheSBzaXplIG1heSBoYXZlIGNoYW5nZWQuICBG
aWd1cmUgb3V0IHRoZSBuZXcgYm91bmRzLgorICAgIHVuc2lnbmVkIG5ld2VzdFVzZWRWZWN0b3JM
ZW5ndGggPSByZWxldmFudExlbmd0aDxpbmRleGluZ1R5cGU+KCk7CiAgICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZCA9IG1pbihtaW4obmV3ZXN0VXNl
ZFZlY3Rvckxlbmd0aCwgbnVtRGVmaW5lZCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSkpOwotICAgICAgICB1bnNpZ25lZCB1bmRlZmluZWRF
bGVtZW50c1RocmVzaG9sZCA9IG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCBuZXdVc2VkVmVj
dG9yTGVuZ3RoKTsKLSAgICAgICAgdW5zaWduZWQgY2xlYXJFbGVtZW50c1RocmVzaG9sZCA9IG1p
bihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCB1c2VkVmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgotICAgICAgICBB
VkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0
ZXI7Ci0gICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKLSAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7ICsraSkgewotICAg
ICAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7Ci0gICAgICAgICAgICAr
K2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFB1dCB1bmRlZmluZWQgdmFs
dWVzIGJhY2sgaW4uCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVsZW1lbnRzVG9FeHRyYWN0
VGhyZXNob2xkOyBpIDwgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKLSAgICAgICAg
ICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLQotICAgICAg
ICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBv
dXQuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xk
OyBpIDwgY2xlYXJFbGVtZW50c1RocmVzaG9sZDsgKytpKQotICAgICAgICAgICAgYXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgdW5zaWduZWQgZWxlbWVudHNUb0V4dHJh
Y3RUaHJlc2hvbGQgPSBtaW4obWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG51bURlZmluZWQp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkp
KTsKKyAgICB1bnNpZ25lZCB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZCA9IG1pbihuZXdlc3RV
c2VkVmVjdG9yTGVuZ3RoLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBjbGVh
ckVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIHVzZWRWZWN0
b3JMZW5ndGgpOworICAgICAgICAKKyAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1f
c3RvcmFnZS4KKyAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0
ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7ICsraSkgewor
ICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICsr
aXRlcjsKKyAgICB9CisgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgaSA8IHVuZGVmaW5l
ZEVsZW1lbnRzVGhyZXNob2xkOyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5
cGU+KClbaV0uc2V0VW5kZWZpbmVkKCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFs
dWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisgICAgZm9yICh1bnNpZ25lZCBpID0g
dW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7IGkgPCBjbGVhckVsZW1lbnRzVGhyZXNob2xkOyAr
K2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uY2xlYXIoKTsKKyAg
ICAKKyAgICBpZiAoaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpCisgICAgICAgIGFycmF5
U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKK30K
Kwordm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVu
Y3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCit7Cisg
ICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsKKyAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXM6CisgICAgICAgIHNvcnRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4oZXhl
YywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICByZXR1cm47
CiAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgc29ydFZlY3RvcjxB
cnJheVdpdGhBcnJheVN0b3JhZ2U+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MzgsMTEzICsxMTY3LDEyMSBAQCB2
b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgSlNBcnJheTo6
ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykK
IHsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CisgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CisgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHZl
Y3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAog
ICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAgICAgCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFn
ZS0+bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5s
ZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICB1bnNpZ25lZCBpID0g
MDsKLSAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKCF2KQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3Ro
KCk7ICsraSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHZl
Y3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOwogICAgIH0KKyAgICAKKyAgICBmb3IgKDsg
aSA8IGxlbmd0aCgpOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9
CiAKIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIHVpbnQzMl90IGxlbmd0aCkKIHsKKyAgICB1bnNpZ25lZCBpID0gMDsK
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQ7CisgICAgCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7CiAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3Vz
OiB7CisgICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAg
IHZlY3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgICAgICB1
bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7
Ci0gICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICghdikKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQo
aSwgdi5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVj
LCBpKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0
b3I7CisgICAgICAgIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAg
CisgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgIGlmICghdikKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwogICAgIH0K
KyAgICAKKyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnNl
dEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKLXVuc2lnbmVkIEpTQXJyYXk6OmNvbXBh
Y3RGb3JTb3J0aW5nKCkKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lk
IEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKHVuc2lnbmVkJiBudW1EZWZpbmVkLCB1bnNpZ25l
ZCYgbmV3UmVsZXZhbnRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9k
ZSgpKTsKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSk7CiAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAg
IGNhc2UgQXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgdW5zaWduZWQgbXlSZWxldmFudExlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4
aW5nVHlwZT4oKTsKKyAgICAKKyAgICBudW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1V
bmRlZmluZWQgPSAwOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7
Ci0gICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgZm9yICg7IG51bURlZmlu
ZWQgPCBteVJlbGV2YW50TGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgSlNWYWx1ZSB2
ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAg
ICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytudW1EZWZpbmVkKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVk
KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwot
ICAgICAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgp
KQotICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10u
c2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbXlSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAg
IEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7CisgICAg
ICAgIGlmICh2KSB7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAg
ICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHYpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBuZXdV
c2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLSAgICAgICAgCi0g
ICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsK
LSAgICAgICAgCi0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bURlZmluZWQ7CiAgICAg
fQogICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQorICAgIG5ld1JlbGV2YW50TGVuZ3RoID0gbnVt
RGVmaW5lZCArIG51bVVuZGVmaW5lZDsKKyAgICAKKyAgICBpZiAoaGFzQXJyYXlTdG9yYWdlKGlu
ZGV4aW5nVHlwZSkpCisgICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFw
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3UmVsZXZh
bnRMZW5ndGg7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5z
ZXRVbmRlZmluZWQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdSZWxldmFudExlbmd0aDsg
aSA8IG15UmVsZXZhbnRMZW5ndGg7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5n
VHlwZT4oKVtpXS5jbGVhcigpOwogCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5
cGUpKQorICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1Jl
bGV2YW50TGVuZ3RoOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCAr
NzEsNTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaChFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSBwb3AoRXhlY1N0YXRlKik7CiAKLSAgICAgICAgYm9v
bCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50KTsKLSAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3Rh
cnRJbmRleCwgdW5zaWduZWQgY291bnQpOworICAgICAgICBlbnVtIFNoaWZ0Q291bnRNb2RlIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBvZiBzaGlmdCBoaW50cyB0aGF0IHdlJ3JlIGRvaW5n
IHF1ZXVlaW5nLiBXaXRoIHRoaXMgYXNzdW1wdGlvbiBpbiBoYW5kLAorICAgICAgICAgICAgLy8g
d2UgY29udmVydCB0byBBcnJheVN0b3JhZ2UsIHdoaWNoIGhhcyBxdWV1ZSBvcHRpbWl6YXRpb25z
LgorICAgICAgICAgICAgU2hpZnRDb3VudEZvclNoaWZ0LAorICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBUaGlzIGZvcm0gb2Ygc2hpZnQgaGludHMgdGhhdCB3ZSdyZSBqdXN0IGRvaW5nIGNh
cmUgYW5kIGZlZWRpbmcgb24gYW4gYXJyYXkgdGhhdAorICAgICAgICAgICAgLy8gaXMgcHJvYmFi
bHkgdHlwaWNhbGx5IHVzZWQgZm9yIG9yZGluYXJ5IGFjY2Vzc2VzLiBXaXRoIHRoaXMgYXNzdW1w
dGlvbiBpbiBoYW5kLAorICAgICAgICAgICAgLy8gd2UgdHJ5IHRvIHByZXNlcnZlIHdoYXRldmVy
IGluZGV4aW5nIHR5cGUgaXQgaGFzIGFscmVhZHkuCisgICAgICAgICAgICBTaGlmdENvdW50Rm9y
U3BsaWNlCisgICAgICAgIH07CisKKyAgICAgICAgYm9vbCBzaGlmdENvdW50Rm9yU2hpZnQoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0
SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYm9vbCBzaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShleGVjLCBzdGFydElu
ZGV4LCBjb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGU8U2hpZnRDb3VudE1vZGUg
c2hpZnRDb3VudE1vZGU+CisgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHNoaWZ0Q291bnRNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNoaWZ0Q291
bnRGb3JTaGlmdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNoaWZ0KGV4
ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNw
bGljZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNwbGljZShleGVjLCBz
dGFydEluZGV4LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgdW5zaGlmdENvdW50Rm9yU2hpZnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBib29sIHVuc2hpZnRDb3VudEZvclNwbGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gdW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShleGVjLCBzdGFydEluZGV4LCBjb3Vu
dCk7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGU8U2hpZnRDb3VudE1vZGUgc2hpZnRDb3Vu
dE1vZGU+CisgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoc2hpZnRDb3VudE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNo
aWZ0OgorICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRGb3JTaGlmdChleGVjLCBz
dGFydEluZGV4LCBjb3VudCk7CisgICAgICAgICAgICBjYXNlIFNoaWZ0Q291bnRGb3JTcGxpY2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudEZvclNwbGljZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICB2b2lk
IGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAg
IHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxl
bmd0aCk7CkBAIC05NCwxOCArMTQwLDQ0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPck51bGwoKTsK
ICAgICAgICAgICAgIGlmICghc3RvcmFnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJl
dHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgYm9vbCBzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUq
LCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJvb2wgc2hp
ZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291
bnQsIEFycmF5U3RvcmFnZSopOwogCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhl
Y1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRo
QW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgY291bnQpOworICAgICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShK
U0dsb2JhbERhdGEmLCBib29sLCB1bnNpZ25lZCk7CisKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0TnVtZXJpY1ZlY3RvcihFeGVj
U3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0
IENhbGxEYXRhJiBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3IoRXhl
Y1N0YXRlKiwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRM
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZT4KKyAgICAgICAgdm9pZCBzb3J0VmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFy
ZUZ1bmN0aW9uLCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmKTsKKworICAgICAgICBib29sIHNl
dExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBi
b29sIHRocm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgdm9pZCBzZXRMZW5n
dGhXcml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsKICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKCk7CisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgY29tcGFjdEZvclNvcnRpbmcodW5zaWdu
ZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCk7CiAgICAgfTsKIAor
ICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIElu
ZGV4aW5nSGVhZGVyIGhlYWRlcjsKKyAgICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aChzdGQ6
Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBoZWFkZXIuc2V0UHVibGlj
TGVuZ3RoKGxlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVyZmx5Ojpj
cmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBoZWFkZXIsIGhlYWRl
ci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0
dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkK
ICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUo
CkBAIC0xMjEsNyArMTkzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJy
YXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtF
TFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgewor
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KGds
b2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxMZW5n
dGggPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICB8fCAoaW5pdGlhbExlbmd0aCAmJiBzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgICAg
ICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlh
bExlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMzMsMTUgKzIxMywy
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAg
ICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwg
MCk7Ci0gICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRl
ckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHN0b3Jh
Z2UtPm1faW5kZXhCaWFzID0gMDsKLSAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIo
KTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OworICAgICAgICBpZiAoTElLRUxZKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91cykpIHsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpm
cm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVu
Z3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZvaWQqIHRl
bXA7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZl
Y3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAgICAg
ICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJy
YXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9y
YWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5j
bGVhcigpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRp
YWxMZW5ndGg7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAgICAgIGFycmF5LT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDcgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFs
dWUgcHJvdG8KICAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpOwogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpKTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOworICAgIG1f
YXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5n
ZXQoKSwgQXJyYXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJy
YXlTdG9yYWdlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCks
IEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0
KCkpKTsKIApAQCAtMzU3LDcgKzM1OCw3IEBAIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5k
ZXI6Ok9iamVjdHMKIGlubGluZSBib29sIGhhc0Jyb2tlbkluZGV4aW5nKEpTT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgLy8gVGhpcyB3aWxsIGNoYW5nZSBpZiB3ZSBoYXZlIG1vcmUgaW5kZXhpbmcg
dHlwZXMuCi0gICAgcmV0dXJuICEhKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
ICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICByZXR1cm4gISEob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzQ29udGlndW91cykpOwogfQog
CiB2b2lkIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXI6Om9wZXJhdG9yKCkoSlNDZWxs
KiBjZWxsKQpAQCAtNDEwLDYgKzQxMSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmhhdmVBQmFk
VGltZShKU0dsb2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJheSBhbGxvY2F0aW9u
cyB0aGF0IGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAgICAgLy8gdGhpcyBv
YmplY3Qgbm93IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQuCiAgICAgbV9hcnJh
eVN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQ
dXQuZ2V0KCkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CiAgICAgCiAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGluZGV4ZWQgc3RvcmFn
ZSBzd2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQgc3RvcmFnZS4KQEAg
LTQ4NSw2ICs0ODcsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVNjb3BlU3RydWN0dXJlKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1bWVudHNTdHJ1Y3R1cmUpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlKTsKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3Jh
Z2UpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlRm9y
U2xvd1B1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYm9vbGVhbk9iamVj
dFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FsbGJhY2tD
b25zdHJ1Y3RvclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Niw2ICsxMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2FycmF5U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJyYXlTdHJ1Y3R1cmVG
b3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQgdGltZS4KKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3Jh
Z2U7IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29v
biBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAgICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsKICAgICAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmU7CkBAIC0yNjcs
NyArMjY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVyZSogbmFtZVNjb3Bl
U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICAgICAgU3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X2FyZ3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZS5nZXQoKTsgfQorICAgICAg
ICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdldCgpOyB9CiAgICAgICAgIHZv
aWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmU7
IH0KKyAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdl
KCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlOyB9CiAgICAgICAg
IFN0cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9v
bGVhbk9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNr
Q29uc3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrQ29uc3RydWN0
b3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxsYmFja0Z1bmN0aW9u
U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdl
dCgpOyB9CkBAIC00NzksNyArNDgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUg
SlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHJldHVybiBK
U0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpbml0aWFsTGVuZ3RoID49IE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggPyBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFycmF5
U3RvcmFnZSgpIDogZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3Ro
KTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEsMjQgKzEzMSw0MCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0
QnV0dGVyCiAgICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
TWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldDsKKyAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsKKyAgICAgICAgICAgIHNp
emVfdCBjb3VudDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZs
eS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3QnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAg
ICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygq
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFZhbHVlKCZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGlmIChu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOwor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgKGN1cnJlbnRU
YXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsK
QEAgLTE1OCw2ICsxNzQsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0
dGVyCiAgICAgICAgIAogICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4K
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXApCkBAIC0yMzQsNiArMjUzLDIwIEBAIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKHZh
bHVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkp
CkBAIC0zNTEsNiArMzg0LDE2IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW3Byb3BlcnR5
TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAg
ICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAg
ICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwcm9wZXJ0eU5hbWUgKyAxKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwpAQCAtNDQzLDYgKzQ4NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rp
b25hcnlJCiB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgLy8gTk9URTogdGhpcyBpcyBob3JyaWJseSBpbmVmZmljaWVudCwgYXMgaXQgd2lsbCBwZXJm
b3JtIHR3byBjb252ZXJzaW9ucy4gV2UgY291bGQgb3B0aW1pemUKKyAgICAgICAgLy8gdGhpcyBj
YXNlIGlmIHdlIGV2ZXIgY2FyZWQuCisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICBicmVhazsKICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBlbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICBicmVhazsKQEAgLTQ2NSw2ICs1
MTMsMjQgQEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBYwogICAgIGds
b2JhbE9iamVjdCgpLT5oYXZlQUJhZFRpbWUoZ2xvYmFsRGF0YSk7CiB9CiAKK1dyaXRlQmFycmll
cjxVbmtub3duPiogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPCBN
QVhfQVJSQVlfSU5ERVgpOworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKG9sZFR5cGUpKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQ
dXRJbmRleGluZygpKTsKKyAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9M
RU4pOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJh
eVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogdmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChs
ZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7
CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3VzKTsKKyAg
ICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwor
ICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKK30KKwogQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCiB7CiAgICAgSW5kZXhpbmdU
eXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CkBAIC00ODAsNyArNTQ2
LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIHJlc3Vs
dC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOwotICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSk7Cisg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5
U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1
dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDkwLDE2
ICs1NTYsOTYgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycgogICAg
IHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVO
KTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0
cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGhhc0NvbnRp
Z3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisgICAgdW5zaWduZWQg
cHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVk
IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAg
ICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwor
ICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgCisgICAgbWVtY3B5
KAorICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXpl
LAorICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUs
CisgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIAor
ICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKG5lZWRlZExlbmd0aCk7CisgICAg
bmV3U3RvcmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3U3RvcmFnZS0+bV9z
cGFyc2VNYXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAg
bmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gcHVibGljTGVuZ3RoOyBpLS07KSB7CisgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgIGlmICghdikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRpb24pOwor
ICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7
CisgICAgcmV0dXJuIG5ld1N0b3JhZ2U7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKK30KKworV3JpdGVC
YXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGlmIChV
TkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJlKCktPm5lZWRzU2xv
d1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBj
cmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgICAgIEFT
U0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgICAgICByZXR1
cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAg
CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGlmIChVTkxJS0VM
WShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRh
KTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0J1dHRlcmZs
eSogSlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElLRUxZKHN0
cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6
ZnJvbUNvbnRpZ3VvdXMoY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMCkpOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQpAQCAtNTA3LDYgKzY1MywxMCBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZpY2llbnQsIGlm
IHdlIGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hl
bkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKQEAgLTUyNiw2ICs2NzYsMTEgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBKU09iamVjdDo6
c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsK
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7CkBA
IC01NjksOCArNzI0LDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0
YQogICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVj
dHVyZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOwogfQog
CiBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzA0LDYgKzg1OCwxNCBAQCBib29s
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChpID49IGJ1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC04NzcsNiArMTAzOSwxNyBAQCB2
b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0aCA9
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtMTEwMiw5ICsxMjc1
LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogewogICAgIEFT
U0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwogICAgIAotICAgIGlmIChkZXNjcmlwdG9y
LmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAgICAgICAgbm90aWZ5UHJl
c2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLQogICAgIGlmICgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1
dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQogICAgICAgICAvLyBG
SVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVz
IGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCkBAIC0xMTE0LDEwICsx
Mjg0LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAg
ICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKICAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1
ZSgpLCAwLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXRE
aXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAg
ICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB9CiAKKyAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCisgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJ
bmRleGVkQWNjZXNzb3JzKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisKICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdl
dCgpOwogICAgIEFTU0VSVChtYXApOwogCkBAIC0xMjY2LDYgKzE0MzksMzUgQEAgYm9vbCBKU09i
amVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbgogICAgIHJldHVybiBhc09iamVjdChwcm90
b3R5cGVWYWx1ZSktPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5
cGUoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAordm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRl
cyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNT
RVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNT
RVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIAorICAgIC8vIEZvciB1cyB0byBn
ZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4gdGhlIHB1YmxpYyBsZW5n
dGgsIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3Ro
LgorICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgCisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAor
ICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKKyAgICAgICAgfHwgKGkgPj0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
aSwgY291bnRFbGVtZW50c0luQ29udGlndW91cyhtX2J1dHRlcmZseSkpKSkgeworICAgICAgICBB
U1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICBjb252ZXJ0Q29udGlndW91c1Rv
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxE
YXRhKTsKKyAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgZmFsc2Up
OworICAgICAgICBBU1NFUlQoaSA+PSBhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpOworICAgICAg
ICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpOworCisg
ICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30KKwog
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTM0OCwxNyArMTU1MCwyOSBAQCB2b2lk
IEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSB7Ci0gICAgICAgICAg
ICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csCisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKLSAgICAgICAg
ICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDAp
KTsKKyAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgeworICAgICAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAg
ICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
aSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMo
Z2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVu
Z3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9i
YWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IgPSAxOworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRl
cyhleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0x
Mzg0LDggKzE1OTgsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSog
c3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhhc0FycmF5
U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoYXJyYXlT
dG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsK
IApAQCAtMTQ2NywxNCArMTY4MywzMiBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3RvCiAgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewotICAgICAgICBpZiAoaW5k
ZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwotICAgICAgICBpZiAoIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3JlYXRlQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKLSAgICAgICAgCi0gICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0
TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgp
IHx8IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwg
dmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2Rl
LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgeworICAgICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3Vv
dXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25s
eSB8IEFjY2Vzc29yKSkgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShn
bG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ5OSwxMiArMTczMyw3IEBAIEFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICghY3VycmVudFZlY3Rv
ckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0
aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5
IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0
aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExl
bmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlz
IGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJl
ZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVlUGx1c09u
ZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoaW5jcmVh
c2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUyNCw5ICsxNzUzLDEwIEBAIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9yTGVuZ3Ro
ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0go
KTsKQEAgLTE1MzUsNiArMTc2NSwxNiBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0
OjpnZXROZXdWCiAgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgsIGxl
bmd0aCwgZGVzaXJlZExlbmd0aCk7CiB9CiAKK3Vuc2lnbmVkIEpTT2JqZWN0Ojpjb3VudEVsZW1l
bnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAgIHVuc2lnbmVkIG51
bVZhbHVlcyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsgaS0tOykgeworICAgICAgICBpZiAoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisg
ICAgICAgICAgICBudW1WYWx1ZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG51bVZhbHVlczsKK30K
KwogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2
ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNl
IGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKQEAgLTE1
NDMsNiArMTc4MywxMCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0ds
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZSgpOworICAgIAorICAgIGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWAorICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTE1NzQsNiArMTgx
OCwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VS
VChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChsZW5ndGggPiBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0
aCA9IHN0ZDo6bWluKAorICAgICAgICBsZW5ndGggPDwgMSwKKyAgICAgICAgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7CisgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5
UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0
aChuZXdWZWN0b3JMZW5ndGgpOworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZM
aW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtMTYwMiw2
ICsxODYyLDE3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAg
aWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmdldCgpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxl
bmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTE2MSw4ICsxNjIsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjA3LDYgKzIwOSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsK
ICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAg
ICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAg
ICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjY3LDkgKzI3MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
aSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCkBAIC0yODUs
OCArMjkyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTYsMTUgKzMwNCwyMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAg
IGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAgICAg
eC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsK
ICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMx
NSw2ICszMzEsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUlu
ZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAg
ICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAg
ICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwpAQCAt
MzMxLDYgKzM1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBB
TExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CkBAIC0z
NDQsNiArMzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFM
TF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKQEAg
LTU0MSw2ICs1NjUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGZvby0+YXR0ZW1w
dFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZSguLi4pOwogICAgICAgICBib29sIGF0dGVtcHRU
b0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7CiAgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIDAgaWYgY29udGlndW91cyBzdG9y
YWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UKKyAgICAgICAgLy8gaW5kZXhp
bmcgc2hvdWxkIGJlIHNwYXJzZSBvciBiZWNhdXNlIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLgor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0Nv
bnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUg
d2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQogICAgICAgICAvLyB0aGlzIGlmIHlvdSdy
ZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQog
ICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwg
aWYgaXQgZGlkbid0IGhhdmUgaXQKQEAgLTU1Myw2ICs1ODcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChMSUtFTFkoaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5OworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5l
U3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBidXR0ZXJmbHlP
ZmZzZXQoKQpAQCAtNjE1LDExICs2NTcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIGNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1Rv
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWdu
ZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYp
OwogICAgICAgICAKICAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2Vw
dGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGln
dW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSk7CiAgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKIAogICAgICAgICBib29sIGluY3JlYXNl
VmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CkBAIC02MzAs
NiArNjc3LDU2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG5vdGlmeVByZXNlbmNl
T2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9v
bCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8v
IENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNrbHkgdG8gc3VjY2VlZCBhbmQgeW91
J3JlIHN1cmUgdGhhdAorICAgICAgICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4KKyAgICAg
ICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobGVuZ3RoIDwg
TUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgICAgIGVu
c3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KGdsb2JhbERhdGEsIGxlbmd0aCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgp
CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjb3VudEVsZW1lbnRzSW5Db250
aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRl
PEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogaW5kZXhpbmdEYXRhKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChpbmRleGlu
Z1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB1bnNpZ25lZCByZWxldmFudExlbmd0aCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC02NjQsNyArNzYx
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoU2xv
dyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xv
YmFsRGF0YSYpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3co
SlNHbG9iYWxEYXRhJik7CisgICAgICAgIEJ1dHRlcmZseSogZW5zdXJlSW5kZXhlZFN0b3JhZ2VT
bG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1
dHRlcmZseSogbV9idXR0ZXJmbHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAKIGNoYXIqIEpTVmFsdWU6
OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAx
Mjg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OwogICAgIHN0YXRpYyBjaGFy
IGRlc2NyaXB0aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykKQEAgLTIxMyw5ICsyMTMsMTIg
QEAgY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKSBjb25zdAogICAgICAgICB1LmFzRG91Ymxl
ID0gYXNEb3VibGUoKTsKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3Vi
bGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1swXSwg
YXNEb3VibGUoKSk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKQotICAgICAgICBz
bnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwIiwgYXNDZWxsKCkpOwotICAgIGVs
c2UgaWYgKGlzVHJ1ZSgpKQorICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpIHsKKyAgICAgICAgc25w
cmludGYoCisgICAgICAgICAgICBkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwICglcDogJXMs
ICVzKSIsCisgICAgICAgICAgICBhc0NlbGwoKSwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBhc0Nl
bGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5jbGFzc05hbWUsCisgICAgICAgICAgICBp
bmRleGluZ1R5cGVUb1N0cmluZyhhc0NlbGwoKS0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkoKSkpOworICAgIH0gZWxzZSBpZiAoaXNUcnVlKCkpCiAgICAgICAgIHNu
cHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiVHJ1ZSIpOwogICAgIGVsc2UgaWYgKGlzRmFsc2Uo
KSkKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJGYWxzZSIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEzMDMx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICNp
ZiAhRU5BQkxFKFlBUlJfSklUKQogICAgIHVzZVJlZ0V4cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYK
LQorICAgIAogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29y
cmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsK
ICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9s
ZEZvck9wdGltaXplU29vbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDExICszMjMs
MTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0KIH0K
IAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFu
c2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkp
OwotICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vz
c2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKSkKKyAgICByZXR1cm4g
YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpCisgICAgICAgIHx8
IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCk7Cit9CisKK05vblByb3BlcnR5VHJh
bnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25z
dAoreworICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZygpKQogICAgICAgICByZXR1cm4gQWxs
b2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5
U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAKICAgICAgICAgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5k
ZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gc3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wg
bmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0
aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9i
YWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBT
dXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJl
bGF0ZWQgdG8gcHJvcGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0
cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB7CisgICAgQWxsb2NhdGVDb250aWd1b3VzLAogICAgIEFsbG9jYXRlQXJyYXlTdG9y
YWdlLAogICAgIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSwKICAgICBTd2l0Y2hUb1Nsb3dQ
dXRBcnJheVN0b3JhZ2UsCkBAIC01NywxMiArNTgsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHRvQXR0
cmlidXRlcyhOb25Qcm9wZXJ0eQogaW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUo
SW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQog
ewogICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgQWxsb2NhdGVDb250aWd1b3Vz
OgorICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQ
dXRBcnJheVN0b3JhZ2UpKSk7CisgICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQ29udGlndW91
czsKICAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlw
ZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRp
Z3VvdXMpIHwgSGFzQXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWxsb2NhdGVTbG93UHV0QXJyYXlT
dG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7
CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250aWd1b3VzKSB8IEhhc1Nsb3dQdXRB
cnJheVN0b3JhZ2U7CiAgICAgY2FzZSBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgQVNTRVJUKCEo
b2xkVHlwZSAmIEhhc0NvbnRpZ3VvdXMpKTsKICAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhh
c0FycmF5U3RvcmFnZSkgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWRkSW5k
ZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBNYXlIYXZlSW5kZXhlZEFj
Y2Vzc29yczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJj
ZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxNiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBoYXNUd29PCiAgICAgcmV0dXJuICFo
YXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oVCB2YWx1ZSkKK3sKKyAgICAvLyBN
YXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgIC8vICAgKHZhbHVlICogMyArIDEpIC8g
MjsKKyAgICAvLyBvcjoKKyAgICAvLyAgICh1bnNpZ25lZCljZWlsKHZhbHVlICogMS41KSk7Cisg
ICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICBy
ZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAodmFsdWUgJiAxKTsKK30KKwogI2lmICFDT01Q
SUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIU9TKFNPTEFSSVMpCiB1c2luZyBzdGQ6
OmlzZmluaXRlOwogI2lmICFDT01QSUxFUl9RVUlSSyhHQ0MxMV9HTE9CQUxfSVNJTkZfSVNOQU4p
Cg==
</data>
<flag name="commit-queue"
          id="180199"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167513</attachid>
            <date>2012-10-08 00:10:43 -0700</date>
            <delta_ts>2012-10-08 01:03:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>holycontiguous_10.patch</filename>
            <type>text/plain</type>
            <size>319260</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOCBA
QAorMjAxMi0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcga2luZCBvZiBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgY2FsbGVkIENvbnRpZ3VvdXMsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgIAorICAgICAgICAtIE5vIGhlYWRlciBiaXRzIGJleW9uZCBJ
bmRleGVkSGVhZGVyLiBUaGlzIHJlc3VsdHMgaW4gYSAxNiBieXRlIHJlZHVjdGlvbgorICAgICAg
ICAgIGluIG1lbW9yeSB1c2FnZSBwZXIgYXJyYXkgdmVyc3VzIGFuIEFycmF5U3RvcmFnZSBhcnJh
eS4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHRoYXQgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBm
b3IgYW4gZW1wdHkgYXJyYXkgaXMgbm93IGp1c3QgMyAqIDggb24gYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LiBPZiB0aGF0LCBvbmx5IDggYnl0ZXMgYXJlIGFycmF5LXNwZWNpZmlj
OyB0aGUgcmVzdCBpcworICAgICAgICAgIG91ciBzdGFuZGFyZCBvYmplY3QgaGVhZGVyIG92ZXJo
ZWFkLgorICAgICAgICAKKyAgICAgICAgLSBObyBuZWVkIGZvciBob2xlIGNoZWNrcyBvbiBzdG9y
ZS4gVGhpcyByZXN1bHRzIGluIGEgfjQlIHNwZWVkLXVwIG9uCisgICAgICAgICAgS3Jha2VuIGFu
ZCBhIH4xJSBzcGVlZC11cCBvbiBWOHY3LgorICAgICAgICAKKyAgICAgICAgLSBwdWJsaWNMZW5n
dGggPD0gdmVjdG9yTGVuZ3RoLiBUaGlzIG1lYW5zIHRoYXQgZG9pbmcgbmV3IEFycmF5KGJsYWgp
CisgICAgICAgICAgaW1tZWRpYXRlbHkgYWxsb2NhdGVzIHJvb20gZm9yIGJsYWggZWxlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIE5vIHNwYXJzZSBtYXAgb3IgaW5kZXggYmlhcy4KKyAgICAg
ICAgCisgICAgICAgIElmIHlvdSBldmVyIGRvIHRoaW5ncyB0byBhbiBhcnJheSB0aGF0IHdvdWxk
IHJlcXVpcmUgcHVibGljTGVuZ3RoID4KKyAgICAgICAgdmVjdG9yTGVuZ3RoLCBhIHNwYXJzZSBt
YXAsIG9yIGluZGV4IGJpYXMsIHRoZW4gd2Ugc3dpdGNoIHRvIEFycmF5U3RvcmFnZQorICAgICAg
ICBtb2RlLiBUaGlzIGhhcHBlbnMgc2VlbXMgdG8gbmV2ZXIgaGFwcGVuIGluIGFueSBiZW5jaG1h
cmsgd2UgdHJhY2ssIGFuZAorICAgICAgICBpcyB1bmxpa2VseSB0byBoYXBwZW4gdmVyeSBmcmVx
dWVudGx5IG9uIGFueSB3ZWJzaXRlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6
CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6
QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFs
SW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5o
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6
Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToK
KyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNK
U0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVU
b0hvbGUpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAg
KEpTQzo6REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6
OkRGRzo6cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6Cisg
ICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hl
R2V0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
IChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnB1
dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKToKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0
QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlT
dG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
cmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKFNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Njb3BlOjpTYW1wbGluZ1Njb3BlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdTY29wZTo6flNh
bXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBpbGF0aW9u
SW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxhdGlvbklu
Zm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEFsbG9jYXRlSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19h
cnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaDoKKyAgICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rv
cik6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OnVuc2hpZnQpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5
Lmg6CisgICAgICAgIChCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21Q
b2ludGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5OjpwdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0UHVibGljTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OmNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21D
b250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaDoK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6QnV0dGVy
Zmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdUeXBlVG9TdHJpbmcpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpoYXNDb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojpzb3J0TnVtZXJpY1ZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVj
dG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb21w
YWN0Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNoaWZ0Q291bnRGb3JTcGxpY2UpOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNoaWZ0Q291bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291
bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNwbGlj
ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmlzTGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpjcmVhdGVDb250aWd1
b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoK
KyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjphZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNv
bnRpZ3VvdXNTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFn
ZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0
Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJv
dG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3VudEVsZW1l
bnRzSW5Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dHJ5R2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHlG
b3JQdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpoYXNTcGFyc2VNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFy
c2VJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJ
bmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nRGF0YSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpyZWxldmFudExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9KU1Zh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZGVzY3JpcHRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0M6Om5ld0luZGV4
aW5nVHlwZSk6CisKIDIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAg
U0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKICAgICBydW50aW1lL0lkZW50aWZp
ZXIuY3BwCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKICAgICBy
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1g4NkFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggXApAQCAtNTE5LDYgKzUy
MCw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nVHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtMTk5LDYgKzE5OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcCBcCiAgICAgcnVudGltZS9PcHRpb25zLmNwcCBcCiAgICAgcnVudGltZS9JZGVudGlmaWVy
LmNwcCBcCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwIFwKICAgICBydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwIFwKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwIFwK
ICAgICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjIs
NiArNTIyLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5cGUuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNTc0LDYgKzE1NzgsMTAgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQnlWYWxJbmZv
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGJ5dGVjb2RlXENhbGxMaW5rSW5mby5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBACiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBDRDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1
MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRC
RDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2
MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3
QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1v
blNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcCAqLzsgfTsKIAkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE2NSw2ICsxNjYsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNE
QjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3
QjI5NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJB
OSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0Ux
NDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZh
bEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0Qg
LyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEw
MTU3RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcw
MDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTg0OCw2
ICs4NTAsNyBAQAogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYx
QzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJ
bmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5k
ZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYxNUQxNEI3
QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVC
MTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzgsNiArOTQxLDcgQEAKIAkJMEY3NzAwOEUx
NDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyog
REZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ND
YWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlE
MEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxMDgsNyArMjExMiw2IEBACiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1
bmN0aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyog
RnVuY3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyog
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAxMDhF
MzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJQkMwMkU5QjgwRTE4NDU0NTAwMEY5
Mjk3IC8qIEdldHRlclNldHRlci5jcHAgKi8sCiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThB
IC8qIEdldHRlclNldHRlci5oICovLApAQCAtMjExNiw2ICsyMTE5LDcgQEAKIAkJCQk5MzNBMzQ5
QTAzOEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovLAogCQkJCTBGQjdGMzhEMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAogCQkJCTBGQjdGMzhFMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRjEzRTA0
QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVD
MzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5
QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCkBAIC0yMjc0LDYgKzIy
NzgsNyBAQAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywK
IAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3
RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKKwkJCQlDMkQ1OEMz
MzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDgwLDYg
KzI0ODUsNyBAQAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
Y3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAq
LywKIAkJCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5o
ICovLAorCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKIAkJ
CQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJCQkw
RjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEY5MzMy
OTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTI5NTksNiAr
Mjk2NSw3IEBACiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFs
dWVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQ
dXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIw
MEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZF
MUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTND
MUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAg
LTM1NjUsNiArMzU3Miw3IEBACiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8q
IFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlG
MTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTNFMDRFMTYxNjRBMUYw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjEx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQs
NyArNTY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikK
KyAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1f
anVtcHMuc2l6ZSgpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzksNiArMjM5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQ
YXRjaGFibGVKdW1wKGp1bXAoKSk7CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFi
bGVCcmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVz
dGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4g
UGF0Y2hhYmxlSnVtcChicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2Vu
ZGlmCiAKICAgICB2b2lkIGp1bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEJ5VmFsSW5mb19oCisjZGVmaW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBK
SVRBcnJheVN0b3JhZ2UgfTsKKworaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5s
aW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1
b3VzOworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENS
QVNIKCk7CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0
IEJ5VmFsSW5mbyB7CisgICAgQnlWYWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUsIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KQorICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5
TW9kZShhcnJheU1vZGUpCisgICAgICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBU
b0RvbmUpCisgICAgICAgICwgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
OworICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5l
IEpJVCBjb2RlLgorICAgIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCBy
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOworfTsKKworaW5saW5lIHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgo
QnlWYWxJbmZvKiBpbmZvKQoreworICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAv
LyBCeVZhbEluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZp
bmUgQ29kZUJsb2NrX2gKIAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5
VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJD
YWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNl
dC5oIgpAQCAtMjA5LDYgKzIxMCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgdm9pZCByZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAg
ICAgCisgICAgICAgIEJ5VmFsSW5mbyYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbElu
Zm8sIHVuc2lnbmVkLCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVn
aW4oKSwgbV9ieVZhbEluZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBz
aXplKSB7IG1fc3RydWN0dXJlU3R1YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90
IG51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
dHViSW5mb3Muc2l6ZSgpOyB9CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVT
dHViSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNp
emUpIHsgbV9ieVZhbEluZm9zLmdyb3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9m
QnlWYWxJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAg
ICAgQnlWYWxJbmZvJiBieVZhbEluZm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5m
b3NbaW5kZXhdOyB9CiAKICAgICAgICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25l
ZCBnbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVj
dG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVj
dG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2
ZUluZm8+IG1fZ2xvYmFsUmVzb2x2ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1f
bWV0aG9kQ2FsbExpbmtJbmZvczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OSwxMiArODU5LDE3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAg
ICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1df
UFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RF
UzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKQEAgLTkwOCw2ICs5MTMsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MTUsNiArOTIzLDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBF
ZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgc3dpdGNoICht
b2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpKSB7CkBAIC05MjQsMTEgKzkzMywxOCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgog
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNl
IEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM2Nyw3ICsxMzgzLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01P
REVTOiAvLyBUaGVzZSBvbmx5IGdldCBhIENoZWNrQXJyYXkgZm9yIEdldEFycmF5TGVuZ3RoCiAg
ICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmln
aHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBv
ZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0Lgog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAt
MTQxMCw5ICsxNDI4LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICB9CiAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIo
KTsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMTQgQEAgQXJyYXk6Ok1v
ZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAgICAgICByZXR1cm4gQXJyYXk6OlVu
cHJvZmlsZWQ7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgogICAgICAgICBpZiAo
YWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFj
Y2Vzc2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7
IC8vIEZJWE1FOiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSwg
b3Igbm90LiBUaGlzIGlzIGEgZGVjZW50IGd1ZXNzLgorICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25v
dyB3aGV0aGVyIHRvIGdvIHRvIHNsb3cgcHV0IG1vZGUgb3Igbm90LiBXZSdyZSBndWVzc2luZyB0
aGF0IHdlIGRvbid0IG5lZWQgc2xvdyBwdXQuCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNp
ZGVkOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAg
ICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzIDogKHBy
b2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6Q29udGlndW91c1RvVGFpbCA6IEFycmF5
OjpDb250aWd1b3VzKTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3Vz
KToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRv
SG9sZSgpID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5
OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8g
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpBcnJheVN0b3JhZ2UpOwogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgpAQCAtNTYs
NiArNjIsMjAgQEAgQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAg
IGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICAg
ICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29u
dGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
cmV0dXJuIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3Vz
KSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4g
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250
aWd1b3VzKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUt
Pm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQ29udGlndW91czsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNl
cHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYm
ICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKICAgICAgICAgICAgIHJl
dHVybiBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTsKQEAgLTE0NCw2ICsxNjQsMjIgQEAgYm9v
bCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsK
ICAgICAgICAgCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoK
KyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBIYXNDb250aWd1b3VzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgSGFzQ29udGlndW91cykKKyAgICAgICAgICAgICYmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0Fy
cmF5KTsKKwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6CkBAIC0xNzAsNyArMjA2LDggQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RW
YWx1ZSYgdgogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCi0g
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExf
RUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgpAQCAtMjI1
LDYgKzI2MiwyNCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAg
ICAgICAgIHJldHVybiAiRm9yY2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgIHJldHVybiAiU3RyaW5nIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkNvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPdXRPZkJvdW5k
cyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJu
ICJBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOwor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAg
cmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWwiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVy
biAiQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6CkBA
IC0yNDksMTAgKzMwNCwyMCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUg
bW9kCiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
IjsKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgogICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICByZXR1
cm4gIkJsYW5rVG9Db250aWd1b3VzIjsKICAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9y
YWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9BcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAg
ICAgcmV0dXJuICJDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVdp
dGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4
QXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE1IEBAIGVudW0gTW9kZSB7CiAgICAgU3Ry
aW5nLAogICAgIAogICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ug
d2hlcmUgdGhlIGNoZWNrIGlzIG5vbiBzaWRlLWVmZmVjdGluZy4KKyAgICBDb250aWd1b3VzLAor
ICAgIENvbnRpZ3VvdXNUb1RhaWwsCisgICAgQ29udGlndW91c091dE9mQm91bmRzLAorICAgIEFy
cmF5V2l0aENvbnRpZ3VvdXMsCisgICAgQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKICAgICBBcnJheVN0b3JhZ2UsCiAg
ICAgQXJyYXlTdG9yYWdlVG9Ib2xlLAogICAgIFNsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC02OCw4
ICs3NywxNiBAQCBlbnVtIE1vZGUgewogICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHMsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgc2lkZS1lZmZlY3RpbmcuCisgICAgQmxhbmtUb0Nv
bnRpZ3VvdXMsCiAgICAgQmxhbmtUb0FycmF5U3RvcmFnZSwKICAgICBCbGFua1RvU2xvd1B1dEFy
cmF5U3RvcmFnZSwKKyAgICBCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIAor
ICAgIC8vIE1vZGVzIHRoYXQgaW5kaWNhdGUgcG9seW1vcnBoaWMgYXJyYXkgc3RvcmFnZS4gVGhl
c2UgZG9uJ3QgYmVuZWZpdCBmcm9tCisgICAgLy8gYW55IGNoZWNraW5nIG9yIHN0b3JhZ2UgQ1NF
LgorICAgIENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhDb250aWd1b3Vz
T3JBcnJheVN0b3JhZ2UsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2UsCiAgICAgCiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKQEAgLTg5LDYgKzEw
NiwzMiBAQCBlbnVtIE1vZGUgewogLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0
aGVtLgogCiAvLyBGaXJzdDogaGVscGVycyBmb3Igbm9uLXNpZGUtZWZmZWN0aW5nIGNoZWNrcy4K
KyNkZWZpbmUgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91czogICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0NPTlRJR1VP
VVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQ09OVElHVU9V
U19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0NP
TlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cworI2RlZmluZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNU
b1RhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbAorI2RlZmluZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNv
bnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCiAjZGVm
aW5lIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC0xMDYsMzMgKzE0OSw0OCBAQCBlbnVtIE1vZGUgewogI2RlZmluZSBBTExf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCiAjZGVmaW5lIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBBcnJh
eTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBc
CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKLSNk
ZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlCiAjZGVmaW5lIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6ICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlCiAjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUyAgICAgICAgICAgICAgICAgIFwKLSAgICBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVT
OiAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAogICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKIAogLy8gTmV4dDog
aGVscGVycyBmb3Igc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBFRkZFQ1RGVUxfTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgXAotICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9y
YWdlOiAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNf
TU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3Vz
CisjZGVmaW5lIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCi0j
ZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICBcCisjZGVmaW5l
IEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKICAg
ICBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUgU0xPV19Q
VVRfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgIFwKKyNkZWZpbmUgU0xPV19QVVRfRUZG
RUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgXAogICAgIEFycmF5OjpCbGFu
a1RvU2xvd1B1dEFycmF5U3RvcmFnZQorI2RlZmluZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3Vz
T3JBcnJheVN0b3JhZ2UKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzog
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NU
T1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUworCisvLyBGaW5hbGx5OiBoZWxwZXJzIGZvciBwb2x5bW9ycGhpYyBhcnJheSBh
Y2Nlc3Nlcy4KKyNkZWZpbmUgUE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfUE9MWU1PUlBISUNfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUE9MWU1PUlBISUNfRUZGRUNURlVM
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElD
X01PREVTCiAKIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6
QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKIApAQCAtMTQ1LDggKzIwMywxMCBAQCBjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJm
bHkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X01PREVTOgotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNTYsNyArMjE2LDkgQEAgaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6
Ok1vZAogaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7
CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9V
U19NT0RFUzoKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2Niw2
ICsyMjgsOSBAQCBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFyCiBpbmxp
bmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6
CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBBUlJBWV9TVE9S
QUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTE4NCwxOCArMjQ5LDU1
IEBAIGlubGluZSBib29sIGlzU2xvd1B1dEFjY2VzcyhBcnJheTo6TW9kZSAKICAgICB9CiB9CiAK
K2lubGluZSBib29sIG1heVN0b3JlVG9UYWlsKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVT
OgorICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01P
REVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCiBpbmxpbmUgYm9vbCBtYXlTdG9yZVRvSG9sZShBcnJheTo6TW9k
ZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICBjYXNlIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfUE9M
WU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIG1vZGVJc1BvbHltb3Jw
aGljKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBB
TExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKK2lubGluZSBib29sIHBvbHltb3Jw
aGljSW5jbHVkZXNDb250aWd1b3VzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0
b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlN
b2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKQEAgLTIwNCw2ICszMDYsNyBAQCBpbmxpbmUgYm9vbCBj
YW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFyCiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogog
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAg
IGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDksNyArMzUyLDExIEBAIGlubGlu
ZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW8KICAgICBjYXNlIEFycmF5OjpVbnBy
b2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBOT05f
QVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6
CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTks
NyArMzY2LDggQEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogaW5s
aW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQXJyYXk6Ok1vZGUgbW9kZSkKIHsK
ICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CiAgICAgY2FzZSBBcnJheTo6
VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CkBAIC0yNzMsNyArMzgxLDcg
QEAgaW5saW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQQogaW5saW5lIGJvb2wg
aXNFZmZlY3RmdWwoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
NCw2ICsxNTc0LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwog
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFy
cmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSkpOwpAQCAtMTU5Nyw2ICsxNTk5LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDApKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoK
ICAgICAgICAgICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMzU5LDkgKzM2MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3Ry
dWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBwcm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAg
ICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZhbC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5u
b3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3RpbmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSArMTIyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlT
cGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Cisg
ICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihj
aGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2Rl
SW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9k
ZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5j
aGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpOworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5
TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9O
b2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAg
ICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEzNywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsK
KyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSwgMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAg
Ymxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcg
KzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5w
cmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihj
aGlsZDEsIDMpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxk
MiwgMyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wgKCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9
IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRl
eCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRleCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjayko
QXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUp
CiAgICAgewogICAgICAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAg
ICAgIAogICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0
ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNv
ZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQo
aW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAg
ICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1v
ZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAgICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2Ug
YmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5y
ZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2UgaXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCAr
NDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwg
c2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRp
b24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0Fy
cmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxk
SWR4KQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3Jl
Rml4cG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAg
IHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OiB7CiAgICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQ
dHItPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAg
ICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUg
KzQzMywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1f
aW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJy
YXlNb2RlKCkpKQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
KyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5v
ZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0
ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpKTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQorICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZ
TU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgp
ID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5j
b2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGluZGV4LmluZGV4VW5jaGVja2VkKCkpOworICAgICAg
ICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0gfQogICAgIH0KICAgICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYg
ZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2gg
KG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAg
ICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJS
QVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElD
X01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
MzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVj
dG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsK
LSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5
LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcx
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBhcnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTYwMSw2ICs1OTcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXkt
PnBvcChleGVjKSk7CiB9CiAgICAgICAgIAorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgCisgICAgYXJyYXktPmJ1dHRlcmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXkt
PmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgoKSArIDEpOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7Cit9CisgICAgICAgIAogRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzMDksNiArMTMxNSwxNCBAQCBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIAorICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMo
Z2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsx
MzMxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IGludDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERh
dGEsIGV4ZWMpOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVJbmRleGVkU3RvcmFnZShnbG9i
YWxEYXRhKSk7Cit9CisKIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMo
aW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6
ZV90LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLXR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdEkpKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0
YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFt
ZSosIGludDMyX3QpOwpAQCAtMTEwLDYgKzExMCw3IEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
c2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VP
WikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7
CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0
YXRlKiwgc2l6ZV90KTsKIApAQCAtMTQ4LDYgKzE0OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW8KIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpT
QXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVj
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwog
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBX
VEZfSU5URVJOQUw7CkBAIC0xOTIsNyArMTk0LDkgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25BbGxvY2F0ZVBybwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJv
cGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdU
Rl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRl
cmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBu
ZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CitjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2Vk
IHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3
aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0
IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Niw3ICsyNTYsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBzdHViSml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSkpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250aWd1b3VzIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSkpKTsKICAgICAgICAgCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQ1LDYgKzIw
NDUsMTEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9
CiB9CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJl
ZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxv
YWRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCByZXN1bHRUYWdSZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5v
ZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKQoreworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAKKyAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHJlc3VsdFRhZ1JlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
aG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmIG5vZGUs
IEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZh
bHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBpZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9k
ZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgcHJvcGVydHlSZWcpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZyk7CisKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1f
aml0LnN0b3JlMzIodmFsdWVUYWdSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIG1faml0LnN0b3JlMzIodmFsdWVQ
YXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgCisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJy
YXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOworICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywg
R1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlVGFnUmVn
LCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9
IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2Rl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRp
bmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBp
ZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNv
dW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBK
SVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28g
dGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcuCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFj
Y2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5n
ZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZl
cnQKKyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qg
d29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8v
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUg
Z3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVu
Z3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVs
b3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuZ3Ro
RG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5vdEhv
bGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1
ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wKCk7CkBAIC0yNTY1LDYgKzI2NzIsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3By
KCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3Vs
dFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJ
R1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0g
cmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUNvbnRp
Z3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI1ODcsNiArMjc0Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwpAQCAtMjYyNCw2ICsyNzgxLDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBy
ZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
c3VsdFRhZ1JlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
VGFnUmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0VGFnUmVnKTsK
KyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5
TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0VGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNv
bXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
c3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAg
ICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChm
YWxsVGhyb3VnaCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdS
ZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzE0
LDYgKzI5MjEsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgor
ICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVQYXlsb2FkUmVnID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFs
dWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
ID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVU
YWdSZWcsIHZhbHVlUGF5bG9hZFJlZyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAg
ICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAg
ICAgICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93
Q2FzZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFs
dWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIGNoaWxkMyk7CkBAIC0yNzQzLDYwICsyOTk5LDc5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mobm9k
ZS5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBp
ZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAgICAgICAgaWYgKCFtYXlTdG9yZVRvSG9s
ZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBi
ZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKLSAgICAg
ICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0
aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAgICAgICAgICAgLy8gcHJvZmlsaW5nLgot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6
ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhp
cyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBo
YXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2pp
dC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Un
cmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVw
ZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVn
LCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKTsKIAogICAgICAgICAgICAgYmFzZS51c2Uo
KTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICAgICAgdmFsdWUudXNlKCk7
CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1Jl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0g
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoaXNIb2xlVmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNs
b3dDYXNlcy5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2
YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgQVNTRVJUKG5vZGUub3Ao
KSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVRhZ1JlZyA9IHZhbHVlLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUGF5
bG9hZFJlZyA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdG9y
YWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdG9yYWdlUmVn
KTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFy
cmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVD
b250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBzdG9yYWdlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFn
ZVJlZyk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9y
YWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
VGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKworICAg
ICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAg
ICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgZGVjaXNpb24g
b2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUgc2hvdWxkIGJlIG1hZGUKKyAg
ICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSwgbm90IHRoZSBtYWNo
aW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAg
IE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9h
ZFJlZykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjkxOSwyNSArMzE5NCw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0z
MigweDdmZmZmZmZlKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLAorICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQUikpOworICAgICAgICAK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAK
KyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIs
IFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBz
dG9yYWdlR1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBKU1ZhbHVlUmVncyhz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
UiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3Jh
Z2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBi
YXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yOTQ4LDQ2ICszMjUzLDg4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZh
bHVlVGFnKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVQYXlsb2FkKHRoaXMpOwot
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gdmFsdWVUYWcuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2
YWx1ZVBheWxvYWQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdw
cigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVUYWdHUFIpOworICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZVRhZ0dQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlVGFnR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksCisgICAgICAgICAgICAgICAgdmFs
dWVUYWdHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAg
ICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAor
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZp
bmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBh
eWxvYWRHUFIpLCBiYXNlR1BSKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3Rv
cmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0g
c3RvcmFnZUxlbmd0aC5ncHIoKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzZXRVbmRlZmluZWRDYXNlczsKLSAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQ
UikpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2Vz
OworICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKLSAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dD
YXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgdmFsdWVUYWdHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWVQYXlsb2FkR1BS
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
c3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKIAotICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKSk7CisgICAgICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFn
R1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwogCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAg
ICAgc2xvd1BhdGhNb3ZlKAotICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlz
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmlu
ZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMs
CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRl
ZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXls
b2FkR1BSKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3Bl
cmF0aW9uQXJyYXlQb3AsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLAorICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOwog
Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksMTAgKzIxMDks
MTExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9CiB9
CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRp
Z3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVnKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdFJlZykpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpLCByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpOworICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChvdXRPZkJvdW5kcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4g
c2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1w
UmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBp
ZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNB
Y2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgc2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcsIHRlbXBSZWcpOworICAg
ICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgICAgIGlu
Qm91bmRzLmxpbmsoJm1faml0KTsKKyAgICB9CisKKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgCisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mo
YXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOwor
ICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJl
ZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVn
LCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBub2RlLmFy
cmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
YmV5b25kQXJyYXlCb3VuZHMpOworICAgIGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
ZXlvbmRBcnJheUJvdW5kcyk7CisKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEg
aG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgaWYgKCFtYXlT
dG9yZVRvSG9sZShhcnJheU1vZGUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdW5jb3VudGFibGUg
YmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUgYmFzZWxpbmUgSklUCisgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKKyAgICAgICAgLy8gcHJvZmlsaW5nLgorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRp
bWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0CisgICAgICAgICAgICAvLyB0aGUg
YWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25s
eSBoYXBwZW5zIGlmIHdlJ3JlCisgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0
aW1lLgorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0lu
VmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJl
ZywgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRl
LmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICBub3RIb2xlVmFsdWUubGluaygmbV9q
aXQpOworICAgIH0KKyAgICAKKyAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5Lgor
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKLQorICAgIAogICAgIHN3aXRjaCAob3Ap
IHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgIGluaXRDb25zdGFudEluZm8obV9jb21w
aWxlSW5kZXgpOwpAQCAtMjU5NSw2ICsyNjk2LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENPTlRJ
R1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VP
VVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7
CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5v
ZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFs
QXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMo
KSk7CkBAIC0yNjE1LDYgKzI3NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE9V
VF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTI2MjcsMjEgKzI3NzQsNjUgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9S
UEhJQ19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBy
ZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSk7Ci0K
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoaG9sZSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2Vz
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRp
Z3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91
Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3Bl
cnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJy
YXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJy
YXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJv
dWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOwogICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6CkBAIC0yNzM1LDggKzI5MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Cisg
ICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI3NTYsNTkgKzI5NDcsNzYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0cikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25k
QXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGlzSW5Cb3Vu
ZHNBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLQot
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5
TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2Ug
aWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAgICAgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1
ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQg
dG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0
IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgIGlzSG9sZVZh
bHVlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7
IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90
TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGls
ZUNvbnRpZ3VvdXNQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywg
cHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpOworCisgICAg
ICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAg
ICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3By
KCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9y
YXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUpOworCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21w
aWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKwog
ICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwotCi0gICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgICAgIGlmICghaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJl
eW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFy
cmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaXNIb2xlVmFs
dWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywKQEAgLTI4MjAsNiArMzAyOCw2MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0
ZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91
Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wb3JhcnlSZWcpOworICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBvcmFyeVJlZywgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAgICBpZiAocG9s
eW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBk
b25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxU
aHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRl
bXBvcmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVt
cG9yYXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJ
bmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFs
KG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9y
YXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2gu
aXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7CisKKyAgICAgICAgICAgIGJhc2UudXNl
KCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgp
OworCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGRlY2lzaW9uIG9mIHdoZXRoZXIgb3Igbm90
IHdlJ3JlIGluIHN0cmljdCBtb2RlIHNob3VsZCBiZSBtYWRlCisgICAgICAgICAgICAvLyBiYXNl
ZCBvbiB0aGUgaW5saW5lIGNhbGwgZnJhbWUsIG5vdCB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLgor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAg
ICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTI5
NzMsMjYgKzMyMzgsNTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChu
b2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczog
eworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBi
aXphcnJlIGxlbmd0aHMuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
LCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAg
ICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJ
bW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAg
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKLSAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAg
ICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQ
Uik7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
QXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKLSAgICAgICAgICAgICAgICB2
YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTMwMDIsNDEgKzMyOTUsNzcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgdmFsdWUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRo
aXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9
IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIpLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworCisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAg
ICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSks
IHZhbHVlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlz
LCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHZhbHVlR1BSLCBiYXNlR1BSKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwotICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
dG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB1bmRlZmlu
ZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZh
bHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAK
LSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAg
ICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2Fz
ZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKICAgICAgICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFs
dWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKIAotICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0zMjEwLDggKzM1MzksMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHNpemVHUFIpOwotICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKTsKKyAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUo
KSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgIGJpZ0xlbmd0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFy
cmF5U3RvcmFnZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDQxIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOworICAgICAgICAKKyAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
QVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1f
aml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1faml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHR1
cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4gQnV0IHdlIGN1cnJlbnRseSBoYXZlIG5vIGV2aWRl
bmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgc28gd291bGQgYmUgcHJvZml0YWJsZSwgbm9yIGRv
IEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRoZSBwcmVzZW50IHRlc3QKKyAgICAgICAgLy8gY292
ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgTk9OX0FS
UkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCkBAIC0zNTIsNiArMzg3LDI5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIp
OworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJh
bmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBk
b2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdp
dGggdGhlIHByZXNlbnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBh
dGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAg
ICAgICAgICAgICAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUo
KSkgPyBIYXNDb250aWd1b3VzIDogMCkKKyAgICAgICAgICAgICAgICAgICAgfCAocG9seW1vcnBo
aWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSA/IEhhc0FycmF5U3RvcmFn
ZSA6IDApKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAg
ICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmQXJndW1lbnRzOjpzX2luZm87CiAgICAgICAgIGJyZWFr
OwpAQCAtMzkwLDcyICs0NDgsMTA4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5v
ZGUmIG5vZGUKICAgICBBU1NFUlQoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAKKyAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAg
CiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVj
dHVyZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQ
UlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGln
dW91czoKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAg
ICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sg
PSBIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFz
ayA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBHUFJUZW1wb3Jhcnkgc3Ry
dWN0dXJlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyBz
dHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMg
bmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgSW5kZXhpbmdU
eXBlIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0KLSAgICAgICAgICAgIGlzU2xvd1B1dEFjY2Vz
cyhub2RlLmFycmF5TW9kZSgpKSA/IChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSA6IEhhc0FycmF5U3RvcmFnZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKKyAgICBtX2pp
dC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAvLyBXZSBj
YW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9y
YWdlLgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVz
dDgoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5
cGVNYXNrKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIp
OwogICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICAvLyBO
ZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nl
c3Nlcy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4K
KyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8gSWYgd2UncmUgYWxsZWdl
ZGx5IGNyZWF0aW5nIGNvbnRpZ3VvdXMgc3RvcmFnZSBhbmQgdGhlIGluZGV4IGlzIGJvZ3VzLCB0
aGVuCisgICAgLy8ganVzdCBkb24ndC4KKyAgICBpZiAobm9kZS5hcnJheU1vZGUoKSA9PSBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXMpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIs
IFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKSk7CisgICAgfQorICAg
IAorICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBp
bmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAorICAgIC8vIHRoZW4gdGhpcyBtb2RlIHdvbid0
IHdvcmsuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSkpOwogICAgICAgICAK
LSAgICAgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgLy8gTm93IGNhbGwg
b3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyh0ZW1wR1BSKTsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNl
IEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25FbnN1cmVDb250aWd1b3VzLCB0ZW1wR1BSLCBiYXNlUmVnKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpCbGFu
a1RvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcpOwotICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHRlbXBHUFIpOwotCi0gICAgICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVs
b2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQot
ICAgICAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8g
ZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZwotICAgICAgICAvLyBhYm91dCBhIGxvYWQu
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUga2lu
ZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KLSAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwg
cmVzdWx0IGluIHRoZSAKLSAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRp
bmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgotICAgICAgICAvLyBU
aGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJl
ZEluZGV4aW5nVHlwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKLSAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwotICAgIH0KKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJy
YXlTdG9yYWdlOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZywgcHJvcGVydHlSZWcpOworICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnModGVtcEdQUik7CisKKyAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUg
c3RydWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKKyAgICAvLyB0
ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8gc28uIEVpdGhl
ciB3YXkgd2UncmUgdGFsa2luZworICAgIC8vIGFib3V0IGEgbG9hZC4KKyAgICBtX2ppdC5sb2Fk
UHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisgICAgLy8gRmluYWxs
eSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3
YW50ZWQgdG8gZ2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFja3dhcmRzIHNwZWN1
bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgCisgICAgLy8gYnl0ZWNvZGUg
b3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4
ZWN1dGVkLgorICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3Qg
dXNlci12aXNpYmxlLgorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhp
bmdUeXBlTWFzaykpKTsKKyAgICAgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgc3Rv
cmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTMyMDUsMTIgKzMy
OTksMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0
b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsK
LSAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgIGNhc2UgQVJS
QVlfV0lUSF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgc3RvcmFnZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBAIC0zMzk5LDYg
KzM1MDQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAg
IHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAorR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFy
eSYgdGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgaWYgKCFwdXRCeVZh
bFdpbGxOZWVkRXh0cmFSZWdpc3RlcihhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gSW52YWxp
ZEdQUlJlZzsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVhbFRlbXBvcmFyeSh0aGlzKTsKKyAg
ICB0ZW1wb3JhcnkuYWRvcHQocmVhbFRlbXBvcmFyeSk7CisgICAgcmV0dXJuIHRlbXBvcmFyeS5n
cHIoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKK2NsYXNzIEdQUlRlbXBvcmFyeTsKIGNsYXNzIEpTVmFsdWVPcGVyYW5k
OwogY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAgLTEx
NjYsNiArMTE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRp
b25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBz
aXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9i
amVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIo
c2l6ZSkpOwpAQCAtMTIxOCwxMSArMTIyNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMTQ2OCw2ICsxNDc5LDExIEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJn
MikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIGludDMyX3QgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9s
ZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNTMxLDExICsxNTQ3LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMjE0OSw2ICsyMTcwLDUyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxl
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZh
bChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBj
b21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyNlbHNl
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwo
Tm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdl
UmVnLCBHUFJSZWcgcmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2Rl
JiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcs
IEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKTsKKyNlbmRpZgor
ICAgIAorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAg
Ly8gRm9yIEFycmF5U3RvcmFnZSwgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIHN0b3JlcyB0byBo
b2xlcyBleGNlcHQgaWYKKyAgICAgICAgLy8gd2UncmUgaW4gU2xvd1B1dCBtb2RlLgorICAgICAg
ICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgLy8gRm9yIENvbnRpZ3VvdXMsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBh
bnkgYWNjZXNzIHRoYXQgbWF5IHN0b3JlCisgICAgICAgIC8vIHRvIHRoZSB0YWlsLgorICAgICAg
ICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdV
T1VTX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgLy8gQWxsIHBvbHltb3JwaGljIG1vZGVzIG5lZWQgYW4gZXh0cmEgcmVnLgorICAgICAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwo
R1BSVGVtcG9yYXJ5JiwgQXJyYXk6Ok1vZGUpOworICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3Rl
ckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBu
b2RlLmFycmF5TW9kZSgpKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiwgR1BSUmVn
IGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2
YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBj
b21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0
ZW1wUmVnKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250
aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcs
IEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxv
YWRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdl
UHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcp
OworI2VuZGlmCisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CiAg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwyNSBAQCBzdGF0aWMgaW5saW5l
IEpTT2JqZWN0KiBjaGVja2VkUmV0dXJuKEpTCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQog
CitjbGFzcyBTYW1wbGluZ1Njb3BlIHsKK3B1YmxpYzoKKyAgICBTYW1wbGluZ1Njb3BlKEludGVy
cHJldGVyKiBpbnRlcnByZXRlcikKKyAgICAgICAgOiBtX2ludGVycHJldGVyKGludGVycHJldGVy
KQorICAgIHsKKyAgICAgICAgaW50ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmcoKTsKKyAgICB9Cisg
ICAgflNhbXBsaW5nU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnByZXRlci0+c3RvcFNh
bXBsaW5nKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKK307CisKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWN1dGFibGUq
IHByb2dyYW0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaikKIHsKKyAg
ICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CisgICAgCiAgICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0
KHRoaXNPYmosIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+
ZXhjZXB0aW9uKTsKQEAgLTExMzcsNiArMTE1NCw4IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJw
cmV0ZXI6OnByZXBhcmVGb3IKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJh
bWVDbG9zdXJlJiBjbG9zdXJlKSAKIHsKKyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUo
dGhpcyk7CisgICAgCiAgICAgQVNTRVJUKCFjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICBpZiAoY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpA
QCAtMTE3Miw2ICsxMTkxLDggQEAgdm9pZCBJbnRlcnByZXRlcjo6ZW5kUmVwZWF0Q2FsbChDYWxs
RnJhbQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFs
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNjb3Bl
LCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpCiB7CisgICAgU2FtcGxpbmdTY29wZSBzYW1wbGlu
Z1Njb3BlKHRoaXMpOworICAgIAogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzVmFs
dWUsIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhjZXB0
aW9uKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVz
eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMDMxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAwLDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7
CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUlu
Zm9JbmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC03Mzgs
NiArNzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAg
ICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29kZUJs
b2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJsb2Nr
LT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUo
KTsgKytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9j
YXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tp
XS5iYWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0ID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRvbmVUYXJn
ZXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRhcmdldCk7
CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsKKyAgICAg
ICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisgICAg
ICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAgICAg
ICAgICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0u
YXJyYXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJhZFR5cGVK
dW1wLCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihy
ZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVCbG9jay0+
c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51
bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1
ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxhdGlv
bkluZm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0KQorICAgICAgICAgICAgOiBieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5
cGVKdW1wKQorICAgICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAgICAg
LCBkb25lVGFyZ2V0KGRvbmVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0OworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIHJldHVybkFkZHJlc3M7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhl
cjsKQEAgLTM0OCw2ICszNjcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVy
ZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJl
Y3QpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0
QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGppdChnbG9iYWxE
YXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAg
eworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAg
ICAgICAgIHsKQEAgLTM5Nyw2ICs0MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNo
YWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVy
ZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRy
ZXNzUHRyLCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJldHVybkFkZHJlc3NQ
dHIsIGJvb2wgZGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgSklUQXJyYXlNb2RlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CkBA
IC00NTIsNiArNDg4LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lz
dGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGlu
Z1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9m
aWxlKik7CisgICAgICAgIAorICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEs
IGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGV4aW5nIHR5cGUuCisgICAgICAg
IC8vIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZCB6ZXJvIGV4dGVuZGVkLiBCYXNlIGlzIGNl
bGwgY2hlY2tlZC4KKyAgICAgICAgLy8gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuIFJl
dHVybnMgdGhlIHNsb3cgY2FzZXMuIEZhbGwtdGhyb3VnaAorICAgICAgICAvLyBjYXNlIGNvbnRh
aW5zIHJlc3VsdCBpbiByZWdUMCwgYW5kIGl0IGlzIG5vdCB5ZXQgcHJvZmlsZWQuCisgICAgICAg
IEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFp
bnMgaW5kZWNpbmcgdHlwZS4KKyAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5
ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKKyAgICAgICAgLy8gemVyby1l
eHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2Zp
bGVkLgorICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgorICAgICAgICBKdW1wTGlz
dCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogCiAgICAgICAgIGVudW0gRmluYWxPYmpl
Y3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCkBAIC04NzAsNiArOTIyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwog
ICAgICAgICBWZWN0b3I8TGFiZWw+IG1fbGFiZWxzOwogICAgICAgICBWZWN0b3I8UHJvcGVydHlT
dHViQ29tcGlsYXRpb25JbmZvPiBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvOworICAg
ICAgICBWZWN0b3I8QnlWYWxDb21waWxhdGlvbkluZm8+IG1fYnlWYWxDb21waWxhdGlvbkluZm87
CiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbENvbXBp
bGF0aW9uSW5mbz4gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8
SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwpAQCAtODc5LDYgKzkzMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIHVu
c2lnbmVkIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1bnNpZ25l
ZCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9nbG9iYWxSZXNv
bHZlSW5mb0luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5mb0luZGV4OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0NywyMyArNDQ3LDIyIEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2Nh
dGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lz
dGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoID0gc3RkOjptYXgobGVuZ3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0g
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGlu
aXRpYWxMZW5ndGgpKTsKKyAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVu
Z3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIGluaXRpYWxMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKworICAgIGxvYWRQdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNoKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsKIAogICAgIC8vIFdlIGFsbG9j
YXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVj
dGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJheSBpbml0aWFsaXphdGlv
bi4KICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJ
bmRleGluZ0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNl
bGwgZm9yIHRoZSBhcnJheS4KLSAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CiAgICAgZW1pdEFsbG9jYXRl
QmFzaWNKU09iamVjdDxKU0FycmF5LCBNYXJrZWRCbG9jazo6Tm9uZT4oc2NyYXRjaCwgY2VsbFJl
c3VsdCwgc3RvcmFnZVB0cik7CiAKLSAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZv
IGluIHRoZSBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9y
ZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpu
dW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVu
Z3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpzcGFy
c2VNYXBPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4g
dGhlIGluZGV4aW5nIGhlYWRlci4KKyAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Mo
c3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
c3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXds
eSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgogICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFk
ZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CkBAIC00NzIs
MTIgKzQ3MSwxMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVz
UmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAg
c3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Cisg
ICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAjZWxzZQogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkp
KTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdp
c3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZih1aW50MzJfdCkpLCBzdG9yYWdl
UHRyKTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0
ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC01NjEsMTAgKzU2
MCwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGCiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9I
b2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXco
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJy
YXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJh
eU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhwcm9m
aWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwor
ICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YQogICAgIGVtaXRTdG9yZSh1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzKSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKICAgICBza2lw
QXJndW1lbnRzQ3JlYXRpb24ubGluayh0aGlzKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYXJn
dW1lbnRzKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSk7CiAgICAgc3R1YkNh
bGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY1LDcgKzE1
NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRz
KSk7CiAgICAgCiAgICAgc2tpcEFyZ3VtZW50c0NyZWF0aW9uLmxpbmsodGhpcyk7Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOworICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpOwogICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KGFyZ3VtZW50cywgcmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGlu
Zyhkc3QpOwpAQCAtMTY2MSw3ICsxNjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkp
IHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1l
KCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTE2ODAsOCArMTY4MSwxMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFs
bG9jYXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9w
ZXIgc3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGlu
dCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3Bp
ZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQorICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6aXNP
dmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IobGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBXZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxs
LgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NCwyNyArMjA0LDc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
IHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVu
c2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGU7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJl
Z1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmls
ZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDEs
IHJlZ1QzLCBwcm9maWxlKTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9k
ZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6
CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCi0gICAg
bG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVn
VDApOyAvLyBwYXlsb2FkCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICBhZGRTbG93Q2FzZShi
YWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAorICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEp1bXAgcmVzdWx0T0sg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7Cisj
ZW5kaWYKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdU
SChvcF9nZXRfYnlfdmFsKSwgZHN0LCByZWdUMSwgcmVnVDApOworICAgIAorICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZz
ZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRD
b250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQor
eworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOwor
ICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworICAgIAorICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFn
CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZAor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwog
fQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsK
KyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgCisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2Fk
MzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisgICAgCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIHVuc2lnbmVkIGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0yNDgsMTAgKzI5OSwxNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBlbXB0eSB2YWx1ZQogICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAK
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJv
cGVydHkpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViQ2Fs
bC5jYWxsKGRzdCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwor
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CiB9CkBAIC0yNjAsMjAgKzMxNyw4MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKEluc3RydWN0aW9uCiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIHByb2ZpbGUpOworICAgIAorICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGln
dW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJy
YXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAg
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
bV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQogCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0
MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIs
IEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
IAorICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAKKyAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywg
QnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgIAorICAgIGVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBqdW1w
KCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywg
VW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OwogICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgCisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCiAgICAgSnVt
cCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSk7CiAgICAgCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0y
ODMsNyArNDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgog
ICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVn
VDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7
CiAgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKICAgICAKQEAgLTI5
Miw2ICs0MTEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgog
ICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGVuZC5saW5r
KHRoaXMpOworICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwg
cmVnVDMsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMzAzLDEzICs0MjYsMTkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
aW4gdmVjdG9yIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRz
CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIEpJVFN0dWJD
YWxsIHN0dWJQdXRCeVZhbENhbGwodGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQ
dXRCeVZhbENhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRB
cmd1bWVudChwcm9wZXJ0eSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1
ZSk7Ci0gICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1
dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNz
ID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC0xMTEsMTcgKzExMiw2NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwg
cmVnVDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBKSVRBcnJh
eU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250
aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAg
ICAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDApOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICByZXN1bHRPSy5saW5r
KHRoaXMpOworI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUs
IG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWRQdHIo
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNs
b3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxl
UHRyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDYsMTAgKzE5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNo
ZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQogICAgIAorICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSwg
cmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7Ci0gICAg
c3R1YkNhbGwuY2FsbChkc3QpOworICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsK
KworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNs
b3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbElu
c3RydWN0aW9uSW5kZXgrKzsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKIH0KQEAg
LTIyNiw3ICsyODAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9u
CiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJh
eVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJv
cGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2Vy
KHJlZ1QxKTsKQEAgLTIzNCwxMCArMjg4LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBKSVRBcnJheU1vZGUg
bW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3Vz
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5
dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CisKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpOworICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
CisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
b3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVn
VDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1
bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIApA
QCAtMjQ3LDggKzM2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2Zp
bGUpOworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CiAgICAgYnJhbmNoMzIoQmVsb3csIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1Rv
KHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwpAQCAtMjU3LDggKzM3Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24KICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGVuZC5s
aW5rKHRoaXMpOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCBy
ZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yNzAsMTMgKzM4NiwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2
ZWN0b3IgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG91dCBvZiBib3VuZHMKKyAg
ICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBKSVRTdHViQ2FsbCBzdHVi
UHV0QnlWYWxDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfdmFsKTsKICAgICBzdHViUHV0QnlWYWxD
YWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50
KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1
ZSwgcmVnVDIpOwotICAgIHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworICAgIENhbGwgY2FsbCA9
IHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRy
ZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTY1Niw3ICs3NzgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5
TGVuCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJl
Z1QyLCByZWdUMSwgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpOwogICAgIEp1bXAgZmFpbHVyZUNh
c2VzMSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKElzQXJyYXkpKTsK
LSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXND
b250aWd1b3VzKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGgg
ZnJvbSB0aGUgc3RvcmFnZQogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwpAQCAtMTI3NCw2ICsxMzk2LDc2IEBAIGJvb2wgSklU
Ojppc0RpcmVjdFB1dEJ5SWQoU3RydWN0dXJlU3R1YkkKICAgICB9CiB9CiAKK3ZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5i
ZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVC
bG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25M
YWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAg
ICgiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2lu
dCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7Cisg
ICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkg
eworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAg
ICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlv
bkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGlu
ZSBwdXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAg
ICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1
dF9ieV92YWxfZ2VuZXJpYykpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5o
IgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIK
ICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0y
NDE0LDYgKzI0MTUsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwo
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgICAg
ICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9w
ZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoc3Vic2NyaXB0Lmlz
VUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwor
ICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmNhbkdldEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFz
ZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0KKworICAgIGlmIChpc05hbWUo
c3Vic2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nh
c3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7CisK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNh
bGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNh
bGxGcmFtZSwgcHJvcGVydHkpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CkBAIC0yNDIzLDM1ICsyNDQ4LDQ0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1
YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNl
VmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1
YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAg
ICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0
cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7
Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92
YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VW
YWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAg
ICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyB0aGlzIGF0IGFsbC4KKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Cisg
ICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9y
Tm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0
QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5n
VHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorICAgIAor
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWxfZ2VuZXJp
YykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAo
aXNOYW1lKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
Z2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSkt
PnByaXZhdGVOYW1lKCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVy
dHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZy
YW1lKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJv
cGVydHkpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJf
UkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0yNTAyLDIzICsyNTM2LDE0IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3B1dF9ieV92YWwpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
c3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tG
cmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKLQogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUlu
dDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVp
Y2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0
SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI1MjgsMTEgKzI1NTMsNjEgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICBiYXNlVmFs
dWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwo
KSktPnByaXZhdGVOYW1lKCksIHZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFt
ZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhy
ZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4
Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFu
IGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQo
Y2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgfQorfQor
CitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQoreworICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFy
Z3NbMl0uanNWYWx1ZSgpOworCisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNj
cmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemlu
ZyBhdCBhbGwuCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUp
OworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8oKSkgeworICAgICAgICAgICAgLy8gRG9udCBldmVyIHRyeSB0byBvcHRpbWl6ZS4K
KyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5l
cmljKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGlt
aXplLgorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5
dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRp
bWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGlu
Z1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5
TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlKTsKKworICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tG
cmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzJdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9i
eV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7
CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90
ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBs
b2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQx
LCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBi
dGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXog
dDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpIDRbUENdLCB0MQogICAgIGxv
YWRwIDMyW1BDXSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApA
QCAtMTMwNiwxMCArMTMwNiwyMSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkaSAx
MltQQ10sIHQzCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDMsIEludDMyVGFn
LCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1
b3VzCisgICAgCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaSBU
YWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QzLCB0MSwg
OF0sIHQxCisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3Vv
dXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKLSAg
ICBsb2FkaSA0W1BDXSwgdDAKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFn
T2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciAr
IFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKworLm9wR2V0QnlWYWxEb25lOgorICAgIGxv
YWRpIDRbUENdLCB0MAogICAgIGJpZXEgdDIsIEVtcHR5VmFsdWVUYWcsIC5vcEdldEJ5VmFsU2xv
dwogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDAsIDhdCiAgICAgc3RvcmVpIHQxLCBQ
YXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCkBAIC0xMzgzLDI5ICsxMzk0LDUyIEBAIF9sbGludF9v
cF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAg
IGxvYWRwIDE2W1BDXSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6
IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdwogICAgIGxvYWRpIDhbUENdLCB0
MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQwLCBJbnQzMlRhZywgdDIsIC5v
cFB1dEJ5VmFsU2xvdykKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgSW50
MzJUYWcsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJpZXEg
QXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDIsIDhdLCBFbXB0eVZhbHVl
VGFnLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgotICAgIGxvYWRp
IDEyW1BDXSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyh0MywgdDEsIHQzKQot
ICAgIHdyaXRlQmFycmllcih0MSwgdDMpCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1f
dmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0KLSAgICBzdG9yZWkgdDMsIEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MiwgOF0KKyAgICBidGl6IHQyLCBIYXND
b250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQzLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwg
Lm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0
b3JlUmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisgICAgc3RvcmVp
IHQxLCBUYWdPZmZzZXRbdDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0
MCwgdDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZC
b3VuZHM6CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBpZiBWQUxVRV9Q
Uk9GSUxFUgorICAgICAgICBsb2FkcCAxNltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJh
eVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCisgICAgZW5kCisgICAgYWRkaSAxLCB0Mywg
dDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3Jl
UmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJh
eVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
bG93CisgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0Mywg
OF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5
VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGkgMTJbUENdLCB0MgorICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHQyLCB0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyKHQx
LCB0MikKKyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRb
dDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxv
YWRPZmZzZXRbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6
Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0g
ICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAg
ICAgIGxvYWRwIDE2W1BDXSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0MV0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9u
dW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVz
dWx0CisgICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAog
ICAgIGFkZGkgMSwgdDIsIHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZh
bFN0b3JlUmVzdWx0CisgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQK
IAogLm9wUHV0QnlWYWxTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1
dF9ieV92YWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAg
IGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0Miwg
dDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRp
eiB0MiwgKEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwg
dDEKICAgICBsb2FkcCA2NFtQQiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVt0M10sIHQwCkBAIC0xMTQ3LDE0ICsxMTQ3LDI1IEBAIF9sbGludF9vcF9nZXRfYnlf
dmFsOgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0
MywgdDEpCiAgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJy
YXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3Vz
LCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4
aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlW
YWxTbG93CisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4
XSwgdDIKKyAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKyAgICBqbXAgLm9wR2V0QnlWYWxE
b25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0
b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFl
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAg
ICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHog
dDIsIC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3RvcmVwIHQyLCBb
Y2ZyLCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZhbHVlUHJvZmls
ZSh0MiwgdDApCkBAIC0xMjI2LDI5ICsxMjM3LDUxIEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgog
ICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRwIDMyW1BCLCBQ
QywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFz
QXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwg
dDAKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQdXRCeVZhbFNs
b3cpCi0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQw
LCB0MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxvYWRwIEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNs
b3cKLSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlW
YWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4
XSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBidGl6IHQyLCBI
YXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0
MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0
aFt0MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRp
Z3VvdXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEpCisgICAgc3Rv
cmVwIHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGln
dW91c091dE9mQm91bmRzOgorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAg
aWYgVkFMVUVfUFJPRklMRVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAg
ICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQK
KyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlW
YWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAs
IHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0
b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3Rv
cmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEs
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5v
cFB1dEJ5VmFsRW1wdHk6Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZB
TFVFX1BST0ZJTEVSCi0gICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVU
b0hvbGVbdDNdCisgICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3Jl
YiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRk
aSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDIsIHQxCisgICAgYmliIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAorICAgIGFkZGkgMSwgdDMs
IHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Cisg
ICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxT
bG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAg
ZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0
IElzQXJyYXkgPSAxCitjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9y
YWdlID0gOAotY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlID0gMTYKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaQogCiBpbmxpbmUgYm9vbCBpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQogewot
ICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBt
aW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CisgICAgcmV0dXJuIGxlbmd0aCAvIG1p
bkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKIH0KIAogaW5saW5lIEluZGV4aW5nSGVh
ZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsx
OTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tCiAvLyBjdXJy
ZW50Q291bnQpIHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgbGVmdCBvciByaWdodCBhcyBhcHByb3By
aWF0ZTsgaW4gdGhlCiAvLyBjYXNlIG9mIHNoaWZ0IHRoaXMgbXVzdCBiZSByZW1vdmluZyB2YWx1
ZXMsIGluIHRoZSBjYXNlIG9mIHVuc2hpZnQgdGhpcwogLy8gbXVzdCBiZSBpbnRyb2R1Y2luZyBu
ZXcgdmFsdWVzLgotc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1
bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6
U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENv
dW50LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VS
VChjdXJyZW50Q291bnQgPiByZXN1bHRDb3VudCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjdXJy
ZW50Q291bnQgLSByZXN1bHRDb3VudDsKQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjCiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmop
KSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAg
aWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRD
b3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9
PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4o
ZXhlYywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
MzEsNyArMjMyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYwog
ICAgICAgICB9CiAgICAgfQogfQotc3RhdGljIGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJy
ZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0
ZTxKU0FycmF5OjpTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KK3ZvaWQgdW5zaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2ln
bmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBBU1NFUlQocmVzdWx0Q291bnQgPiBjdXJyZW50Q291bnQpOwogICAgIHVuc2lnbmVk
IGNvdW50ID0gcmVzdWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CkBAIC0yNDcsMTAgKzI0OSwxMCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4CiAKICAgICBpZiAoaXNK
U0FycmF5KHRoaXNPYmopKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlz
T2JqKTsKLSAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVu
c2hpZnRDb3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5n
dGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVuc2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhl
YywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAt
LWspIHsKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAg
ICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CkBAIC01MjYsNyArNTI4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBhcnJh
eS0+cHVzaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiAgICAgfQotCisgICAgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU0
NCw2ICs1NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQorICAgIAogICAgIEpTVmFsdWUgbmV3
TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90
PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBuZXdMZW5ndGgpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKQEAgLTYwMCw3ICs2MDMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMs
IDApOwotICAgICAgICBzaGlmdChleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOworICAg
ICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAs
IDEsIDAsIGxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHB1
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKGxlbmd0aCAtIDEpKTsKQEAgLTczMCw3ICs3MzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYykpOwogCkBAIC03NjIsMTEgKzc2NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4
PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxB
cmdzIDwgZGVsZXRlQ291bnQpIHsKLSAgICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgYmVnaW4s
IGRlbGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNB
cnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNv
dW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKLSAgICAg
ICAgdW5zaGlmdChleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxB
cmdzLCBsZW5ndGgpOworICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxp
Y2U+KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxl
bmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIHVu
c2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7
Ci0gICAgICAgIHVuc2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwor
ICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09i
aiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdz
IGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9m
IGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNo
YXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQor
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCk7IH0KQEAgLTcwLDkgKzc5LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50
MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5n
dGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4
aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rv
ckxlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5n
dGgodmFsdWUpOyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRl
eGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFy
cmF5U3RvcmFnZT4oKTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygp
IHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9Cisg
ICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjb250aWd1b3VzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QnV0dGVyZmx5Kj4oY29udGlndW91cyk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhP
ZlByb3BlcnR5U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnJlc2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBB
U1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNl
IHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAg
LTE2Myw3ICsxNjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3Ry
CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFn
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBh
Y2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2Vl
IGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwxMCArNDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNp
dAogCiBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0
b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBjaGFyKiBp
bmRleGluZ1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN0
YXRpYyBjaGFyIHJlc3VsdFsxMjhdOworICAgIGNvbnN0IGNoYXIqIGJhc2ljTmFtZTsKKyAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXMpIHsKKyAgICBjYXNlIE5vbkFycmF5
OgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXkiOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJh
eVdpdGhDb250aWd1b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBiYXNp
Y05hbWUgPSAiQXJyYXlDbGFzcyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRo
Q29udGlndW91czoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5V2l0aENvbnRpZ3VvdXMiOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
YmFzaWNOYW1lID0gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0g
IkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBiYXNpY05hbWUgPSAiVW5rbm93biEiOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgc25wcmludGYoCisgICAgICAgIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCks
ICIlcyVzIiwgYmFzaWNOYW1lLAorICAgICAgICAoaW5kZXhpbmdUeXBlICYgTWF5SGF2ZUluZGV4
ZWRBY2Nlc3NvcnMpID8gInxNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyIgOiAiIik7CisgICAgCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTkgKzMyLDIxIEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5
cGU7CiAKIC8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMu
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7
CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAgICAgICAgICA9IDI7
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgICA9IDE2
OwogCiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUg
dHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9y
IHRoZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFycmF5U3RvcmFn
ZSAgICAgICAgICA9IDMyOyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBoYXZlIGFycmF5
IHN0b3JhZ2UgaW4gdGhlIHBhc3QuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJ
bmRleGVkQWNjZXNzb3JzICA9IDY0Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZl
SW5kZXhlZEFjY2Vzc29ycyAgPSAzMjsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5
cGVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAg
ICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQ29udGln
dW91cyAgICAgICAgICA9IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAgICAgPSBIYXNBcnJheVN0b3JhZ2U7CiBzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgPSBI
YXNTbG93UHV0QXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheUNs
YXNzICAgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsgLy8gSSdkIHdhbnQgdG8gY2FsbCB0
aGlzICJBcnJheSIgYnV0IHRoaXMgd291bGQgbGVhZCB0byBkaXNhc3Ryb3VzIG5hbWVzcGFjZSBw
b2xsdXRpb24uCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aENvbnRpZ3VvdXMg
ICAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQ29udGlndW91czsKIHN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgICAgICAgICA9IElzQXJyYXkgfCBIYXNB
cnJheVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIApAQCAt
NTIsNiArNTQsMTAgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UAog
ICAgIE5vbkFycmF5OiAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlDbGFzcwog
CisjZGVmaW5lIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTIFwKKyAgICBOb25BcnJheVdp
dGhDb250aWd1b3VzOiAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91cwor
CiAjZGVmaW5lIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUyBcCiAgICAg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlCkBAIC03Niw2ICs4MiwxMSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kCiAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKHR5cGUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzQ29udGlndW91cyhJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBI
YXNDb250aWd1b3VzKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3RvcmFnZShJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogewogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUg
JiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpAQCAtODYsNiAr
OTcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlU2xvd1B1dChJbmRlCiAgICAgcmV0
dXJuICEhKGluZGV4aW5nVHlwZSAmIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwogfQogCitjb25z
dCBjaGFyKiBpbmRleGluZ1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUpOworCiAvLyBNYXNrIG9m
IGFsbCBwb3NzaWJsZSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlU
eXBlcyAgICAgICAgICAgID0gMzE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDkgKzMzNyw4IEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTQXJyYXk6OnNldExlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJv
b2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRo
ZSBsZW5ndGggaXMgcmVhZCBvbmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3Vs
ZCBlbnRlciB0aGUgZm9sbG93aW5nICdpZicuCkBAIC00MDIsMTIgKzQwMSw3MSBAQCBib29sIEpT
QXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVu
Z3RoLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBpZiAoIW5ld0xl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVuZ3RoID49
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dF
eGNlcHRpb24sCisgICAgICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVJbml0aWFs
Q29udGlndW91cyhleGVjLT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAg
IGlmIChuZXdMZW5ndGggPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVY
IC8vIFRoaXMgY2FzZSBlbnN1cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KKyAgICAgICAg
ICAgIHx8IChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAg
ICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwgY291bnRFbGVtZW50c0lu
Q29udGlndW91cyhtX2J1dHRlcmZseSkpKSkgeworICAgICAgICAgICAgcmV0dXJuIHNldExlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgbmV3TGVuZ3RoLCB0aHJv
d0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9y
YWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChuZXdMZW5n
dGggPiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGVuc3VyZUNv
bnRpZ3VvdXNMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAgICAgICAg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICBtX2J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sIGFycmF5U3RvcmFnZSgpKTsK
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVu
Z3RoLS0pCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgp
OworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbbGVuZ3RoXS5jbGVhcigpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAtNDMxLDI2ICs0ODksMjgg
QEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIC8vIENhbGwgdGhlIFtb
RGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1
ZS4KLSAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgp
KSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9
Ci0gICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgICAgICBzZXRMZW5ndGgoZXhl
YywgaW5kZXgsIHRydWUpOwotICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0g
Z2V0QXJyYXlMZW5ndGgoKSAtIDE7CisgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQg
aW5keC4KKyAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
Ly8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50
cyBpbmR4IGFuZCB0cnVlLgorICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4
ZWMsIGluZGV4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRl
bGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVu
dHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgIHNldExlbmd0aChleGVjLCBpbmRleCwg
dHJ1ZSk7CisgICAgLy8gUmV0dXJuIGVsZW1lbnQuCisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAK
IC8vIFB1c2ggJiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwg
ZGlmZmVyZW5jZXMuCkBAIC00NjQsNiArNTI0LDI2IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBj
YXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFY
X0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRo
aXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJh
bmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7
CiAgICAgICAgIGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9s
ZExlbmd0aCwgdmFsdWUsIHRydWUpKSB7CkBAIC01MDUsMTggKzU4NSwxNCBAQCB2b2lkIEpTQXJy
YXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogfQogCi1ib29sIEpTQXJyYXk6
OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25l
ZCBjb3VudCkKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UodW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsK
LSAgICBBU1NFUlQoY291bnQgPiAwKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAKICAgICB1bnNp
Z25lZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICBBU1NFUlQoY291bnQgPD0g
b2xkTGVuZ3RoKTsKICAgICAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMgb3Ig
aXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2VuZXJp
YyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKG9sZExlbmd0aCAhPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkpCisgICAg
aWYgKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNl
SW5kZXhpbmdNb2RlKCkgfHwgc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW9sZExlbmd0aCkKQEAg
LTU2NSwxNyArNjQxLDY5IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4
ZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFu
eUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50KQoreworICAgIEFTU0VSVChjb3VudCA+IDApOworICAgIAorICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3Vz
OiB7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKKyAgICAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CisgICAgICAgIAorICAg
ICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNo
aWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCisgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3Qg
aG9ycmlibHkgc2xvdy4KKyAgICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291
bnQpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3VudDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICAvLyBTdG9yaW5nIHRv
IGEgaG9sZSBpcyBmaW5lIHNpbmNlIHdlJ3JlIHN0aWxsIGhhdmluZyBhIGdvb2QgdGltZS4gQnV0
IHJlYWRpbmcKKyAgICAgICAgICAgIC8vIGZyb20gYSBob2xlIGlzIHRvdGFsbHkgbm90IGZpbmUs
IHNpbmNlIHdlIG1pZ2h0IGhhdmUgdG8gcmVhZCBmcm9tIHRoZSBwcm90bworICAgICAgICAgICAg
Ly8gY2hhaW4uCisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2kgKyBjb3VudF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRoIGlzIHRvIGVuc3VyZSB0
aGF0IHdlIGRvbid0IG1ha2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyBtaXN0YWtlIGlu
IHRoZSBmdXR1cmU6IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKCkgY2FuJ3QgZG8gYW55dGhp
bmcKKyAgICAgICAgICAgICAgICAvLyBhYm91dCBob2xlcyAoYXQgbGVhc3QgZm9yIG5vdyksIGJ1
dCBpdCBjYW4gZGV0ZWN0IHRoZW0gcXVpY2tseS4gU28KKyAgICAgICAgICAgICAgICAvLyB3ZSBj
b252ZXJ0IHRvIGFycmF5IHN0b3JhZ2UgYW5kIHRoZW4gYWxsb3cgdGhlIGFycmF5IHN0b3JhZ2Ug
cGF0aCB0bworICAgICAgICAgICAgICAgIC8vIGZpZ3VyZSBpdCBvdXQuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdl
J3JlIGp1c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQg
d2Ugd29uJ3QgaGF2ZSBhIGRlbGV0aW9uCisgICAgICAgICAgICAvLyBiYXJyaWVyLgorICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHYpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZDsgaSA8IG9sZExl
bmd0aDsgKytpKQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVh
cigpOworICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRM
ZW5ndGggLSBjb3VudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uo
c3RhcnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSB1bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBm
YWxsYmFjay4gICAgCi1ib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIEFTU0VS
VChzdGFydEluZGV4IDw9IGxlbmd0aCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMg
aG9sZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0
aGUgZ2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxlbmd0aCAh
PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IHN0b3JhZ2UtPmluU3BhcnNlTW9kZSgp
KQorICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9y
YWdlLT5pblNwYXJzZU1vZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgbW92ZUZyb250
ID0gIXN0YXJ0SW5kZXggfHwgc3RhcnRJbmRleCA8IGxlbmd0aCAvIDI7CkBAIC02MTAsNiArNzM4
LDQ4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
eXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQp
Cit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5Q2xhc3M6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhbmRsZSB0aGlzLiBCdXQgaXQgc2hv
dWxkbid0IGV2ZXIgY29tZSB1cCwgc28gd2Ugd29uJ3QuCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUg
dW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbyBzbworICAgICAgICAvLyBvbmx5IGlmIGl0J3Mg
bm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5ndGggLSBzdGFydEluZGV4ID49
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgCisgICAgICAg
IGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGggKyBj
b3VudCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGkt
LSA+IHN0YXJ0SW5kZXg7KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBz
dGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5n
bG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSAr
IGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBOT1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQg
b2YgdGhlIGFycmF5IHRoYXQgd2Ugc2hpZnRlZCBvdXQKKyAgICAgICAgLy8gb2YuIFRoaXMgaXMg
ZmluZSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gc3RvcmUgb3ZlciB0aGF0IGFy
ZWEsIGFuZAorICAgICAgICAvLyBpbiBjb250aWd1b3VzIG1vZGUgc3RvcmluZyBpbnRvIGEgaG9s
ZSBpcyBndWFyYW50ZWVkIHRvIGJlaGF2ZSBleGFjdGx5IHRoZSBzYW1lCisgICAgICAgIC8vIGFz
IHN0b3Jpbmcgb3ZlciBhbiBleGlzdGluZyBlbGVtZW50LgorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVy
biB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBh
cnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHN0YXRpYyBpbnQgY29tcGFyZU51
bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAgIGRvdWJs
ZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIoKTsKQEAgLTYy
NCw2ICs3OTQsNDUgQEAgc3RhdGljIGludCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQoYwog
ICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKHZhLT5zZWNvbmQsIHZiLT5zZWNvbmQpOwogfQog
Cit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0
TnVtZXJpY1ZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBD
YWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VS
VChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQ29udGlndW91cyB8fCBpbmRleGluZ1R5cGUgPT0g
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQ7CisgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgY29t
cGFjdEZvclNvcnRpbmc8aW5kZXhpbmdUeXBlPigKKyAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkLAorICAgICAgICBuZXdSZWxldmFudExlbmd0aCk7CisgICAgCisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBkYXRhID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKTsKKyAg
ICAKKyAgICBpZiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSAmJiBhcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9v
bCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5ld1JlbGV2YW50TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFkYXRhW2ldLmlzTnVtYmVy
KCkpIHsKKyAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghYWxsVmFsdWVzQXJl
TnVtYmVycykKKyAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEpOworICAgIAorICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdo
aWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAvLyBh
bHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5v
IHVzZXIgdmlzaWJsZQorICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVy
IG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgcXNvcnQoZGF0YSwgbmV3UmVsZXZhbnRM
ZW5ndGgsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFT
b3J0KTsKKyAgICByZXR1cm47Cit9CisKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNv
bnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdN
b2RlKCkpOwpAQCAtNjMyLDExNyArODQxLDEyOSBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmlj
KEV4ZWNTdGF0ZSogZXhlCiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7Ci0g
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHNvcnROdW1lcmljVmVj
dG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFTU0VSVCghc3RvcmFnZS0+
bV9zcGFyc2VNYXApOwotICAgICAgICAKLSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBib29sIGFs
bFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgICAgIHJldHVybiBzb3J0
KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlz
IGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKLSAgICAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJl
IG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAg
ICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJp
bWl0aXZlIHZhbHVlcy4KLSAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKLSAg
ICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHNvcnROdW1l
cmljVmVjdG9yPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEpOwogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNT
dGF0ZSogZXhlYykKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpT
QXJyYXk6OnNvcnRDb21wYWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0aCkKIHsKLSAgICBBU1NFUlQo
IWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwotICAgIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgorICAgIGlmICghcmVsZXZh
bnRMZW5ndGgpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3Jp
cHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1
cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgIC8vIFRoaXMgaXMgYSBjb25zaWRl
cmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhv
dWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgLy8gYnVmZmVyLiBCZXNpZGVz
LCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3Vz
dG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KKyAgICAvLyByYW5kb20gb3Igb3RoZXJ3
aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9u
IGluY29uc2lzdGVudC4KICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFj
dEZvclNvcnRpbmcoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFw
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydGluZyBKYXZh
U2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9u
Y2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAgICAgLy8gVGhpcyBpcyBh
IGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJp
c29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAgICAgLy8gYnVm
ZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmpl
Y3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAgICAgLy8g
cmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcg
Y29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCi0gICAgICAgIAotICAgICAgICBWZWN0b3I8
VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAg
ICAgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgVmVjdG9y
PFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKHJlbGV2YW50TGVuZ3RoKTsKKyAgICBpZiAoIXZhbHVl
cy5iZWdpbigpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1
c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVt
cFNvcnRWZWN0b3IoJnZhbHVlcyk7CiAgICAgICAgIAotICAgICAgICBib29sIGlzU29ydGluZ1By
aW1pdGl2ZVZhbHVlcyA9IHRydWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVCghdmFs
dWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsK
LSAgICAgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2
ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOwotICAgICAgICB9CisgICAgYm9vbCBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVsZXZhbnRMZW5ndGg7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYmVnaW5baV0u
Z2V0KCk7CisgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7CisgICAgICAgIHZh
bHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMg
PSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICB9
CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVl
cyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAg
ICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgLy8gRklYTUU6
IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1
ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBl
eGNlcHRpb24uCiAgICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgdmFsdWVzW2ldLnNlY29u
ZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIHZhbHVlc1tpXS5z
ZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CiAgICAgICAg
IAotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEhlYXA6
OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQg
Ynkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4
IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAgICAgLy8gdGhhbiBPKE4gbG9n
IE4pLgorICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0
IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8o
TikgcmF0aGVyCisgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgogICAgICAgICAKICNpZiBIQVZFKE1F
UkdFU09SVCkKLSAgICAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAg
ICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2Yo
VmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSNlbHNlCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8g
bm90IGJlIGEgc3RhYmxlIHNvcnQuCi0gICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90
IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3Jt
IGEgc3RhYmxlIHNvcnQuCisgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKICAgICAg
ICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgIGVsc2UKKyAgICAgICAg
bWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbHNlCisgICAgLy8gRklY
TUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFi
bGUgc29ydC4KKyAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxl
IHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0Lgor
ICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgorICAgIAorICAg
IC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFu
ZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBlbnN1
cmVDb250aWd1b3VzTGVuZ3RoKGdsb2JhbERhdGEsIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hh
bmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAgICAg
Ly8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFj
dHVhbCB2YWx1ZXMuCi0gICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkgewotICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAg
ICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgICAg
IGJlZ2luID0gYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwor
ICAgICAgICBpZiAoYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpCisg
ICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgYmVnaW5baV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9w
VGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAK
KyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJy
YXlDbGFzczoKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgY2FzZSBBcnJheVdpdGhDb250
aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsK
KyAgICAgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgICAgIGNvbXBhY3RGb3JT
b3J0aW5nPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkLCBuZXdSZWxldmFudExlbmd0aCk7CiAgICAgICAgIAorICAgICAgICBzb3J0
Q29tcGFjdGVkVmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgZXhlYywg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
OworICAgICAgICB1bnNpZ25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICAgICAgY29tcGFjdEZv
clNvcnRpbmc8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPigKKyAgICAgICAgICAgIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFTU0VS
VCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworICAgICAgICAKKyAgICAgICAgc29ydENvbXBhY3Rl
ZFZlY3RvcjxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KAorICAgICAgICAgICAgZXhlYywgc3RvcmFn
ZS0+bV92ZWN0b3IsIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgICAgIApAQCAtODI4LDEwOCArMTA0OSwxMTYgQEAgc3RydWN0IEFWTFRy
ZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIAogICAgIHN0YXRpYyBoYW5kbGUgbnVsbCgpIHsg
cmV0dXJuIDB4N0ZGRkZGRkY7IH0KIH07CiAKLXZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3Qg
Q2FsbERhdGEmIGNhbGxEYXRhKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4K
K3ZvaWQgSlNBcnJheTo6c29ydFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFy
ZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQog
ewogICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgQVNTRVJUKGluZGV4
aW5nVHlwZSA9PSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIAotICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgot
ICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJh
aXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KICAgICAgICAgCi0g
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
aWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0
b051bWJlci4KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMg
Y29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAg
ICAgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgICAgICBBU1NFUlQoYXJy
YXlTdG9yYWdlKCktPmxlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKSk7Ci0gICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+bGVu
Z3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0
aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29v
ZAorICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICBBU1NFUlQobV9idXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSkKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCksIGFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwKTsKLSAgICAgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aDsK
KyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdU
eXBlPigpOworICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGg7CiAgICAg
ICAgIAotICAgICAgICBpZiAoIW5vZGVDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIW5vZGVDb3VudCkKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgQVZMVHJl
ZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0
IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4
ZWMgPSBleGVjOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9
IGNvbXBhcmVGdW5jdGlvbjsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2Fs
bFR5cGUgPSBjYWxsVHlwZTsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2Fs
bERhdGEgPSAmY2FsbERhdGE7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jv
dyhub2RlQ291bnQpOworICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
Y29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOworICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9j
b21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
cy5ncm93KG5vZGVDb3VudCk7CiAgICAgICAgIAotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVKUykKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFk
b3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1
bmN0aW9uKSwgMikpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChl
eGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKICAgICAgICAg
Ci0gICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7Ci0gICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KKyAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkg
eworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rp
b24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9k
aWZpZWQKLSAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVp
bGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rp
b24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9k
aWZpZWQKKyAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGlu
ZyB0aGUgdHJlZSBoZXJlLgogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9
IDA7Ci0gICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgdW5zaWduZWQgbnVt
RGVmaW5lZCA9IDA7CisgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKICAgICAgICAgCi0g
ICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVz
LCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBp
bnRvIHRoZSB0cmVlLgotICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICAgICAgaWYgKG51bURlZmluZWQgPiBhcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0
KCk7Ci0gICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZp
bmVkXS52YWx1ZSA9IHY7Ci0gICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAg
ICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IGFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFs
dWUgdiA9IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIGlm
ICh2KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUg
PSB2OwotICAgICAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAg
ICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KKyAgICAvLyBJ
dGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcg
dW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJl
ZS4KKyAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5l
ZCkgeworICAgICAgICBpZiAobnVtRGVmaW5lZCA+IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8
aW5kZXhpbmdUeXBlPigpW251bURlZmluZWRdLmdldCgpOworICAgICAgICBpZiAoIXYgfHwgdi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICB0cmVlLmluc2VydChu
dW1EZWZpbmVkKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaSA+IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1ZhbHVlIHYgPSBp
bmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLmdldCgpOworICAgICAgICBpZiAodikgewor
ICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVu
ZGVmaW5lZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgICAgIHRy
ZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwotICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKCFhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgIHVu
c2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwog
ICAgICAgICAKLSAgICAgICAgLy8gVGhlIGFycmF5IHNpemUgbWF5IGhhdmUgY2hhbmdlZC4gIEZp
Z3VyZSBvdXQgdGhlIG5ldyBib3VuZHMuCi0gICAgICAgIHVuc2lnbmVkIG5ld2VzdFVzZWRWZWN0
b3JMZW5ndGggPSBtaW4oYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpLCBhcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgIC8vIFRoZSBhcnJheSBzaXplIG1heSBoYXZlIGNoYW5nZWQu
ICBGaWd1cmUgb3V0IHRoZSBuZXcgYm91bmRzLgorICAgIHVuc2lnbmVkIG5ld2VzdFVzZWRWZWN0
b3JMZW5ndGggPSByZWxldmFudExlbmd0aDxpbmRleGluZ1R5cGU+KCk7CiAgICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZCA9IG1pbihtaW4obmV3ZXN0
VXNlZFZlY3Rvckxlbmd0aCwgbnVtRGVmaW5lZCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSkpOwotICAgICAgICB1bnNpZ25lZCB1bmRlZmlu
ZWRFbGVtZW50c1RocmVzaG9sZCA9IG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCBuZXdVc2Vk
VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgdW5zaWduZWQgY2xlYXJFbGVtZW50c1RocmVzaG9sZCA9
IG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCB1c2VkVmVjdG9yTGVuZ3RoKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgotICAgICAg
ICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9y
IGl0ZXI7Ci0gICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKLSAgICAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7ICsraSkgewot
ICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7Ci0gICAgICAgICAg
ICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFB1dCB1bmRlZmluZWQg
dmFsdWVzIGJhY2sgaW4uCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVsZW1lbnRzVG9FeHRy
YWN0VGhyZXNob2xkOyBpIDwgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKLSAgICAg
ICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLQotICAg
ICAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9l
ZCBvdXQuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNo
b2xkOyBpIDwgY2xlYXJFbGVtZW50c1RocmVzaG9sZDsgKytpKQotICAgICAgICAgICAgYXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgdW5zaWduZWQgZWxlbWVudHNUb0V4
dHJhY3RUaHJlc2hvbGQgPSBtaW4obWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG51bURlZmlu
ZWQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXpl
KCkpKTsKKyAgICB1bnNpZ25lZCB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZCA9IG1pbihuZXdl
c3RVc2VkVmVjdG9yTGVuZ3RoLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBj
bGVhckVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIHVzZWRW
ZWN0b3JMZW5ndGgpOworICAgICAgICAKKyAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRv
IG1fc3RvcmFnZS4KKyAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwor
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7ICsraSkg
eworICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAg
ICsraXRlcjsKKyAgICB9CisgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgaSA8IHVuZGVm
aW5lZEVsZW1lbnRzVGhyZXNob2xkOyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGlu
Z1R5cGU+KClbaV0uc2V0VW5kZWZpbmVkKCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQg
dmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7IGkgPCBjbGVhckVsZW1lbnRzVGhyZXNob2xk
OyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uY2xlYXIoKTsK
KyAgICAKKyAgICBpZiAoaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpCisgICAgICAgIGFy
cmF5U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsK
K30KKwordm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJl
RnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCit7
CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsKKyAgICBjYXNlIEFycmF5
V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHNvcnRWZWN0b3I8QXJyYXlXaXRoQ29udGlndW91cz4o
ZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICByZXR1
cm47CiAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgc29ydFZlY3Rv
cjxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MzgsMTEzICsxMTY3LDEyMSBA
QCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgSlNBcnJh
eTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJn
cykKIHsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CisgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAg
IHZlY3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9y
ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAg
IAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdl
LT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKCF2
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVu
Z3RoKCk7ICsraSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAg
IHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAK
KyAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOwogICAgIH0KKyAgICAKKyAgICBmb3Ig
KDsgaSA8IGxlbmd0aCgpOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7
CiB9CiAKIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHVpbnQzMl90IGxlbmd0aCkKIHsKKyAgICB1bnNpZ25lZCBpID0g
MDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICB1bnNpZ25lZCB2ZWN0
b3JFbmQ7CisgICAgCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7CiAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xh
c3M6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1
b3VzOiB7CisgICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAg
ICAgIHZlY3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgICAg
ICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7Ci0gICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICghdikK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1l
bnQoaSwgdi5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChl
eGVjLCBpKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7CisgICAgICAgIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9Cisg
ICAgCisgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgIGlmICghdikKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwogICAg
IH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBjYWxsRnJhbWUt
PnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKLXVuc2lnbmVkIEpTQXJyYXk6OmNv
bXBhY3RGb3JTb3J0aW5nKCkKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2
b2lkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKHVuc2lnbmVkJiBudW1EZWZpbmVkLCB1bnNp
Z25lZCYgbmV3UmVsZXZhbnRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5n
TW9kZSgpKTsKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSk7CiAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewot
ICAgIGNhc2UgQXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgdW5zaWduZWQgbXlSZWxldmFudExlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGlu
ZGV4aW5nVHlwZT4oKTsKKyAgICAKKyAgICBudW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBu
dW1VbmRlZmluZWQgPSAwOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9
IDA7Ci0gICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgZm9yICg7IG51bURl
ZmluZWQgPCBteVJlbGV2YW50TGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgSlNWYWx1
ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsKKyAg
ICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KICAgICAgICAgCi0gICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZp
bmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OwotICAgICAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQr
K10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbXlSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAg
ICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7Cisg
ICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBu
ZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLSAgICAgICAg
Ci0gICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOwotICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIo
KTsKLSAgICAgICAgCi0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bURlZmluZWQ7CiAg
ICAgfQogICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQorICAgIG5ld1JlbGV2YW50TGVuZ3RoID0g
bnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKKyAgICAKKyAgICBpZiAoaGFzQXJyYXlTdG9yYWdl
KGluZGV4aW5nVHlwZSkpCisgICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3UmVs
ZXZhbnRMZW5ndGg7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtp
XS5zZXRVbmRlZmluZWQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdSZWxldmFudExlbmd0
aDsgaSA8IG15UmVsZXZhbnRMZW5ndGg7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4
aW5nVHlwZT4oKVtpXS5jbGVhcigpOwogCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGlu
Z1R5cGUpKQorICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5l
d1JlbGV2YW50TGVuZ3RoOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzEs
OCArNzEsNjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaChFeGVjU3RhdGUq
LCBKU1ZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSBwb3AoRXhlY1N0YXRlKik7CiAKLSAgICAgICAg
Ym9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
IGNvdW50KTsKLSAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpOworICAgICAgICBlbnVtIFNoaWZ0Q291bnRNb2Rl
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBvZiBzaGlmdCBoaW50cyB0aGF0IHdlJ3JlIGRv
aW5nIHF1ZXVlaW5nLiBXaXRoIHRoaXMgYXNzdW1wdGlvbiBpbiBoYW5kLAorICAgICAgICAgICAg
Ly8gd2UgY29udmVydCB0byBBcnJheVN0b3JhZ2UsIHdoaWNoIGhhcyBxdWV1ZSBvcHRpbWl6YXRp
b25zLgorICAgICAgICAgICAgU2hpZnRDb3VudEZvclNoaWZ0LAorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGlzIGZvcm0gb2Ygc2hpZnQgaGludHMgdGhhdCB3ZSdyZSBqdXN0IGRvaW5n
IGNhcmUgYW5kIGZlZWRpbmcgb24gYW4gYXJyYXkgdGhhdAorICAgICAgICAgICAgLy8gaXMgcHJv
YmFibHkgdHlwaWNhbGx5IHVzZWQgZm9yIG9yZGluYXJ5IGFjY2Vzc2VzLiBXaXRoIHRoaXMgYXNz
dW1wdGlvbiBpbiBoYW5kLAorICAgICAgICAgICAgLy8gd2UgdHJ5IHRvIHByZXNlcnZlIHdoYXRl
dmVyIGluZGV4aW5nIHR5cGUgaXQgaGFzIGFscmVhZHkuCisgICAgICAgICAgICBTaGlmdENvdW50
Rm9yU3BsaWNlCisgICAgICAgIH07CisKKyAgICAgICAgYm9vbCBzaGlmdENvdW50Rm9yU2hpZnQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0
YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBzaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGU8U2hpZnRDb3VudE1v
ZGUgc2hpZnRDb3VudE1vZGU+CisgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHNoaWZ0Q291bnRNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNoaWZ0
Q291bnRGb3JTaGlmdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNoaWZ0
KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZv
clNwbGljZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNwbGljZShleGVj
LCBzdGFydEluZGV4LCBjb3VudCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHVuc2hpZnRDb3VudEZvclNoaWZ0
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFs
RGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTcGxpY2Uo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5
cGUoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRl
PFNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgorICAgICAgICBib29sIHVuc2hpZnRDb3Vu
dChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHNoaWZ0Q291bnRNb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIFNoaWZ0Q291bnRGb3JTaGlmdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5z
aGlmdENvdW50Rm9yU2hpZnQoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAg
Y2FzZSBTaGlmdENvdW50Rm9yU3BsaWNlOgorICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0
Q291bnRGb3JTcGxpY2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5
VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKQEAg
LTk0LDE4ICsxNDYsNDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yTnVsbCgpOwogICAgICAgICAg
ICAgaWYgKCFzdG9yYWdlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpOwogICAgICAgICAgICAgcmV0dXJuICFtYXAg
fHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIHNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAgICAgICAgYm9vbCBzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZSh1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlT
dG9yYWdlKik7CiAKLSAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBi
b29sIHdyaXRhYmxlKTsKLQorICAgICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
Z1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3Vu
dCk7CisgICAgICAgIGJvb2wgdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0
YSYsIGJvb2wsIHVuc2lnbmVkKTsKKworICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSosIEpT
VmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
IGNhbGxEYXRhKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGU+CisgICAgICAgIHZvaWQgc29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqLCBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0aCk7CiAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZygpOworICAgICAgICB0
ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRWZWN0
b3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBD
YWxsRGF0YSYpOworCisgICAgICAgIGJvb2wgc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3Rv
cmFnZSopOworICAgICAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wg
d3JpdGFibGUpOworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZT4KKyAgICAgICAgdm9pZCBjb21wYWN0Rm9yU29ydGluZyh1bnNpZ25lZCYgbnVtRGVm
aW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKTsKICAgICB9OwogCisgICAgaW5saW5l
IEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgSW5kZXhpbmdIZWFk
ZXIgaGVhZGVyOworICAgICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHN0ZDo6bWF4KGxlbmd0
aCwgQkFTRV9WRUNUT1JfTEVOKSk7CisgICAgICAgIGhlYWRlci5zZXRQdWJsaWNMZW5ndGgobGVu
Z3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAg
ICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIGhlYWRlciwgaGVhZGVyLnZlY3Rvckxl
bmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCiAgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKICAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKQEAgLTEyMSw3
ICsxOTksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJh
eTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOwor
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aENvbnRpZ3VvdXMpKSB7CisgICAgICAgICAg
ICBidXR0ZXJmbHkgPSBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbExlbmd0aCA8IE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZQorICAgICAgICAgICAgICAgICAgIHx8IChpbml0aWFsTGVuZ3RoICYmIHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0
ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgfQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMjE5LDI2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCog
dGVtcDsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1
dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0
b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAg
ICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXko
aW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgPSAwOwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAg
ICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIDApOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxM
ZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAg
ICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSksICZ0ZW1wKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFs
TGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID0gMDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzEsNyArMjMxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwog
ICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAK
ICAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5
UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OwotICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNB
cnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVBy
b3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgbV9hcnJheVN0cnVj
dHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJh
eVdpdGhDb250aWd1b3VzKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKSk7CiAgICAgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZSkpOwogICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCkBA
IC0zNTcsNyArMzU4LDcgQEAgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6T2JqZWN0
cwogaW5saW5lIGJvb2wgaGFzQnJva2VuSW5kZXhpbmcoSlNPYmplY3QqIG9iamVjdCkKIHsKICAg
ICAvLyBUaGlzIHdpbGwgY2hhbmdlIGlmIHdlIGhhdmUgbW9yZSBpbmRleGluZyB0eXBlcy4KLSAg
ICByZXR1cm4gISEob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJh
eVN0b3JhZ2UpOworICAgIHJldHVybiAhIShvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250aWd1b3VzKSk7CiB9CiAKIHZvaWQgT2Jq
ZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCkBA
IC00MTAsNiArNDExLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xv
YgogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBKU0FycmF5IGFsbG9jYXRpb25zIHRoYXQgbG9h
ZCB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZyb20KICAgICAvLyB0aGlzIG9iamVjdCBub3cg
bG9hZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMgU2xvd1B1dC4KICAgICBtX2FycmF5U3RydWN0dXJl
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7
CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRo
aXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsKICAgICAKICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0
byB0aGUgc2xvdyBraW5kIG9mCiAgICAgLy8gaW5kZXhlZCBzdG9yYWdlLgpAQCAtNDg1LDYgKzQ4
Nyw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1lU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FyZ3VtZW50c1N0cnVjdHVyZSk7CiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk7CiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0KTsK
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9ib29sZWFuT2JqZWN0U3RydWN0dXJl
KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsYmFja0NvbnN0cnVjdG9y
U3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25h
bWVTY29wZVN0cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcmd1
bWVudHNTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlT
dHJ1Y3R1cmU7IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQg
YXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgLy8gVGhp
cyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRl
Y2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZTsKQEAgLTI2Nyw3ICsyNjgsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBuYW1lU2NvcGVTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX25hbWVTY29wZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBT
dHJ1Y3R1cmUqIGFyZ3VtZW50c1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRz
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX2FycmF5U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVy
ZSogYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJh
eVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UuZ2V0KCk7IH0KICAgICAgICAgdm9pZCogYWRkcmVz
c09mQXJyYXlTdHJ1Y3R1cmUoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZTsgfQorICAgICAg
ICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSB7IHJldHVy
biAmbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IH0KICAgICAgICAgU3RydWN0dXJl
KiBib29sZWFuT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9ib29sZWFuT2JqZWN0
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3Rv
clN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVy
ZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAg
LTQ3OSw3ICs0ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBj
b25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApCiAgICAgewotICAgICAgICByZXR1
cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA/IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkg
OiBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOwogICAgIH0K
IAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwy
NCArMTMxLDQwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAg
ICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBj
b3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlOworICAgICAgICAgICAgc2l6ZV90IGNvdW50
OworICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1
b3VzKCk7CisgICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGln
dW91cygpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGNv
dW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsK
LSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOyBjb3VudC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1
cnJlbnRTb3VyY2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
dXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQogICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+
c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwpAQCAtMTU4LDYg
KzE3NCw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAg
ICAgCiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KGJ1dHRlcmZseS0+Y29udGlndW91cygpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKTsKICAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcCkKQEAgLTIzNCw2ICsyNTMsMjAgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICBicmVhazsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5OworICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKQEAgLTM1MSw2
ICszODQsMTYgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAg
IGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAg
CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbcHJvcGVydHlOYW1lXS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPj0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKHByb3BlcnR5TmFtZSArIDEpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC00NDMs
NiArNDg2LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKIHZv
aWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBOT1RF
OiB0aGlzIGlzIGhvcnJpYmx5IGluZWZmaWNpZW50LCBhcyBpdCB3aWxsIHBlcmZvcm0gdHdvIGNv
bnZlcnNpb25zLiBXZSBjb3VsZCBvcHRpbWl6ZQorICAgICAgICAvLyB0aGlzIGNhc2UgaWYgd2Ug
ZXZlciBjYXJlZC4KKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDY1LDYgKzUxMywyNCBAQCB2
b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjCiAgICAgZ2xvYmFsT2JqZWN0
KCktPmhhdmVBQmFkVGltZShnbG9iYWxEYXRhKTsKIH0KIAorV3JpdGVCYXJyaWVyPFVua25vd24+
KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9J
TkRFWCk7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMo
b2xkVHlwZSkpOworICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5n
KCkpOworICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisg
ICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiB2ZWN0
b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7Cisg
ICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGds
b2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpOworICAgIHNldEJ1dHRl
cmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJu
IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOworfQorCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKIHsKICAgICBJbmRleGluZ1R5cGUgb2xkVHlw
ZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKQEAgLTQ4MCw3ICs1NDYsNyBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgcmVzdWx0LT5tX3NwYXJz
ZU1hcC5jbGVhcigpOwogICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAgICAg
cmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwg
c3RydWN0dXJlKCktPnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpKTsKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJh
bnNpdGlvbigpKTsKICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBu
ZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00OTAsMTYgKzU1Niw5NiBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyCiAgICAgcmV0dXJuIGNy
ZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOwogfQogCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24s
IHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoaGFzQ29udGlndW91cyhzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBwdWJsaWNMZW5n
dGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVk
IHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CisgICAgCisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
CisgICAgICAgIGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihuZWVkZWRMZW5ndGgpKTsKKyAgICAKKyAgICBtZW1jcHkoCisgICAgICAg
IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAg
IG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAg
cHJvcGVydHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgCisgICAgQXJyYXlT
dG9yYWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBu
ZXdTdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgobmVlZGVkTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdl
LT5zZXRMZW5ndGgocHVibGljTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcC5j
bGVhcigpOworICAgIG5ld1N0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdTdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBwdWJsaWNM
ZW5ndGg7IGktLTspIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CisgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKKyAgICB9CisgICAg
CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgdHJhbnNpdGlvbik7CisgICAgc2V0QnV0
dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1
cm4gbmV3U3RvcmFnZTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHJldHVybiBjb252ZXJ0Q29udGlndW91c1Rv
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOworfQorCitXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElLRUxZKGlu
ZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhp
bmcoKSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRp
YWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
IEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAKICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5n
U2hvdWxkQmVTcGFyc2UoKSkpCiAgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgICAg
ICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKICAgICAgICAg
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworQnV0dGVyZmx5KiBKU09iamVj
dDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sK
KyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBpZiAoVU5MSUtFTFkoc3RydWN0dXJlKCkt
Pm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRp
YWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSktPmJ1dHRlcmZseSgpOworICAgICAgICBpZiAoVU5M
SUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSktPmJ1dHRlcmZseSgpOworICAgICAgICByZXR1cm4gQnV0dGVyZmx5Ojpmcm9tQ29udGln
dW91cyhjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKSk7CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiB9CkBAIC01MDcsNiArNjUzLDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmEKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAvLyBG
SVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIHdheSBtb3JlIGVmZmljaWVudCwgaWYgd2UgY2FyZWQu
CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIApAQCAtNTI2LDYgKzY3NiwxMSBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiB2b2lkIEpTT2JqZWN0Ojpzd2l0Y2hUb1Ns
b3dQdXRBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzogeworICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUoKSwgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsKQEAgLTU2OSw4ICs3
MjQsNyBAQCB2b2lkIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRhCiAgICAgaWYg
KHNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIG5ld1N0cnVjdHVyZSwgU3dpdGNoVG9TbG93UHV0QXJyYXlT
dG9yYWdlKTsKLSAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlKTsKKyAg
ICBzd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CiB9CiAKIGJvb2wgSlNP
YmplY3Q6OnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC03MDQsNiArODU4LDE0IEBAIGJvb2wgSlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0MKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTg3Nyw2ICsxMDM5LDE3IEBAIHZvaWQgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmpl
Y3QtPm1fYnV0dGVyZmx5OworICAgICAgICB1bnNpZ25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRM
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC0xMTAyLDkgKzEyNzUsNiBAQCBib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiB7CiAgICAgQVNTRVJUKGluZGV4
IDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgCi0gICAgaWYgKGRlc2NyaXB0b3IuYXR0cmlidXRl
cygpICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQotICAgICAgICBub3RpZnlQcmVzZW5jZU9mSW5k
ZXhlZEFjY2Vzc29ycyhleGVjLT5nbG9iYWxEYXRhKCkpOwotCiAgICAgaWYgKCFpblNwYXJzZUlu
ZGV4aW5nTW9kZSgpKSB7CiAgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJl
Z3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CiAgICAgICAgIC8vIEZJWE1FOiB0aGlz
IHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3Np
bmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKQEAgLTExMTQsMTAgKzEyODQsMTMgQEAg
Ym9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgICAgICAgICAgQVNT
RVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwogICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIDAsIHRo
cm93RXhjZXB0aW9uID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4
U2hvdWxkTm90VGhyb3cpOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9i
YWxEYXRhKCkpOwogICAgIH0KIAorICAgIGlmIChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChS
ZWFkT25seSB8IEFjY2Vzc29yKSkKKyAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nl
c3NvcnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAg
QVNTRVJUKG1hcCk7CiAKQEAgLTEyNjYsNiArMTQzOSwzNSBAQCBib29sIEpTT2JqZWN0OjphdHRl
bXB0VG9JbnRlcmNlcHRQdXRCeUluCiAgICAgcmV0dXJuIGFzT2JqZWN0KHByb3RvdHlwZVZhbHVl
KS0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoaGFzQ29u
dGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQoIWluZGV4
aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgCisgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0
aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3Jl
YXRlciB0aGFuCisgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCisgICAgQVNT
RVJUKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAKKyAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgaWYgKGkg
Pj0gTUFYX0FSUkFZX0lOREVYIC0gMQorICAgICAgICB8fCAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYCisgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBjb3VudEVs
ZW1lbnRzSW5Db250aWd1b3VzKG1fYnV0dGVyZmx5KSkpKSB7CisgICAgICAgIEFTU0VSVChpIDw9
IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAg
ICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBmYWxzZSk7CisgICAgICAg
IEFTU0VSVChpID49IGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSk7CisgICAgICAgIGFycmF5U3Rv
cmFnZSgpLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZW5zdXJlQ29udGlndW91c0xlbmd0aChnbG9iYWxEYXRhLCBpICsgMSk7CisKKyAgICBBU1NFUlQo
aSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworfQorCiB2b2lkIEpTT2Jq
ZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7CkBAIC0xMzQ4LDE3ICsxNTUwLDI5IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpIHsKLSAgICAgICAgICAgIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91
bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdywKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDAp
IHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewotICAgICAgICAgICAgcHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNo
b3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAg
ICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICBwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBl
eGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCAwLCAwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3Ry
dWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0
TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRh
LCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQogICAgICAgICAKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwg
aSArIDEpKTsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7Cisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGks
IHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTEzODQsOCArMTU5
OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQog
ewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQor
ICAgIAogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChhcnJheVN0b3JhZ2UoKSA9
PSBzdG9yYWdlKTsKICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSB8fCBh
dHRyaWJ1dGVzKTsKICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwogCkBAIC0xNDY3
LDE0ICsxNjgzLDMyIEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8K
ICAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNh
c2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIGlmIChpbmRleGluZ1Nob3Vs
ZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRlcykKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0
dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7Ci0gICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZv
clZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSwgMCwgMCkpOwotICAgICAgICAKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JM
ZW5ndGgoMCwgMCwgaSArIDEpKTsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IDE7CisgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0cmli
dXRlcykgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwKKyAgICAgICAgICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisg
ICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFy
cmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0
cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdl
dE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxE
YXRhLCBpICsgMSlbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOiB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNz
b3IpKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRy
aWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEp
KTsKKyAgICAgICAgfQorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGln
dW91c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC0xNDk5LDEyICsxNzMzLDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25l
ZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIGVsc2UgaWYgKCFjdXJyZW50VmVjdG9yTGVuZ3RoKQog
ICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJy
YXlTaXplKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVu
dCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEp
IC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVu
c2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBu
b3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9
IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYg
MSk7CisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHRpbWVzVGhyZWVQbHVzT25lRGl2aWRlZEJ5
VHdvKGRlc2lyZWRMZW5ndGgpOwogICAgIH0KIAogICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGgg
Pj0gZGVzaXJlZExlbmd0aCk7CkBAIC0xNTI0LDkgKzE3NTMsMTAgQEAgQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgICAgICB2ZWN0b3JMZW5ndGggPSAwOwogICAg
ICAgICBsZW5ndGggPSAwOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTUz
NSw2ICsxNzY1LDE2IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YK
ICAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNp
cmVkTGVuZ3RoKTsKIH0KIAordW5zaWduZWQgSlNPYmplY3Q6OmNvdW50RWxlbWVudHNJbkNvbnRp
Z3VvdXMoQnV0dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgdW5zaWduZWQgbnVtVmFsdWVzID0g
MDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS07
KSB7CisgICAgICAgIGlmIChidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKKyAgICAgICAgICAg
IG51bVZhbHVlcysrOworICAgIH0KKyAgICByZXR1cm4gbnVtVmFsdWVzOworfQorCiBib29sIEpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIG5ld0xlbmd0aCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJy
YXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBu
b3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcApAQCAtMTU0Myw2ICsxNzgz
LDEwIEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdl
KCk7CisgICAgCisgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYCisg
ICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVk
IGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOwpAQCAtMTU3NCw2ICsxODE4LDIyIEBAIGJv
b2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2wKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAordm9pZCBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c0xlbmd0aFNsb3coSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxlbmd0aCA8
IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgCisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3RkOjpt
aW4oCisgICAgICAgIGxlbmd0aCA8PCAxLAorICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKTsKKyAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAg
ICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCB0cnVlLAorICAgICAgICBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpLAorICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKKyAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7Cit9CisKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CkBAIC0xNjAyLDYgKzE4NjIsMTcg
QEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZSwgMCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0OCw4ICsxNDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTYxLDggKzE2Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDcsNiArMjA5LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldOwogICAgICAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAg
ICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkg
JiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0yMTgsNiArMjIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpT
VmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0yMzEsMTIgKzIzNywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHYpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNjcsOSArMjc0LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgICAgIHJldHVy
biBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgICAgICAgICByZXR1
cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkKQEAgLTI4
NSw4ICsyOTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5NiwxNSArMzA1LDIzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAg
ICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAg
ICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwotICAgICAg
ICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
OworICAgICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsKKyAgICAgICAgICAgICAg
ICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZCkg
ewogICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MzE1LDYgKzMzMiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpbml0aWFsaXpl
SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CkBA
IC0zMzEsNiArMzU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKQEAg
LTM0NCw2ICszNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOwpA
QCAtNTQxLDYgKzU2NiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gZm9vLT5hdHRl
bXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKC4uLik7CiAgICAgICAgIGJvb2wgYXR0ZW1w
dFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZUZvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgMCBpZiBjb250aWd1b3VzIHN0
b3JhZ2UgY2Fubm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQorICAgICAgICAvLyBpbmRl
eGluZyBzaG91bGQgYmUgc3BhcnNlIG9yIGJlY2F1c2Ugd2UncmUgaGF2aW5nIGEgYmFkIHRpbWUu
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91cyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9k
ZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCiAgICAgICAgIC8vIHRoaXMgaWYgeW91
J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhl
CiAgICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdl
LCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdApAQCAtNTUzLDYgKzU4OCwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KGdsb2JhbERhdGEp
OwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKExJS0VMWShoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBlbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coZ2xvYmFsRGF0YSk7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZs
eU9mZnNldCgpCkBAIC02MTUsMTEgKzY1OCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIEFycmF5U3RvcmFnZSog
Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uLCB1bnNp
Z25lZCBuZWVkZWRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRh
Jik7CiAgICAgICAgIAogICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhj
ZXB0aW9uKTsKIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250
aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKTsKICAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOwogCiAgICAgICAgIGJvb2wgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKQEAgLTYz
MCw2ICs2NzgsNTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbm90aWZ5UHJlc2Vu
Y2VPZkluZGV4ZWRBY2Nlc3NvcnMoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBi
b29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgaW5kZXgsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAg
Ly8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHNldEluZGV4UXVpY2tseSB0byBzdWNjZWVkIGFuZCB5
b3UncmUgc3VyZSB0aGF0CisgICAgICAgIC8vIHRoZSBhcnJheSBpcyBjb250aWd1b3VzLgorICAg
ICAgICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChsZW5ndGgg
PCBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAg
ZW5zdXJlQ29udGlndW91c0xlbmd0aFNsb3coZ2xvYmFsRGF0YSwgbGVuZ3RoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0
aCkKKyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHNJbkNv
bnRpZ3VvdXMoQnV0dGVyZmx5KiBidXR0ZXJmbHkpOworICAgICAgICAKKyAgICAgICAgdGVtcGxh
dGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBpbmRleGluZ0RhdGEoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHVuc2lnbmVkIHJlbGV2YW50TGVuZ3RoKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWluKAorICAgICAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTY2NCw3ICs3
NjIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAg
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZW5zdXJlQ29udGlndW91c1Nsb3coSlNH
bG9iYWxEYXRhJik7CiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFn
ZVNsb3coSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
QnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBA
IHZvaWQgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4ZWMKIAogY2hhciogSlNWYWx1
ZTo6ZGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9
IDEyODsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7CiAgICAgc3RhdGljIGNo
YXIgZGVzY3JpcHRpb25bc2l6ZV07CiAKICAgICBpZiAoISp0aGlzKQpAQCAtMjEzLDkgKzIxMywx
MiBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgICAgIHUuYXNEb3Vi
bGUgPSBhc0RvdWJsZSgpOwogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRv
dWJsZTogJTA4eDolMDh4LCAlbGYiLCB1LmFzVHdvSW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBd
LCBhc0RvdWJsZSgpKTsKICNlbmRpZgotICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpCi0gICAgICAg
IHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiQ2VsbDogJXAiLCBhc0NlbGwoKSk7Ci0gICAg
ZWxzZSBpZiAoaXNUcnVlKCkpCisgICAgfSBlbHNlIGlmIChpc0NlbGwoKSkgeworICAgICAgICBz
bnByaW50ZigKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBzaXplLCAiQ2VsbDogJXAgKCVwOiAl
cywgJXMpIiwKKyAgICAgICAgICAgIGFzQ2VsbCgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCksIGFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwKKyAgICAgICAgICAg
IGluZGV4aW5nVHlwZVRvU3RyaW5nKGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSgpKSk7CisgICAgfSBlbHNlIGlmIChpc1RydWUoKSkKICAgICAgICAg
c25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJUcnVlIik7CiAgICAgZWxzZSBpZiAoaXNGYWxz
ZSgpKQogICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkZhbHNlIik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQog
I2lmICFFTkFCTEUoWUFSUl9KSVQpCiAgICAgdXNlUmVnRXhwSklUKCkgPSBmYWxzZTsKICNlbmRp
ZgotCisgICAgCiAgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRlZCBhbmQgbWFrZSBj
b3JyZWN0aW9ucyB0byB0aGUgb3B0aW9uczoKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkp
OwogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPj0gdGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsMTEgKzMy
MywxNSBAQCBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyCiAgICAgfQog
fQogCi1Ob25Qcm9wZXJ0eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0ZWRJbmRleGluZ1Ry
YW5zaXRpb24oKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dEluZGV4aW5nKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgp
KSk7Ci0gICAgCi0gICAgaWYgKGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNj
ZXNzZXMoKSB8fCBnbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpKQorICAgIHJldHVy
biBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKKyAgICAgICAg
fHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKTsKK30KKworTm9uUHJvcGVydHlU
cmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNv
bnN0Cit7CisgICAgaWYgKG5lZWRzU2xvd1B1dEluZGV4aW5nKCkpCiAgICAgICAgIHJldHVybiBB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgCiAgICAgcmV0dXJuIEFsbG9jYXRlQXJy
YXlTdG9yYWdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIE5vblByb3BlcnR5VHJh
bnNpdGlvbiBzdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24oKSBjb25zdDsKKyAgICAgICAgYm9v
bCBuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0OworICAgICAgICBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0OwogICAgICAgICAK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2ds
b2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmkKIC8v
IFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3Qg
cmVsYXRlZCB0byBwcm9wZXJ0aWVzLgogLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUg
c3RyaW5nIHBvcnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KIGVudW0gTm9uUHJvcGVydHlU
cmFuc2l0aW9uIHsKKyAgICBBbGxvY2F0ZUNvbnRpZ3VvdXMsCiAgICAgQWxsb2NhdGVBcnJheVN0
b3JhZ2UsCiAgICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlLAogICAgIFN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZSwKQEAgLTU3LDEyICs1OCwxNiBAQCBpbmxpbmUgdW5zaWduZWQgdG9B
dHRyaWJ1dGVzKE5vblByb3BlcnR5CiBpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlw
ZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24p
CiB7CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUNvbnRpZ3Vv
dXM6CisgICAgICAgIEFTU0VSVCghKG9sZFR5cGUgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xv
d1B1dEFycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNDb250aWd1
b3VzOwogICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRU
eXBlIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29u
dGlndW91cykgfCBIYXNBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBbGxvY2F0ZVNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZTsKKyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAg
ICAgICAgQVNTRVJUKG9sZFR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICBBU1NFUlQo
IShvbGRUeXBlICYgSGFzQ29udGlndW91cykpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+
SGFzQXJyYXlTdG9yYWdlKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBBZGRJ
bmRleGVkQWNjZXNzb3JzOgogICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVk
QWNjZXNzb3JzOwpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291
cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGhhc1R3b08KICAgICByZXR1cm4g
IWhhc1plcm9Pck9uZUJpdHNTZXQodmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgVCB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhUIHZhbHVlKQoreworICAgIC8v
IE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgLy8gICAodmFsdWUgKiAzICsgMSkg
LyAyOworICAgIC8vIG9yOgorICAgIC8vICAgKHVuc2lnbmVkKWNlaWwodmFsdWUgKiAxLjUpKTsK
KyAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAg
IHJldHVybiB2YWx1ZSArICh2YWx1ZSA+PiAxKSArICh2YWx1ZSAmIDEpOworfQorCiAjaWYgIUNP
TVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNUKSAmJiAhT1MoU09MQVJJUykKIHVzaW5nIHN0
ZDo6aXNmaW5pdGU7CiAjaWYgIUNPTVBJTEVSX1FVSVJLKEdDQzExX0dMT0JBTF9JU0lORl9JU05B
TikK
</data>
<flag name="commit-queue"
          id="180213"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167517</attachid>
            <date>2012-10-08 01:03:49 -0700</date>
            <delta_ts>2012-10-08 13:45:20 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>holycontiguous_11.patch</filename>
            <type>text/plain</type>
            <size>319282</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOCBA
QAorMjAxMi0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcga2luZCBvZiBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgY2FsbGVkIENvbnRpZ3VvdXMsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgIAorICAgICAgICAtIE5vIGhlYWRlciBiaXRzIGJleW9uZCBJ
bmRleGVkSGVhZGVyLiBUaGlzIHJlc3VsdHMgaW4gYSAxNiBieXRlIHJlZHVjdGlvbgorICAgICAg
ICAgIGluIG1lbW9yeSB1c2FnZSBwZXIgYXJyYXkgdmVyc3VzIGFuIEFycmF5U3RvcmFnZSBhcnJh
eS4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHRoYXQgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBm
b3IgYW4gZW1wdHkgYXJyYXkgaXMgbm93IGp1c3QgMyAqIDggb24gYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LiBPZiB0aGF0LCBvbmx5IDggYnl0ZXMgYXJlIGFycmF5LXNwZWNpZmlj
OyB0aGUgcmVzdCBpcworICAgICAgICAgIG91ciBzdGFuZGFyZCBvYmplY3QgaGVhZGVyIG92ZXJo
ZWFkLgorICAgICAgICAKKyAgICAgICAgLSBObyBuZWVkIGZvciBob2xlIGNoZWNrcyBvbiBzdG9y
ZS4gVGhpcyByZXN1bHRzIGluIGEgfjQlIHNwZWVkLXVwIG9uCisgICAgICAgICAgS3Jha2VuIGFu
ZCBhIH4xJSBzcGVlZC11cCBvbiBWOHY3LgorICAgICAgICAKKyAgICAgICAgLSBwdWJsaWNMZW5n
dGggPD0gdmVjdG9yTGVuZ3RoLiBUaGlzIG1lYW5zIHRoYXQgZG9pbmcgbmV3IEFycmF5KGJsYWgp
CisgICAgICAgICAgaW1tZWRpYXRlbHkgYWxsb2NhdGVzIHJvb20gZm9yIGJsYWggZWxlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIE5vIHNwYXJzZSBtYXAgb3IgaW5kZXggYmlhcy4KKyAgICAg
ICAgCisgICAgICAgIElmIHlvdSBldmVyIGRvIHRoaW5ncyB0byBhbiBhcnJheSB0aGF0IHdvdWxk
IHJlcXVpcmUgcHVibGljTGVuZ3RoID4KKyAgICAgICAgdmVjdG9yTGVuZ3RoLCBhIHNwYXJzZSBt
YXAsIG9yIGluZGV4IGJpYXMsIHRoZW4gd2Ugc3dpdGNoIHRvIEFycmF5U3RvcmFnZQorICAgICAg
ICBtb2RlLiBUaGlzIGhhcHBlbnMgc2VlbXMgdG8gbmV2ZXIgaGFwcGVuIGluIGFueSBiZW5jaG1h
cmsgd2UgdHJhY2ssIGFuZAorICAgICAgICBpcyB1bmxpa2VseSB0byBoYXBwZW4gdmVyeSBmcmVx
dWVudGx5IG9uIGFueSB3ZWJzaXRlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6
CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6
QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFs
SW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5o
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6
Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToK
KyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNK
U0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVU
b0hvbGUpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAg
KEpTQzo6REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6
OkRGRzo6cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6Cisg
ICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hl
R2V0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
IChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnB1
dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKToKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0
QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlT
dG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
cmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKFNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Njb3BlOjpTYW1wbGluZ1Njb3BlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdTY29wZTo6flNh
bXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBpbGF0aW9u
SW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxhdGlvbklu
Zm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEFsbG9jYXRlSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19h
cnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaDoKKyAgICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rv
cik6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OnVuc2hpZnQpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5
Lmg6CisgICAgICAgIChCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21Q
b2ludGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5OjpwdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0UHVibGljTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OmNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21D
b250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaDoK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6QnV0dGVy
Zmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdUeXBlVG9TdHJpbmcpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpoYXNDb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojpzb3J0TnVtZXJpY1ZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVj
dG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb21w
YWN0Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNoaWZ0Q291bnRGb3JTcGxpY2UpOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNoaWZ0Q291bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291
bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNwbGlj
ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmlzTGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpjcmVhdGVDb250aWd1
b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoK
KyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjphZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNv
bnRpZ3VvdXNTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFn
ZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0
Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJv
dG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3VudEVsZW1l
bnRzSW5Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dHJ5R2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHlG
b3JQdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpoYXNTcGFyc2VNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFy
c2VJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJ
bmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nRGF0YSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpyZWxldmFudExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9KU1Zh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZGVzY3JpcHRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0M6Om5ld0luZGV4
aW5nVHlwZSk6CisKIDIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAg
U0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKICAgICBydW50aW1lL0lkZW50aWZp
ZXIuY3BwCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKICAgICBy
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1g4NkFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggXApAQCAtNTE5LDYgKzUy
MCw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nVHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtMTk5LDYgKzE5OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcCBcCiAgICAgcnVudGltZS9PcHRpb25zLmNwcCBcCiAgICAgcnVudGltZS9JZGVudGlmaWVy
LmNwcCBcCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwIFwKICAgICBydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwIFwKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwIFwK
ICAgICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjIs
NiArNTIyLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5cGUuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNTc0LDYgKzE1NzgsMTAgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQnlWYWxJbmZv
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGJ5dGVjb2RlXENhbGxMaW5rSW5mby5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBACiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBDRDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1
MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRC
RDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2
MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3
QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1v
blNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcCAqLzsgfTsKIAkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE2NSw2ICsxNjYsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNE
QjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3
QjI5NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJB
OSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0Ux
NDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZh
bEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0Qg
LyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEw
MTU3RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcw
MDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTg0OCw2
ICs4NTAsNyBAQAogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYx
QzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJ
bmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5k
ZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYxNUQxNEI3
QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVC
MTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzgsNiArOTQxLDcgQEAKIAkJMEY3NzAwOEUx
NDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyog
REZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ND
YWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlE
MEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxMDgsNyArMjExMiw2IEBACiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1
bmN0aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyog
RnVuY3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyog
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAxMDhF
MzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJQkMwMkU5QjgwRTE4NDU0NTAwMEY5
Mjk3IC8qIEdldHRlclNldHRlci5jcHAgKi8sCiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThB
IC8qIEdldHRlclNldHRlci5oICovLApAQCAtMjExNiw2ICsyMTE5LDcgQEAKIAkJCQk5MzNBMzQ5
QTAzOEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovLAogCQkJCTBGQjdGMzhEMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAogCQkJCTBGQjdGMzhFMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRjEzRTA0
QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVD
MzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5
QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCkBAIC0yMjc0LDYgKzIy
NzgsNyBAQAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywK
IAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3
RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKKwkJCQlDMkQ1OEMz
MzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDgwLDYg
KzI0ODUsNyBAQAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
Y3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAq
LywKIAkJCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5o
ICovLAorCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKIAkJ
CQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJCQkw
RjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEY5MzMy
OTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTI5NTksNiAr
Mjk2NSw3IEBACiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFs
dWVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQ
dXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIw
MEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZF
MUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTND
MUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAg
LTM1NjUsNiArMzU3Miw3IEBACiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8q
IFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlG
MTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTNFMDRFMTYxNjRBMUYw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjEx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQs
NyArNTY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikK
KyAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1f
anVtcHMuc2l6ZSgpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzksNiArMjM5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQ
YXRjaGFibGVKdW1wKGp1bXAoKSk7CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFi
bGVCcmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVz
dGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4g
UGF0Y2hhYmxlSnVtcChicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2Vu
ZGlmCiAKICAgICB2b2lkIGp1bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEJ5VmFsSW5mb19oCisjZGVmaW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBK
SVRBcnJheVN0b3JhZ2UgfTsKKworaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5s
aW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1
b3VzOworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENS
QVNIKCk7CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0
IEJ5VmFsSW5mbyB7CisgICAgQnlWYWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUsIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KQorICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5
TW9kZShhcnJheU1vZGUpCisgICAgICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBU
b0RvbmUpCisgICAgICAgICwgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
OworICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5l
IEpJVCBjb2RlLgorICAgIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCBy
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOworfTsKKworaW5saW5lIHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgo
QnlWYWxJbmZvKiBpbmZvKQoreworICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAv
LyBCeVZhbEluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZp
bmUgQ29kZUJsb2NrX2gKIAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5
VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJD
YWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNl
dC5oIgpAQCAtMjA5LDYgKzIxMCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgdm9pZCByZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAg
ICAgCisgICAgICAgIEJ5VmFsSW5mbyYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbElu
Zm8sIHVuc2lnbmVkLCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVn
aW4oKSwgbV9ieVZhbEluZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBz
aXplKSB7IG1fc3RydWN0dXJlU3R1YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90
IG51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
dHViSW5mb3Muc2l6ZSgpOyB9CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVT
dHViSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNp
emUpIHsgbV9ieVZhbEluZm9zLmdyb3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9m
QnlWYWxJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAg
ICAgQnlWYWxJbmZvJiBieVZhbEluZm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5m
b3NbaW5kZXhdOyB9CiAKICAgICAgICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25l
ZCBnbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVj
dG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVj
dG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2
ZUluZm8+IG1fZ2xvYmFsUmVzb2x2ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1f
bWV0aG9kQ2FsbExpbmtJbmZvczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OSwxMiArODU5LDE3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAg
ICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1df
UFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RF
UzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKQEAgLTkwOCw2ICs5MTMsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MTUsNiArOTIzLDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBF
ZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgc3dpdGNoICht
b2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpKSB7CkBAIC05MjQsMTEgKzkzMywxOCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgog
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNl
IEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM2Nyw3ICsxMzgzLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01P
REVTOiAvLyBUaGVzZSBvbmx5IGdldCBhIENoZWNrQXJyYXkgZm9yIEdldEFycmF5TGVuZ3RoCiAg
ICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmln
aHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBv
ZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0Lgog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAt
MTQxMCw5ICsxNDI4LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICB9CiAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIo
KTsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMTQgQEAgQXJyYXk6Ok1v
ZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAgICAgICByZXR1cm4gQXJyYXk6OlVu
cHJvZmlsZWQ7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgogICAgICAgICBpZiAo
YWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFj
Y2Vzc2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7
IC8vIEZJWE1FOiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSwg
b3Igbm90LiBUaGlzIGlzIGEgZGVjZW50IGd1ZXNzLgorICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25v
dyB3aGV0aGVyIHRvIGdvIHRvIHNsb3cgcHV0IG1vZGUgb3Igbm90LiBXZSdyZSBndWVzc2luZyB0
aGF0IHdlIGRvbid0IG5lZWQgc2xvdyBwdXQuCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNp
ZGVkOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAg
ICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzIDogKHBy
b2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6Q29udGlndW91c1RvVGFpbCA6IEFycmF5
OjpDb250aWd1b3VzKTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3Vz
KToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRv
SG9sZSgpID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5
OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8g
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpBcnJheVN0b3JhZ2UpOwogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgpAQCAtNTYs
NiArNjIsMjAgQEAgQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAg
IGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICAg
ICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29u
dGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
cmV0dXJuIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3Vz
KSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4g
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250
aWd1b3VzKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUt
Pm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQ29udGlndW91czsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNl
cHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYm
ICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKICAgICAgICAgICAgIHJl
dHVybiBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTsKQEAgLTE0NCw2ICsxNjQsMjIgQEAgYm9v
bCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsK
ICAgICAgICAgCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoK
KyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBIYXNDb250aWd1b3VzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgSGFzQ29udGlndW91cykKKyAgICAgICAgICAgICYmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0Fy
cmF5KTsKKwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6CkBAIC0xNzAsNyArMjA2LDggQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RW
YWx1ZSYgdgogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCi0g
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExf
RUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgpAQCAtMjI1
LDYgKzI2MiwyNCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAg
ICAgICAgIHJldHVybiAiRm9yY2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgIHJldHVybiAiU3RyaW5nIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkNvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPdXRPZkJvdW5k
cyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJu
ICJBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOwor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAg
cmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWwiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVy
biAiQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6CkBA
IC0yNDksMTAgKzMwNCwyMCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUg
bW9kCiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
IjsKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgogICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICByZXR1
cm4gIkJsYW5rVG9Db250aWd1b3VzIjsKICAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9y
YWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9BcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAg
ICAgcmV0dXJuICJDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVdp
dGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4
QXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE1IEBAIGVudW0gTW9kZSB7CiAgICAgU3Ry
aW5nLAogICAgIAogICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ug
d2hlcmUgdGhlIGNoZWNrIGlzIG5vbiBzaWRlLWVmZmVjdGluZy4KKyAgICBDb250aWd1b3VzLAor
ICAgIENvbnRpZ3VvdXNUb1RhaWwsCisgICAgQ29udGlndW91c091dE9mQm91bmRzLAorICAgIEFy
cmF5V2l0aENvbnRpZ3VvdXMsCisgICAgQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKICAgICBBcnJheVN0b3JhZ2UsCiAg
ICAgQXJyYXlTdG9yYWdlVG9Ib2xlLAogICAgIFNsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC02OCw4
ICs3NywxNiBAQCBlbnVtIE1vZGUgewogICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHMsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgc2lkZS1lZmZlY3RpbmcuCisgICAgQmxhbmtUb0Nv
bnRpZ3VvdXMsCiAgICAgQmxhbmtUb0FycmF5U3RvcmFnZSwKICAgICBCbGFua1RvU2xvd1B1dEFy
cmF5U3RvcmFnZSwKKyAgICBCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIAor
ICAgIC8vIE1vZGVzIHRoYXQgaW5kaWNhdGUgcG9seW1vcnBoaWMgYXJyYXkgc3RvcmFnZS4gVGhl
c2UgZG9uJ3QgYmVuZWZpdCBmcm9tCisgICAgLy8gYW55IGNoZWNraW5nIG9yIHN0b3JhZ2UgQ1NF
LgorICAgIENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhDb250aWd1b3Vz
T3JBcnJheVN0b3JhZ2UsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2UsCiAgICAgCiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKQEAgLTg5LDYgKzEw
NiwzMiBAQCBlbnVtIE1vZGUgewogLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0
aGVtLgogCiAvLyBGaXJzdDogaGVscGVycyBmb3Igbm9uLXNpZGUtZWZmZWN0aW5nIGNoZWNrcy4K
KyNkZWZpbmUgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91czogICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0NPTlRJR1VP
VVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQ09OVElHVU9V
U19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0NP
TlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cworI2RlZmluZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNU
b1RhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbAorI2RlZmluZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNv
bnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCiAjZGVm
aW5lIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC0xMDYsMzMgKzE0OSw0OCBAQCBlbnVtIE1vZGUgewogI2RlZmluZSBBTExf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCiAjZGVmaW5lIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBBcnJh
eTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBc
CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKLSNk
ZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlCiAjZGVmaW5lIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6ICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlCiAjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUyAgICAgICAgICAgICAgICAgIFwKLSAgICBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVT
OiAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAogICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKIAogLy8gTmV4dDog
aGVscGVycyBmb3Igc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBFRkZFQ1RGVUxfTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgXAotICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9y
YWdlOiAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNf
TU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3Vz
CisjZGVmaW5lIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCi0j
ZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICBcCisjZGVmaW5l
IEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKICAg
ICBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUgU0xPV19Q
VVRfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgIFwKKyNkZWZpbmUgU0xPV19QVVRfRUZG
RUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgXAogICAgIEFycmF5OjpCbGFu
a1RvU2xvd1B1dEFycmF5U3RvcmFnZQorI2RlZmluZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3Vz
T3JBcnJheVN0b3JhZ2UKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzog
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NU
T1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUworCisvLyBGaW5hbGx5OiBoZWxwZXJzIGZvciBwb2x5bW9ycGhpYyBhcnJheSBh
Y2Nlc3Nlcy4KKyNkZWZpbmUgUE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfUE9MWU1PUlBISUNfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUE9MWU1PUlBISUNfRUZGRUNURlVM
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElD
X01PREVTCiAKIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6
QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKIApAQCAtMTQ1LDggKzIwMywxMCBAQCBjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJm
bHkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X01PREVTOgotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNTYsNyArMjE2LDkgQEAgaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6
Ok1vZAogaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7
CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9V
U19NT0RFUzoKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2Niw2
ICsyMjgsOSBAQCBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFyCiBpbmxp
bmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6
CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBBUlJBWV9TVE9S
QUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTE4NCwxOCArMjQ5LDU1
IEBAIGlubGluZSBib29sIGlzU2xvd1B1dEFjY2VzcyhBcnJheTo6TW9kZSAKICAgICB9CiB9CiAK
K2lubGluZSBib29sIG1heVN0b3JlVG9UYWlsKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVT
OgorICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01P
REVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCiBpbmxpbmUgYm9vbCBtYXlTdG9yZVRvSG9sZShBcnJheTo6TW9k
ZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICBjYXNlIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfUE9M
WU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIG1vZGVJc1BvbHltb3Jw
aGljKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBB
TExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKK2lubGluZSBib29sIHBvbHltb3Jw
aGljSW5jbHVkZXNDb250aWd1b3VzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0
b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlN
b2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKQEAgLTIwNCw2ICszMDYsNyBAQCBpbmxpbmUgYm9vbCBj
YW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFyCiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogog
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAg
IGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDksNyArMzUyLDExIEBAIGlubGlu
ZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW8KICAgICBjYXNlIEFycmF5OjpVbnBy
b2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBOT05f
QVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6
CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTks
NyArMzY2LDggQEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogaW5s
aW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQXJyYXk6Ok1vZGUgbW9kZSkKIHsK
ICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CiAgICAgY2FzZSBBcnJheTo6
VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CkBAIC0yNzMsNyArMzgxLDcg
QEAgaW5saW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQQogaW5saW5lIGJvb2wg
aXNFZmZlY3RmdWwoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
NCw2ICsxNTc0LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwog
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFy
cmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSkpOwpAQCAtMTU5Nyw2ICsxNTk5LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDApKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoK
ICAgICAgICAgICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMzU5LDkgKzM2MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3Ry
dWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBwcm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAg
ICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZhbC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5u
b3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3RpbmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSArMTIyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlT
cGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Cisg
ICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihj
aGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2Rl
SW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9k
ZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5j
aGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpOworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5
TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9O
b2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAg
ICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEzNywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsK
KyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSwgMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAg
Ymxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcg
KzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5w
cmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihj
aGlsZDEsIDMpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxk
MiwgMyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wgKCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9
IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRl
eCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRleCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjayko
QXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUp
CiAgICAgewogICAgICAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAg
ICAgIAogICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0
ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNv
ZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQo
aW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAg
ICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1v
ZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAgICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2Ug
YmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5y
ZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2UgaXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCAr
NDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwg
c2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRp
b24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0Fy
cmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxk
SWR4KQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3Jl
Rml4cG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAg
IHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OiB7CiAgICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQ
dHItPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAg
ICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUg
KzQzMywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1f
aW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJy
YXlNb2RlKCkpKQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
KyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5v
ZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0
ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpKTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQorICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZ
TU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgp
ID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5j
b2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGluZGV4LmluZGV4VW5jaGVja2VkKCkpOworICAgICAg
ICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0gfQogICAgIH0KICAgICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYg
ZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2gg
KG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAg
ICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJS
QVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElD
X01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
MzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVj
dG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsK
LSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5
LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcx
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBhcnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTYwMSw2ICs1OTcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXkt
PnBvcChleGVjKSk7CiB9CiAgICAgICAgIAorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgCisgICAgYXJyYXktPmJ1dHRlcmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXkt
PmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgoKSArIDEpOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7Cit9CisgICAgICAgIAogRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzMDksNiArMTMxNSwxNCBAQCBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIAorICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMo
Z2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsx
MzMxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IGludDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERh
dGEsIGV4ZWMpOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVJbmRleGVkU3RvcmFnZShnbG9i
YWxEYXRhKSk7Cit9CisKIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMo
aW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6
ZV90LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLXR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdEkpKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0
YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFt
ZSosIGludDMyX3QpOwpAQCAtMTEwLDYgKzExMCw3IEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
c2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VP
WikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7
CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0
YXRlKiwgc2l6ZV90KTsKIApAQCAtMTQ4LDYgKzE0OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW8KIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpT
QXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVj
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwog
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBX
VEZfSU5URVJOQUw7CkBAIC0xOTIsNyArMTk0LDkgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25BbGxvY2F0ZVBybwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJv
cGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdU
Rl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRl
cmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBu
ZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CitjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2Vk
IHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3
aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0
IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Niw3ICsyNTYsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBzdHViSml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSkpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250aWd1b3VzIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSkpKTsKICAgICAgICAgCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQ1LDYgKzIw
NDUsMTEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9
CiB9CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJl
ZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxv
YWRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCByZXN1bHRUYWdSZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5v
ZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKQoreworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAKKyAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHJlc3VsdFRhZ1JlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
aG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmIG5vZGUs
IEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZh
bHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBpZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9k
ZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgcHJvcGVydHlSZWcpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZyk7CisKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1f
aml0LnN0b3JlMzIodmFsdWVUYWdSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIG1faml0LnN0b3JlMzIodmFsdWVQ
YXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgCisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJy
YXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOworICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywg
R1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlVGFnUmVn
LCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9
IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2Rl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRp
bmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBp
ZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNv
dW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBK
SVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28g
dGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcuCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFj
Y2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5n
ZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZl
cnQKKyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qg
d29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8v
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUg
Z3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVu
Z3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVs
b3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuZ3Ro
RG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5vdEhv
bGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1
ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wKCk7CkBAIC0yNTY1LDYgKzI2NzIsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3By
KCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3Vs
dFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJ
R1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0g
cmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUNvbnRp
Z3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI1ODcsNiArMjc0Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwpAQCAtMjYyNCw2ICsyNzgxLDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBy
ZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
c3VsdFRhZ1JlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
VGFnUmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0VGFnUmVnKTsK
KyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5
TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0VGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNv
bXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
c3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAg
ICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChm
YWxsVGhyb3VnaCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdS
ZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzE0
LDYgKzI5MjEsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgor
ICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVQYXlsb2FkUmVnID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFs
dWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
ID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVU
YWdSZWcsIHZhbHVlUGF5bG9hZFJlZyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAg
ICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAg
ICAgICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93
Q2FzZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFs
dWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIGNoaWxkMyk7CkBAIC0yNzQzLDYwICsyOTk5LDc5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mobm9k
ZS5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBp
ZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAgICAgICAgaWYgKCFtYXlTdG9yZVRvSG9s
ZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBi
ZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKLSAgICAg
ICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0
aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAgICAgICAgICAgLy8gcHJvZmlsaW5nLgot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6
ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhp
cyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBo
YXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2pp
dC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Un
cmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVw
ZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVn
LCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKTsKIAogICAgICAgICAgICAgYmFzZS51c2Uo
KTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICAgICAgdmFsdWUudXNlKCk7
CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1Jl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0g
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoaXNIb2xlVmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNs
b3dDYXNlcy5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2
YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgQVNTRVJUKG5vZGUub3Ao
KSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVRhZ1JlZyA9IHZhbHVlLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUGF5
bG9hZFJlZyA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdG9y
YWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdG9yYWdlUmVn
KTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFy
cmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVD
b250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBzdG9yYWdlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFn
ZVJlZyk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9y
YWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
VGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKworICAg
ICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAg
ICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgZGVjaXNpb24g
b2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUgc2hvdWxkIGJlIG1hZGUKKyAg
ICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSwgbm90IHRoZSBtYWNo
aW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAg
IE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9h
ZFJlZykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjkxOSwyNSArMzE5NCw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0z
MigweDdmZmZmZmZlKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLAorICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQUikpOworICAgICAgICAK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAK
KyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIs
IFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBz
dG9yYWdlR1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBKU1ZhbHVlUmVncyhz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
UiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3Jh
Z2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBi
YXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yOTQ4LDQ2ICszMjUzLDg4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZh
bHVlVGFnKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVQYXlsb2FkKHRoaXMpOwot
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gdmFsdWVUYWcuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2
YWx1ZVBheWxvYWQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdw
cigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVUYWdHUFIpOworICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZVRhZ0dQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlVGFnR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksCisgICAgICAgICAgICAgICAgdmFs
dWVUYWdHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAg
ICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAor
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZp
bmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBh
eWxvYWRHUFIpLCBiYXNlR1BSKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3Rv
cmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0g
c3RvcmFnZUxlbmd0aC5ncHIoKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzZXRVbmRlZmluZWRDYXNlczsKLSAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQ
UikpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2Vz
OworICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKLSAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dD
YXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgdmFsdWVUYWdHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWVQYXlsb2FkR1BS
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
c3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKIAotICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKSk7CisgICAgICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFn
R1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwogCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAg
ICAgc2xvd1BhdGhNb3ZlKAotICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlz
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmlu
ZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMs
CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRl
ZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXls
b2FkR1BSKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3Bl
cmF0aW9uQXJyYXlQb3AsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLAorICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOwog
Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksMTAgKzIxMDks
MTExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9CiB9
CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRp
Z3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVnKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdFJlZykpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpLCByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpOworICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChvdXRPZkJvdW5kcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4g
c2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1w
UmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBp
ZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNB
Y2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgc2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcsIHRlbXBSZWcpOworICAg
ICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgICAgIGlu
Qm91bmRzLmxpbmsoJm1faml0KTsKKyAgICB9CisKKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgCisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mo
YXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOwor
ICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJl
ZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVn
LCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBub2RlLmFy
cmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
YmV5b25kQXJyYXlCb3VuZHMpOworICAgIGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
ZXlvbmRBcnJheUJvdW5kcyk7CisKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEg
aG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgaWYgKCFtYXlT
dG9yZVRvSG9sZShhcnJheU1vZGUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdW5jb3VudGFibGUg
YmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUgYmFzZWxpbmUgSklUCisgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKKyAgICAgICAgLy8gcHJvZmlsaW5nLgorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRp
bWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0CisgICAgICAgICAgICAvLyB0aGUg
YWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25s
eSBoYXBwZW5zIGlmIHdlJ3JlCisgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0
aW1lLgorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0lu
VmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJl
ZywgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRl
LmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICBub3RIb2xlVmFsdWUubGluaygmbV9q
aXQpOworICAgIH0KKyAgICAKKyAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5Lgor
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKLQorICAgIAogICAgIHN3aXRjaCAob3Ap
IHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgIGluaXRDb25zdGFudEluZm8obV9jb21w
aWxlSW5kZXgpOwpAQCAtMjU5NSw2ICsyNjk2LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENPTlRJ
R1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VP
VVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7
CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5v
ZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFs
QXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMo
KSk7CkBAIC0yNjE1LDYgKzI3NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE9V
VF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTI2MjcsMjEgKzI3NzQsNjUgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9S
UEhJQ19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBy
ZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSk7Ci0K
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoaG9sZSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2Vz
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRp
Z3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91
Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3Bl
cnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJy
YXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJy
YXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJv
dWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOwogICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6CkBAIC0yNzM1LDggKzI5MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Cisg
ICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI3NTYsNTkgKzI5NDcsNzYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0cikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25k
QXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGlzSW5Cb3Vu
ZHNBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLQot
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5
TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2Ug
aWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAgICAgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1
ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQg
dG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0
IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgIGlzSG9sZVZh
bHVlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7
IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90
TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGls
ZUNvbnRpZ3VvdXNQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywg
cHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpOworCisgICAg
ICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAg
ICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3By
KCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9y
YXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUpOworCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21w
aWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKwog
ICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwotCi0gICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgICAgIGlmICghaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJl
eW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFy
cmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaXNIb2xlVmFs
dWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywKQEAgLTI4MjAsNiArMzAyOCw2MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0
ZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91
Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wb3JhcnlSZWcpOworICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBvcmFyeVJlZywgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAgICBpZiAocG9s
eW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBk
b25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxU
aHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRl
bXBvcmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVt
cG9yYXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJ
bmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFs
KG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9y
YXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2gu
aXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7CisKKyAgICAgICAgICAgIGJhc2UudXNl
KCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgp
OworCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGRlY2lzaW9uIG9mIHdoZXRoZXIgb3Igbm90
IHdlJ3JlIGluIHN0cmljdCBtb2RlIHNob3VsZCBiZSBtYWRlCisgICAgICAgICAgICAvLyBiYXNl
ZCBvbiB0aGUgaW5saW5lIGNhbGwgZnJhbWUsIG5vdCB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLgor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAg
ICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTI5
NzMsMjYgKzMyMzgsNTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChu
b2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczog
eworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBi
aXphcnJlIGxlbmd0aHMuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
LCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAg
ICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJ
bW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAg
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKLSAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAg
ICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQ
Uik7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
QXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKLSAgICAgICAgICAgICAgICB2
YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTMwMDIsNDEgKzMyOTUsNzcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgdmFsdWUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRo
aXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9
IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIpLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworCisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAg
ICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSks
IHZhbHVlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlz
LCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHZhbHVlR1BSLCBiYXNlR1BSKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwotICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
dG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB1bmRlZmlu
ZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZh
bHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAK
LSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAg
ICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2Fz
ZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKICAgICAgICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFs
dWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKIAotICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0zMjEwLDggKzM1MzksMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHNpemVHUFIpOwotICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKTsKKyAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUo
KSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgIGJpZ0xlbmd0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFy
cmF5U3RvcmFnZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDQxIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOworICAgICAgICAKKyAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
QVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1f
aml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1faml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHR1
cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4gQnV0IHdlIGN1cnJlbnRseSBoYXZlIG5vIGV2aWRl
bmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgc28gd291bGQgYmUgcHJvZml0YWJsZSwgbm9yIGRv
IEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRoZSBwcmVzZW50IHRlc3QKKyAgICAgICAgLy8gY292
ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgTk9OX0FS
UkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCkBAIC0zNTIsNiArMzg3LDI5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIp
OworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJh
bmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBk
b2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdp
dGggdGhlIHByZXNlbnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBh
dGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAg
ICAgICAgICAgICAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUo
KSkgPyBIYXNDb250aWd1b3VzIDogMCkKKyAgICAgICAgICAgICAgICAgICAgfCAocG9seW1vcnBo
aWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSA/IEhhc0FycmF5U3RvcmFn
ZSA6IDApKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAg
ICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmQXJndW1lbnRzOjpzX2luZm87CiAgICAgICAgIGJyZWFr
OwpAQCAtMzkwLDcyICs0NDgsMTA4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5v
ZGUmIG5vZGUKICAgICBBU1NFUlQoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAKKyAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAg
CiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVj
dHVyZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQ
UlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGln
dW91czoKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAg
ICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sg
PSBIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFz
ayA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBHUFJUZW1wb3Jhcnkgc3Ry
dWN0dXJlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyBz
dHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMg
bmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgSW5kZXhpbmdU
eXBlIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0KLSAgICAgICAgICAgIGlzU2xvd1B1dEFjY2Vz
cyhub2RlLmFycmF5TW9kZSgpKSA/IChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSA6IEhhc0FycmF5U3RvcmFnZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKKyAgICBtX2pp
dC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAvLyBXZSBj
YW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9y
YWdlLgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVz
dDgoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5
cGVNYXNrKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIp
OwogICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICAvLyBO
ZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nl
c3Nlcy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4K
KyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8gSWYgd2UncmUgYWxsZWdl
ZGx5IGNyZWF0aW5nIGNvbnRpZ3VvdXMgc3RvcmFnZSBhbmQgdGhlIGluZGV4IGlzIGJvZ3VzLCB0
aGVuCisgICAgLy8ganVzdCBkb24ndC4KKyAgICBpZiAobm9kZS5hcnJheU1vZGUoKSA9PSBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXMpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIs
IFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKSk7CisgICAgfQorICAg
IAorICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBp
bmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAorICAgIC8vIHRoZW4gdGhpcyBtb2RlIHdvbid0
IHdvcmsuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSkpOwogICAgICAgICAK
LSAgICAgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgLy8gTm93IGNhbGwg
b3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyh0ZW1wR1BSKTsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNl
IEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25FbnN1cmVDb250aWd1b3VzLCB0ZW1wR1BSLCBiYXNlUmVnKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpCbGFu
a1RvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcpOwotICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHRlbXBHUFIpOwotCi0gICAgICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVs
b2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQot
ICAgICAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8g
ZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZwotICAgICAgICAvLyBhYm91dCBhIGxvYWQu
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUga2lu
ZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KLSAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwg
cmVzdWx0IGluIHRoZSAKLSAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRp
bmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgotICAgICAgICAvLyBU
aGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJl
ZEluZGV4aW5nVHlwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKLSAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwotICAgIH0KKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJy
YXlTdG9yYWdlOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZywgcHJvcGVydHlSZWcpOworICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnModGVtcEdQUik7CisKKyAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUg
c3RydWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKKyAgICAvLyB0
ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8gc28uIEVpdGhl
ciB3YXkgd2UncmUgdGFsa2luZworICAgIC8vIGFib3V0IGEgbG9hZC4KKyAgICBtX2ppdC5sb2Fk
UHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisgICAgLy8gRmluYWxs
eSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3
YW50ZWQgdG8gZ2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFja3dhcmRzIHNwZWN1
bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgCisgICAgLy8gYnl0ZWNvZGUg
b3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4
ZWN1dGVkLgorICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3Qg
dXNlci12aXNpYmxlLgorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhp
bmdUeXBlTWFzaykpKTsKKyAgICAgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgc3Rv
cmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTMyMDUsMTIgKzMy
OTksMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0
b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsK
LSAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgIGNhc2UgQVJS
QVlfV0lUSF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgc3RvcmFnZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBAIC0zMzk5LDYg
KzM1MDQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAg
IHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAorR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFy
eSYgdGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgaWYgKCFwdXRCeVZh
bFdpbGxOZWVkRXh0cmFSZWdpc3RlcihhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gSW52YWxp
ZEdQUlJlZzsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVhbFRlbXBvcmFyeSh0aGlzKTsKKyAg
ICB0ZW1wb3JhcnkuYWRvcHQocmVhbFRlbXBvcmFyeSk7CisgICAgcmV0dXJuIHRlbXBvcmFyeS5n
cHIoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKK2NsYXNzIEdQUlRlbXBvcmFyeTsKIGNsYXNzIEpTVmFsdWVPcGVyYW5k
OwogY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAgLTEx
NjYsNiArMTE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRp
b25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBz
aXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9i
amVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIo
c2l6ZSkpOwpAQCAtMTIxOCwxMSArMTIyNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMTQ2OCw2ICsxNDc5LDExIEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJn
MikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIGludDMyX3QgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9s
ZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNTMxLDExICsxNTQ3LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMjE0OSw2ICsyMTcwLDUyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxl
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZh
bChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBj
b21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyNlbHNl
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwo
Tm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdl
UmVnLCBHUFJSZWcgcmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2Rl
JiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcs
IEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKTsKKyNlbmRpZgor
ICAgIAorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAg
Ly8gRm9yIEFycmF5U3RvcmFnZSwgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIHN0b3JlcyB0byBo
b2xlcyBleGNlcHQgaWYKKyAgICAgICAgLy8gd2UncmUgaW4gU2xvd1B1dCBtb2RlLgorICAgICAg
ICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgLy8gRm9yIENvbnRpZ3VvdXMsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBh
bnkgYWNjZXNzIHRoYXQgbWF5IHN0b3JlCisgICAgICAgIC8vIHRvIHRoZSB0YWlsLgorICAgICAg
ICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdV
T1VTX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgLy8gQWxsIHBvbHltb3JwaGljIG1vZGVzIG5lZWQgYW4gZXh0cmEgcmVnLgorICAgICAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwo
R1BSVGVtcG9yYXJ5JiwgQXJyYXk6Ok1vZGUpOworICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3Rl
ckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBu
b2RlLmFycmF5TW9kZSgpKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiwgR1BSUmVn
IGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2
YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBj
b21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0
ZW1wUmVnKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250
aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcs
IEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxv
YWRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdl
UHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcp
OworI2VuZGlmCisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CiAg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwyNSBAQCBzdGF0aWMgaW5saW5l
IEpTT2JqZWN0KiBjaGVja2VkUmV0dXJuKEpTCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQog
CitjbGFzcyBTYW1wbGluZ1Njb3BlIHsKK3B1YmxpYzoKKyAgICBTYW1wbGluZ1Njb3BlKEludGVy
cHJldGVyKiBpbnRlcnByZXRlcikKKyAgICAgICAgOiBtX2ludGVycHJldGVyKGludGVycHJldGVy
KQorICAgIHsKKyAgICAgICAgaW50ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmcoKTsKKyAgICB9Cisg
ICAgflNhbXBsaW5nU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnByZXRlci0+c3RvcFNh
bXBsaW5nKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKK307CisKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWN1dGFibGUq
IHByb2dyYW0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaikKIHsKKyAg
ICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CisgICAgCiAgICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0
KHRoaXNPYmosIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+
ZXhjZXB0aW9uKTsKQEAgLTExMzcsNiArMTE1NCw4IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJw
cmV0ZXI6OnByZXBhcmVGb3IKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJh
bWVDbG9zdXJlJiBjbG9zdXJlKSAKIHsKKyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUo
dGhpcyk7CisgICAgCiAgICAgQVNTRVJUKCFjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICBpZiAoY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpA
QCAtMTE3Miw2ICsxMTkxLDggQEAgdm9pZCBJbnRlcnByZXRlcjo6ZW5kUmVwZWF0Q2FsbChDYWxs
RnJhbQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFs
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNjb3Bl
LCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpCiB7CisgICAgU2FtcGxpbmdTY29wZSBzYW1wbGlu
Z1Njb3BlKHRoaXMpOworICAgIAogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzVmFs
dWUsIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhjZXB0
aW9uKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVz
eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMDMxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAwLDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7
CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUlu
Zm9JbmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC03Mzgs
NiArNzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAg
ICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29kZUJs
b2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJsb2Nr
LT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUo
KTsgKytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9j
YXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tp
XS5iYWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0ID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRvbmVUYXJn
ZXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRhcmdldCk7
CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsKKyAgICAg
ICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisgICAg
ICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAgICAg
ICAgICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0u
YXJyYXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJhZFR5cGVK
dW1wLCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihy
ZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVCbG9jay0+
c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51
bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1
ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxhdGlv
bkluZm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0KQorICAgICAgICAgICAgOiBieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5
cGVKdW1wKQorICAgICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAgICAg
LCBkb25lVGFyZ2V0KGRvbmVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0OworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIHJldHVybkFkZHJlc3M7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhl
cjsKQEAgLTM0OCw2ICszNjcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVy
ZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJl
Y3QpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0
QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGppdChnbG9iYWxE
YXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAg
eworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAg
ICAgICAgIHsKQEAgLTM5Nyw2ICs0MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNo
YWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVy
ZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRy
ZXNzUHRyLCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJldHVybkFkZHJlc3NQ
dHIsIGJvb2wgZGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgSklUQXJyYXlNb2RlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CkBA
IC00NTIsNiArNDg4LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lz
dGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGlu
Z1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9m
aWxlKik7CisgICAgICAgIAorICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEs
IGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGV4aW5nIHR5cGUuCisgICAgICAg
IC8vIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZCB6ZXJvIGV4dGVuZGVkLiBCYXNlIGlzIGNl
bGwgY2hlY2tlZC4KKyAgICAgICAgLy8gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuIFJl
dHVybnMgdGhlIHNsb3cgY2FzZXMuIEZhbGwtdGhyb3VnaAorICAgICAgICAvLyBjYXNlIGNvbnRh
aW5zIHJlc3VsdCBpbiByZWdUMCwgYW5kIGl0IGlzIG5vdCB5ZXQgcHJvZmlsZWQuCisgICAgICAg
IEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFp
bnMgaW5kZWNpbmcgdHlwZS4KKyAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5
ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKKyAgICAgICAgLy8gemVyby1l
eHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2Zp
bGVkLgorICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgorICAgICAgICBKdW1wTGlz
dCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogCiAgICAgICAgIGVudW0gRmluYWxPYmpl
Y3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCkBAIC04NzAsNiArOTIyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwog
ICAgICAgICBWZWN0b3I8TGFiZWw+IG1fbGFiZWxzOwogICAgICAgICBWZWN0b3I8UHJvcGVydHlT
dHViQ29tcGlsYXRpb25JbmZvPiBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvOworICAg
ICAgICBWZWN0b3I8QnlWYWxDb21waWxhdGlvbkluZm8+IG1fYnlWYWxDb21waWxhdGlvbkluZm87
CiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbENvbXBp
bGF0aW9uSW5mbz4gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8
SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwpAQCAtODc5LDYgKzkzMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIHVu
c2lnbmVkIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1bnNpZ25l
ZCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9nbG9iYWxSZXNv
bHZlSW5mb0luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5mb0luZGV4OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0NywyMyArNDQ3LDIyIEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2Nh
dGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lz
dGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoID0gc3RkOjptYXgobGVuZ3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0g
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGlu
aXRpYWxMZW5ndGgpKTsKKyAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVu
Z3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIGluaXRpYWxMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKworICAgIGxvYWRQdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNoKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsKIAogICAgIC8vIFdlIGFsbG9j
YXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVj
dGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJheSBpbml0aWFsaXphdGlv
bi4KICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJ
bmRleGluZ0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNl
bGwgZm9yIHRoZSBhcnJheS4KLSAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CiAgICAgZW1pdEFsbG9jYXRl
QmFzaWNKU09iamVjdDxKU0FycmF5LCBNYXJrZWRCbG9jazo6Tm9uZT4oc2NyYXRjaCwgY2VsbFJl
c3VsdCwgc3RvcmFnZVB0cik7CiAKLSAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZv
IGluIHRoZSBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9y
ZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpu
dW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVu
Z3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpzcGFy
c2VNYXBPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4g
dGhlIGluZGV4aW5nIGhlYWRlci4KKyAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Mo
c3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
c3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXds
eSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgogICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFk
ZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CkBAIC00NzIs
MTIgKzQ3MSwxMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVz
UmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAg
c3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Cisg
ICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAjZWxzZQogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkp
KTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdp
c3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZih1aW50MzJfdCkpLCBzdG9yYWdl
UHRyKTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0
ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC01NjEsMTAgKzU2
MCwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGCiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9I
b2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXco
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJy
YXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJh
eU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhwcm9m
aWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwor
ICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YQogICAgIGVtaXRTdG9yZSh1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzKSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKICAgICBza2lw
QXJndW1lbnRzQ3JlYXRpb24ubGluayh0aGlzKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYXJn
dW1lbnRzKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSk7CiAgICAgc3R1YkNh
bGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY1LDcgKzE1
NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRz
KSk7CiAgICAgCiAgICAgc2tpcEFyZ3VtZW50c0NyZWF0aW9uLmxpbmsodGhpcyk7Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOworICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpOwogICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KGFyZ3VtZW50cywgcmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGlu
Zyhkc3QpOwpAQCAtMTY2MSw3ICsxNjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkp
IHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1l
KCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTE2ODAsOCArMTY4MSwxMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFs
bG9jYXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9w
ZXIgc3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGlu
dCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3Bp
ZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQorICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6aXNP
dmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IobGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBXZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxs
LgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NCwyNyArMjA0LDc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
IHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVu
c2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGU7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJl
Z1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmls
ZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDEs
IHJlZ1QzLCBwcm9maWxlKTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9k
ZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6
CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCi0gICAg
bG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVn
VDApOyAvLyBwYXlsb2FkCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICBhZGRTbG93Q2FzZShi
YWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAorICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEp1bXAgcmVzdWx0T0sg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7Cisj
ZW5kaWYKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdU
SChvcF9nZXRfYnlfdmFsKSwgZHN0LCByZWdUMSwgcmVnVDApOworICAgIAorICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZz
ZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRD
b250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQor
eworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOwor
ICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworICAgIAorICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFn
CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZAor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwog
fQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsK
KyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgCisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2Fk
MzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisgICAgCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIHVuc2lnbmVkIGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0yNDgsMTAgKzI5OSwxNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBlbXB0eSB2YWx1ZQogICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAK
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJv
cGVydHkpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViQ2Fs
bC5jYWxsKGRzdCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwor
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CiB9CkBAIC0yNjAsMjAgKzMxNyw4MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKEluc3RydWN0aW9uCiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIHByb2ZpbGUpOworICAgIAorICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGln
dW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJy
YXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAg
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
bV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQogCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0
MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIs
IEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
IAorICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAKKyAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywg
QnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgIAorICAgIGVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBqdW1w
KCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywg
VW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OwogICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgCisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCiAgICAgSnVt
cCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSk7CiAgICAgCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0y
ODMsNyArNDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgog
ICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVn
VDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7
CiAgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKICAgICAKQEAgLTI5
Miw2ICs0MTEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgog
ICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGVuZC5saW5r
KHRoaXMpOworICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwg
cmVnVDMsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMzAzLDEzICs0MjYsMTkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
aW4gdmVjdG9yIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRz
CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIEpJVFN0dWJD
YWxsIHN0dWJQdXRCeVZhbENhbGwodGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQ
dXRCeVZhbENhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRB
cmd1bWVudChwcm9wZXJ0eSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1
ZSk7Ci0gICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1
dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNz
ID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC0xMTEsMTcgKzExMiw2NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwg
cmVnVDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBKSVRBcnJh
eU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250
aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAg
ICAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDApOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICByZXN1bHRPSy5saW5r
KHRoaXMpOworI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUs
IG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWRQdHIo
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNs
b3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxl
UHRyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDYsMTAgKzE5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNo
ZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQogICAgIAorICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSwg
cmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7Ci0gICAg
c3R1YkNhbGwuY2FsbChkc3QpOworICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsK
KworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNs
b3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbElu
c3RydWN0aW9uSW5kZXgrKzsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKIH0KQEAg
LTIyNiw3ICsyODAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9u
CiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJh
eVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJv
cGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2Vy
KHJlZ1QxKTsKQEAgLTIzNCwxMCArMjg4LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBKSVRBcnJheU1vZGUg
bW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3Vz
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5
dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CisKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpOworICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
CisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
b3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVn
VDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1
bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIApA
QCAtMjQ3LDggKzM2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2Zp
bGUpOworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CiAgICAgYnJhbmNoMzIoQmVsb3csIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1Rv
KHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwpAQCAtMjU3LDggKzM3Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24KICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGVuZC5s
aW5rKHRoaXMpOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCBy
ZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yNzAsMTMgKzM4NiwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2
ZWN0b3IgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG91dCBvZiBib3VuZHMKKyAg
ICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBKSVRTdHViQ2FsbCBzdHVi
UHV0QnlWYWxDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfdmFsKTsKICAgICBzdHViUHV0QnlWYWxD
YWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50
KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1
ZSwgcmVnVDIpOwotICAgIHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworICAgIENhbGwgY2FsbCA9
IHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRy
ZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTY1Niw3ICs3NzgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5
TGVuCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJl
Z1QyLCByZWdUMSwgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpOwogICAgIEp1bXAgZmFpbHVyZUNh
c2VzMSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKElzQXJyYXkpKTsK
LSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXND
b250aWd1b3VzKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGgg
ZnJvbSB0aGUgc3RvcmFnZQogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwpAQCAtMTI3NCw2ICsxMzk2LDc2IEBAIGJvb2wgSklU
Ojppc0RpcmVjdFB1dEJ5SWQoU3RydWN0dXJlU3R1YkkKICAgICB9CiB9CiAKK3ZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5i
ZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVC
bG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25M
YWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAg
ICgiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2lu
dCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7Cisg
ICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkg
eworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAg
ICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlv
bkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGlu
ZSBwdXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAg
ICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1
dF9ieV92YWxfZ2VuZXJpYykpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5o
IgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIK
ICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0y
NDE0LDYgKzI0MTUsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwo
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgICAg
ICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9w
ZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoc3Vic2NyaXB0Lmlz
VUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwor
ICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmNhbkdldEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFz
ZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0KKworICAgIGlmIChpc05hbWUo
c3Vic2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nh
c3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7CisK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNh
bGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNh
bGxGcmFtZSwgcHJvcGVydHkpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CkBAIC0yNDIzLDM1ICsyNDQ4LDQ0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1
YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNl
VmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1
YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAg
ICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0
cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7
Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92
YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VW
YWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAg
ICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyB0aGlzIGF0IGFsbC4KKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Cisg
ICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9y
Tm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0
QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5n
VHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorICAgIAor
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWxfZ2VuZXJp
YykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAo
aXNOYW1lKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
Z2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSkt
PnByaXZhdGVOYW1lKCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVy
dHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZy
YW1lKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJv
cGVydHkpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJf
UkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0yNTAyLDIzICsyNTM2LDE0IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3B1dF9ieV92YWwpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
c3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tG
cmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKLQogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUlu
dDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVp
Y2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0
SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI1MjgsMTEgKzI1NTMsNjEgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICBiYXNlVmFs
dWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwo
KSktPnByaXZhdGVOYW1lKCksIHZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFt
ZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhy
ZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4
Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFu
IGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQo
Y2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgfQorfQor
CitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQoreworICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFy
Z3NbMl0uanNWYWx1ZSgpOworCisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNj
cmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemlu
ZyBhdCBhbGwuCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUp
OworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8oKSkgeworICAgICAgICAgICAgLy8gRG9udCBldmVyIHRyeSB0byBvcHRpbWl6ZS4K
KyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5l
cmljKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGlt
aXplLgorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5
dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRp
bWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGlu
Z1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5
TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlKTsKKworICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tG
cmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzJdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9i
eV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7
CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90
ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBs
b2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQx
LCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBi
dGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXog
dDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpIDRbUENdLCB0MQogICAgIGxv
YWRwIDMyW1BDXSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApA
QCAtMTMwNiwxMCArMTMwNiwyMSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkaSAx
MltQQ10sIHQzCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDMsIEludDMyVGFn
LCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1
b3VzCisgICAgCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaSBU
YWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QzLCB0MSwg
OF0sIHQxCisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3Vv
dXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKLSAg
ICBsb2FkaSA0W1BDXSwgdDAKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFn
T2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciAr
IFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKworLm9wR2V0QnlWYWxEb25lOgorICAgIGxv
YWRpIDRbUENdLCB0MAogICAgIGJpZXEgdDIsIEVtcHR5VmFsdWVUYWcsIC5vcEdldEJ5VmFsU2xv
dwogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDAsIDhdCiAgICAgc3RvcmVpIHQxLCBQ
YXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCkBAIC0xMzgzLDI5ICsxMzk0LDUyIEBAIF9sbGludF9v
cF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAg
IGxvYWRwIDE2W1BDXSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6
IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdwogICAgIGxvYWRpIDhbUENdLCB0
MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQwLCBJbnQzMlRhZywgdDIsIC5v
cFB1dEJ5VmFsU2xvdykKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgSW50
MzJUYWcsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJpZXEg
QXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDIsIDhdLCBFbXB0eVZhbHVl
VGFnLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgotICAgIGxvYWRp
IDEyW1BDXSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyh0MywgdDEsIHQzKQot
ICAgIHdyaXRlQmFycmllcih0MSwgdDMpCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1f
dmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0KLSAgICBzdG9yZWkgdDMsIEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MiwgOF0KKyAgICBidGl6IHQyLCBIYXND
b250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQzLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwg
Lm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0
b3JlUmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisgICAgc3RvcmVp
IHQxLCBUYWdPZmZzZXRbdDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0
MCwgdDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZC
b3VuZHM6CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBpZiBWQUxVRV9Q
Uk9GSUxFUgorICAgICAgICBsb2FkcCAxNltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJh
eVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCisgICAgZW5kCisgICAgYWRkaSAxLCB0Mywg
dDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3Jl
UmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJh
eVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
bG93CisgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0Mywg
OF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5
VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGkgMTJbUENdLCB0MgorICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHQyLCB0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyKHQx
LCB0MikKKyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRb
dDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxv
YWRPZmZzZXRbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6
Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0g
ICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAg
ICAgIGxvYWRwIDE2W1BDXSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0MV0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9u
dW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVz
dWx0CisgICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAog
ICAgIGFkZGkgMSwgdDIsIHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZh
bFN0b3JlUmVzdWx0CisgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQK
IAogLm9wUHV0QnlWYWxTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1
dF9ieV92YWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAg
IGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0Miwg
dDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRp
eiB0MiwgKEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwg
dDEKICAgICBsb2FkcCA2NFtQQiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVt0M10sIHQwCkBAIC0xMTQ3LDE0ICsxMTQ3LDI1IEBAIF9sbGludF9vcF9nZXRfYnlf
dmFsOgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0
MywgdDEpCiAgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJy
YXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3Vz
LCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4
aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlW
YWxTbG93CisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4
XSwgdDIKKyAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKyAgICBqbXAgLm9wR2V0QnlWYWxE
b25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0
b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFl
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAg
ICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHog
dDIsIC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3RvcmVwIHQyLCBb
Y2ZyLCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZhbHVlUHJvZmls
ZSh0MiwgdDApCkBAIC0xMjI2LDI5ICsxMjM3LDUxIEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgog
ICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRwIDMyW1BCLCBQ
QywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFz
QXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwg
dDAKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQdXRCeVZhbFNs
b3cpCi0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQw
LCB0MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxvYWRwIEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNs
b3cKLSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlW
YWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4
XSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBidGl6IHQyLCBI
YXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0
MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0
aFt0MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRp
Z3VvdXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEpCisgICAgc3Rv
cmVwIHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGln
dW91c091dE9mQm91bmRzOgorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAg
aWYgVkFMVUVfUFJPRklMRVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAg
ICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQK
KyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlW
YWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAs
IHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0
b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3Rv
cmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEs
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5v
cFB1dEJ5VmFsRW1wdHk6Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZB
TFVFX1BST0ZJTEVSCi0gICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVU
b0hvbGVbdDNdCisgICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3Jl
YiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRk
aSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDIsIHQxCisgICAgYmliIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAorICAgIGFkZGkgMSwgdDMs
IHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Cisg
ICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxT
bG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAg
ZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0
IElzQXJyYXkgPSAxCitjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9y
YWdlID0gOAotY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlID0gMTYKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaQogCiBpbmxpbmUgYm9vbCBpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQogewot
ICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBt
aW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CisgICAgcmV0dXJuIGxlbmd0aCAvIG1p
bkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKIH0KIAogaW5saW5lIEluZGV4aW5nSGVh
ZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsx
OTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tCiAvLyBjdXJy
ZW50Q291bnQpIHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgbGVmdCBvciByaWdodCBhcyBhcHByb3By
aWF0ZTsgaW4gdGhlCiAvLyBjYXNlIG9mIHNoaWZ0IHRoaXMgbXVzdCBiZSByZW1vdmluZyB2YWx1
ZXMsIGluIHRoZSBjYXNlIG9mIHVuc2hpZnQgdGhpcwogLy8gbXVzdCBiZSBpbnRyb2R1Y2luZyBu
ZXcgdmFsdWVzLgotc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1
bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6
U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENv
dW50LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VS
VChjdXJyZW50Q291bnQgPiByZXN1bHRDb3VudCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjdXJy
ZW50Q291bnQgLSByZXN1bHRDb3VudDsKQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjCiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmop
KSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAg
aWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRD
b3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9
PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4o
ZXhlYywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
MzEsNyArMjMyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYwog
ICAgICAgICB9CiAgICAgfQogfQotc3RhdGljIGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJy
ZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0
ZTxKU0FycmF5OjpTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KK3ZvaWQgdW5zaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2ln
bmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBBU1NFUlQocmVzdWx0Q291bnQgPiBjdXJyZW50Q291bnQpOwogICAgIHVuc2lnbmVk
IGNvdW50ID0gcmVzdWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CkBAIC0yNDcsMTAgKzI0OSwxMCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4CiAKICAgICBpZiAoaXNK
U0FycmF5KHRoaXNPYmopKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlz
T2JqKTsKLSAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVu
c2hpZnRDb3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5n
dGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVuc2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhl
YywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAt
LWspIHsKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAg
ICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CkBAIC01MjYsNyArNTI4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBhcnJh
eS0+cHVzaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiAgICAgfQotCisgICAgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU0
NCw2ICs1NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQorICAgIAogICAgIEpTVmFsdWUgbmV3
TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90
PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBuZXdMZW5ndGgpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKQEAgLTYwMCw3ICs2MDMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMs
IDApOwotICAgICAgICBzaGlmdChleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOworICAg
ICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAs
IDEsIDAsIGxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHB1
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKGxlbmd0aCAtIDEpKTsKQEAgLTczMCw3ICs3MzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYykpOwogCkBAIC03NjIsMTEgKzc2NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4
PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxB
cmdzIDwgZGVsZXRlQ291bnQpIHsKLSAgICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgYmVnaW4s
IGRlbGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNB
cnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNv
dW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKLSAgICAg
ICAgdW5zaGlmdChleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxB
cmdzLCBsZW5ndGgpOworICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxp
Y2U+KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxl
bmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIHVu
c2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7
Ci0gICAgICAgIHVuc2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwor
ICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09i
aiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdz
IGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9m
IGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNo
YXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQor
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCk7IH0KQEAgLTcwLDkgKzc5LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50
MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5n
dGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4
aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rv
ckxlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5n
dGgodmFsdWUpOyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRl
eGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFy
cmF5U3RvcmFnZT4oKTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygp
IHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9Cisg
ICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjb250aWd1b3VzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QnV0dGVyZmx5Kj4oY29udGlndW91cyk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhP
ZlByb3BlcnR5U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnJlc2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBB
U1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNl
IHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAg
LTE2Myw3ICsxNjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3Ry
CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFn
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBh
Y2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2Vl
IGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwxMCArNDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNp
dAogCiBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0
b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdUeXBlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgY2hhciogaW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgY2hhciByZXN1bHRbMTI4XTsKKyAgICBjb25zdCBj
aGFyKiBiYXNpY05hbWU7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVz
KSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5IjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAi
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXlDbGFzczoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5Q2xhc3MiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJB
cnJheVdpdGhDb250aWd1b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhBcnJheVN0b3JhZ2Ui
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6
CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYmFzaWNOYW1lID0gIlVua25vd24h
IjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHNucHJpbnRmKAorICAgICAgICBy
ZXN1bHQsIHNpemVvZihyZXN1bHQpLCAiJXMlcyIsIGJhc2ljTmFtZSwKKyAgICAgICAgKGluZGV4
aW5nVHlwZSAmIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzKSA/ICJ8TWF5SGF2ZUluZGV4ZWRBY2Nl
c3NvcnMiIDogIiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE5ICszMiwyMSBAQCB0eXBl
ZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJl
c2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5
ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNDb250
aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJh
eVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNTbG93
UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIAogLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tp
bmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNrZWQg
b2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAzMjsgLy8gTWVhbnMgdGhhdCB0aGlz
IG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0Lgotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSA2NDsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMgID0gMzI7CiAKIC8vIExpc3Qg
b2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9u
QXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgPSBIYXNDb250aWd1b3VzOwogc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAgID0g
SGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7
IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXkiIGJ1dCB0aGlzIHdvdWxkIGxlYWQgdG8g
ZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0NvbnRpZ3Vv
dXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAg
ICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc1Nsb3dQ
dXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU0LDEwIEBAIHN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJheTogICAgICAgICAgICAgICAgICAgIFwK
ICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQpAQCAtNzYs
NiArODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0luZGV4aW5nSGVhZGVyKEluZAogICAg
IHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBlKTsKIH0KIAorc3RhdGljIGlubGluZSBi
b29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICByZXR1
cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKIHsKICAgICBy
ZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJh
eVN0b3JhZ2UpKTsKQEAgLTg2LDYgKzk3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZFVz
ZVNsb3dQdXQoSW5kZQogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBIYXNTbG93UHV0QXJy
YXlTdG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciogaW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhp
bmdUeXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDMxOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTMwMzE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNyw5ICszMzcsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNl
KEpTR2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQor
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVy
IHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgpAQCAtNDAy
LDEyICs0MDEsNzEgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFz
czoKKyAgICAgICAgaWYgKCFuZXdMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAg
ICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBl
eGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIGNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIH0K
KyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdM
ZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOgorICAgICAgICBpZiAobmV3TGVuZ3RoID09IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVu
Z3RoID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBk
byBmYXN0IHB1c2guCisgICAgICAgICAgICB8fCAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgKKyAgICAgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdM
ZW5ndGgsIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMobV9idXR0ZXJmbHkpKSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAg
IGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7
CisgICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bmV3TGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3
TGVuZ3RoOykKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIo
KTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1
cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0
aW9uLCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENS
QVNIKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIEpTVmFsdWUgSlNBcnJh
eTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWxlbmd0aC0tKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uY2xlYXIoKTsKKyAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAg
ICAKQEAgLTQzMSwyNiArNDg5LDI4IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotCi0gICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCi0g
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
LSAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAgICAgLy8gUmV0dXJu
IGVsZW1lbnQuCi0gICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGdldEFycmF5TGVuZ3RoKCkgLSAxOworICAgIC8vIExldCBl
bGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4
ZWMsIGluZGV4KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAgICBpZiAoIWRlbGV0ZVBy
b3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1l
dGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICBz
ZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgIC8vIFJldHVybiBlbGVtZW50LgorICAg
IHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVu
dGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtNDY0LDYgKzUyNCwyNiBAQCB2
b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAg
QVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBp
ZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChs
ZW5ndGggKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICAgICAgbWV0aG9k
VGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsKKyAg
ICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0
aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhl
eGVjLCBsZW5ndGgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IGxlbmd0aCgpOwogICAgICAgICBpZiAoYXR0ZW1wdFRvSW50ZXJjZXB0UHV0
QnlJbmRleE9uSG9sZShleGVjLCBvbGRMZW5ndGgsIHZhbHVlLCB0cnVlKSkgewpAQCAtNTA1LDE4
ICs1ODUsMTQgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAg
IH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKGNvdW50ID4gMCk7Ci0gICAgCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERh
dGEoKSk7Ci0gICAgCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7
CiAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFy
cmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwK
ICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAg
IGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJz
ZUluZGV4aW5nTW9kZSgpKQorICAgIGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciB8fCBpblNwYXJzZUluZGV4aW5nTW9kZSgpIHx8IHNob3VsZFVzZVNsb3dQdXQo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKCFvbGRMZW5ndGgpCkBAIC01NjUsMTcgKzY0MSw2OSBAQCBib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBBU1NFUlQoY291bnQgPiAw
KTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
IGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNh
c2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBvbGRM
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50
aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbworICAgICAgICAv
LyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5n
dGggLSAoc3RhcnRJbmRleCArIGNvdW50KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAg
ICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNv
dW50LCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgeworICAg
ICAgICAgICAgLy8gU3RvcmluZyB0byBhIGhvbGUgaXMgZmluZSBzaW5jZSB3ZSdyZSBzdGlsbCBo
YXZpbmcgYSBnb29kIHRpbWUuIEJ1dCByZWFkaW5nCisgICAgICAgICAgICAvLyBmcm9tIGEgaG9s
ZSBpcyB0b3RhbGx5IG5vdCBmaW5lLCBzaW5jZSB3ZSBtaWdodCBoYXZlIHRvIHJlYWQgZnJvbSB0
aGUgcHJvdG8KKyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdldCgpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCF2KSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRo
aXMgcGF0aCBpcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBtYWtlIHRoZSBzYW1lCisgICAgICAg
ICAgICAgICAgLy8gbWlzdGFrZSBpbiB0aGUgZnV0dXJlOiBzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZSgpIGNhbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgLy8gYWJvdXQgaG9sZXMg
KGF0IGxlYXN0IGZvciBub3cpLCBidXQgaXQgY2FuIGRldGVjdCB0aGVtIHF1aWNrbHkuIFNvCisg
ICAgICAgICAgICAgICAgLy8gd2UgY29udmVydCB0byBhcnJheSBzdG9yYWdlIGFuZCB0aGVuIGFs
bG93IHRoZSBhcnJheSBzdG9yYWdlIHBhdGggdG8KKyAgICAgICAgICAgICAgICAvLyBmaWd1cmUg
aXQgb3V0LgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5vIG5lZWQg
Zm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3VuZCBpbiB0aGUg
c2FtZSB2ZWN0b3IuCisgICAgICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCBvdXIgc3Rh
bmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgorICAgICAgICAg
ICAgLy8gYmFycmllci4KKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIHNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBhcnJheVN0b3JhZ2UoKSk7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5zaGlmdCBjYW4g
YmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAotYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3Vu
dCkKK2Jvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7CiAKICAgICBBU1NFUlQoc3RhcnRJbmRleCA8PSBsZW5ndGgpOwogCiAgICAgLy8g
SWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1h
bCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90
eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBz
dG9yYWdlLT5pblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkgfHwgc2hvdWxkVXNlU2xv
d1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBib29sIG1vdmVGcm9udCA9ICFzdGFydEluZGV4IHx8IHN0YXJ0SW5kZXggPCBsZW5n
dGggLyAyOwpAQCAtNjEwLDYgKzczOCw0OCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChF
eGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50KQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICAvLyBXZSBjb3VsZCBo
YW5kbGUgdGhpcy4gQnV0IGl0IHNob3VsZG4ndCBldmVyIGNvbWUgdXAsIHNvIHdlIHdvbid0Lgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBl
bnRpcmUgYXJyYXkgdG8gZG8gdGhlIHVuc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KKyAg
ICAgICAgLy8gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93LgorICAgICAgICBpZiAob2xk
TGVuZ3RoIC0gc3RhcnRJbmRleCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAgICAgICAg
ICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwg
Y291bnQsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgp
KSk7CisgICAgICAgIAorICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgb2xkTGVuZ3RoICsgY291bnQpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4OykgeworICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghdikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTk9URTogd2UncmUgbGVhdmluZyBiZWlu
ZyBnYXJiYWdlIGluIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IHdlIHNoaWZ0ZWQgb3V0Cisg
ICAgICAgIC8vIG9mLiBUaGlzIGlzIGZpbmUgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHJlcXVpcmVk
IHRvIHN0b3JlIG92ZXIgdGhhdCBhcmVhLCBhbmQKKyAgICAgICAgLy8gaW4gY29udGlndW91cyBt
b2RlIHN0b3JpbmcgaW50byBhIGhvbGUgaXMgZ3VhcmFudGVlZCB0byBiZWhhdmUgZXhhY3RseSB0
aGUgc2FtZQorICAgICAgICAvLyBhcyBzdG9yaW5nIG92ZXIgYW4gZXhpc3RpbmcgZWxlbWVudC4K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlOgorICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVj
LCBzdGFydEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CiBzdGF0aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikKIHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4o
YSktPmFzTnVtYmVyKCk7CkBAIC02MjQsNiArNzk0LDQ1IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KGMKICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZSh2YS0+c2Vj
b25kLCB2Yi0+c2Vjb25kKTsKIH0KIAordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZT4KK3ZvaWQgSlNBcnJheTo6c29ydE51bWVyaWNWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBj
YWxsRGF0YSkKK3sKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aENvbnRpZ3Vv
dXMgfHwgaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgCisgICAg
dW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOworICAgIHVuc2lnbmVkIG5ld1Jl
bGV2YW50TGVuZ3RoOworICAgIGNvbXBhY3RGb3JTb3J0aW5nPGluZGV4aW5nVHlwZT4oCisgICAg
ICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwKKyAgICAgICAgbmV3UmVsZXZhbnRMZW5n
dGgpOworICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YSA9IGluZGV4aW5nRGF0
YTxpbmRleGluZ1R5cGU+KCk7CisgICAgCisgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBBcnJheVdp
dGhBcnJheVN0b3JhZ2UgJiYgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpKSB7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAg
IGlmICghZGF0YVtpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1i
ZXJzID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgIHJldHVybiBzb3J0KGV4ZWMs
IGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAKKyAgICAvLyBGb3Ig
bnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBt
ZXJnZXNvcnQuIFdlCisgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJp
bGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAgICAvLyBzaWRlLWVmZmVjdCBm
cm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgorICAgIHFz
b3J0KGRhdGEsIG5ld1JlbGV2YW50TGVuZ3RoLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgcmV0dXJuOworfQorCiB2b2lkIEpTQXJy
YXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24s
IENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAgQVNT
RVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKQEAgLTYzMiwxMTcgKzg0MSwxMjkgQEAgdm9p
ZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIGNhc2UgQXJyYXlDbGFz
czoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBj
b21wYWN0Rm9yU29ydGluZygpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPihleGVjLCBjb21w
YXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICAgICAg
c2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFzdG9yYWdl
LT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJl
TnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCi0g
ICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3
aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgICAg
IC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJl
J3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcg
dGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgICAgIHFzb3J0KHN0b3Jh
Z2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFy
ZU51bWJlcnNGb3JRU29ydCk7Ci0gICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KGV4
ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKICAgICAgICAgcmV0dXJu
OwotICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLXZv
aWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRM
ZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKLSAgICAKLSAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJyYXlD
bGFzczoKKyAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQogICAgICAgICByZXR1cm47CisgICAgCisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNp
dmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KKyAg
ICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdp
Y2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQor
ICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlm
IHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisg
ICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBt
YWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCiAgICAgICAgIAotICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7Ci0gICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgQVNTRVJU
KCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
ICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhw
ZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQu
Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2lu
ZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVt
cG9yYXJ5Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9t
IGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRo
YXQgcmV0dXJuCi0gICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0
cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAg
ICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhyZWxldmFudExl
bmd0aCk7CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogICAgICAgICAKLSAg
ICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFs
dWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1
ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAg
ICAgICAgfQorICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgpOworICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5k
ZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVl
LmlzUHJpbWl0aXZlKCk7CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBm
b2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZh
bHVlcyBldmVuIGFmdGVyCi0gICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhj
ZXB0aW9uLgorICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNh
bGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9T
dHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAgICAKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAg
ICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxp
bmUoZXhlYyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsr
KQorICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5n
SW5saW5lKGV4ZWMpOwogICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFs
dWVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgeworICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8v
IEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBt
aWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0g
ICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBi
eSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXgg
c29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4K
ICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgICAgIGlmIChpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMpCi0gICAgICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwg
dmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1Bh
aXJGb3JRU29ydCk7Ci0jZWxzZQotICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkg
ZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgICAgICAvLyBF
Q01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFj
dGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIGlmIChpc1NvcnRpbmdQ
cmltaXRpdmVWYWx1ZXMpCiAgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6
ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0
KTsKKyAgICBlbHNlCisgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBs
aWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCisgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9l
cyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBl
cmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdl
ZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKKyAgICAvLyBpbmNy
ZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZh
bHVlcy4KKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQXJyYXlXaXRoQ29u
dGlndW91czoKKyAgICAgICAgZW5zdXJlQ29udGlndW91c0xlbmd0aChnbG9iYWxEYXRhLCByZWxl
dmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhl
IHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVj
dG9yIHN0b3JhZ2UsCi0gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRo
ZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgICAgICBpZiAoc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsKLSAgICAgICAg
ICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGlm
IChhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkgeworICAg
ICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFu
dExlbmd0aCk7CisgICAgICAgICAgICBiZWdpbiA9IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsK
ICAgICAgICAgfQotICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgo
KSA8IHJlbGV2YW50TGVuZ3RoKQorICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0
aChyZWxldmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
c1tpXS5maXJzdCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIGJl
Z2luW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgIAorICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworfQorCit2b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJ
bmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwor
ICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQ7CisgICAgICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3Ro
OworICAgICAgICBjb21wYWN0Rm9yU29ydGluZzxBcnJheVdpdGhDb250aWd1b3VzPigKKyAgICAg
ICAgICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwgbmV3UmVsZXZhbnRMZW5ndGgpOwog
ICAgICAgICAKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3Vz
PigKKyAgICAgICAgICAgIGV4ZWMsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5n
dGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oCisg
ICAgICAgICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQsIG5ld1JlbGV2YW50TGVuZ3Ro
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKKyAgICAgICAg
CisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPigKKyAg
ICAgICAgICAgIGV4ZWMsIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyOCwxMDggKzEw
NDksMTE2IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKICAgICBz
dGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAweDdGRkZGRkZGOyB9CiB9OwogCi12b2lkIEpT
QXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2Fs
bFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3RlbXBsYXRlPEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnRWZWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0
IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2Rl
KCkpOworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKTsKICAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewot
ICAgIGNhc2UgQXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBUaGlz
IGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4g
dG9OdW1iZXIuCiAgICAgICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNv
bXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCi0gICAgICAgIAotICAgICAgICAvLyBUaGUg
bWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xl
YXJseSB1cCB0byBubyBnb29kCi0gICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3Nl
ZC4KLSAgICAgICAgQVNTRVJUKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwotICAgICAgICBp
ZiAoYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8v
IFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBp
cyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNz
ZWQuCisgICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgIGlmICht
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oYXJyYXlTdG9yYWdlKCktPmxl
bmd0aCgpLCBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBBU1NFUlQo
IWFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIHVuc2lnbmVkIG5vZGVDb3Vu
dCA9IHVzZWRWZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHJl
bGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKKyAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1
c2VkVmVjdG9yTGVuZ3RoOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlQ291bnQpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFub2RlQ291bnQpCisgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUs
IDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247Ci0gICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwotICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICBBVkxUcmVlPEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdo
IGZvciAyXjMxIGl0ZW1zCisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsK
KyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOworICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVKUykKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRv
cHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVu
Y3Rpb24pLCAyKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKCF0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6
IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rvciwg
bWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVu
ZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCisgICAgLy8gRklYTUU6
IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rvciwg
bWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCisgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIg
dXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQg
PSAwOworICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgIHVuc2lnbmVkIG51bVVuZGVm
aW5lZCA9IDA7CiAgICAgICAgIAotICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBp
Z25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNl
cnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICAgICAgZm9yICg7IG51bURl
ZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgICAgIGlm
IChudW1EZWZpbmVkID4gYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgdHJlZS5p
bnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYg
KGkgPiBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Z2V0KCk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAgICAgIGlmICh2LmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKLSAgICAg
ICAgICAgICAgICB9CisgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlz
c2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBv
dGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgaWYgKG51bURlZmluZWQgPiBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNW
YWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsK
KyAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsK
KyAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
aWYgKGkgPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5nZXQo
KTsKKyAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
djsKKyAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAg
ICAgICArK251bURlZmluZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZDsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwKTsKKyAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKICAgICAgICAgCi0gICAgICAgIC8vIFRoZSBhcnJheSBzaXpl
IG1heSBoYXZlIGNoYW5nZWQuICBGaWd1cmUgb3V0IHRoZSBuZXcgYm91bmRzLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gbWluKGFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKSwgYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAvLyBUaGUgYXJyYXkg
c2l6ZSBtYXkgaGF2ZSBjaGFuZ2VkLiAgRmlndXJlIG91dCB0aGUgbmV3IGJvdW5kcy4KKyAgICB1
bnNpZ25lZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdU
eXBlPigpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgZWxlbWVudHNUb0V4dHJhY3RUaHJl
c2hvbGQgPSBtaW4obWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG51bURlZmluZWQpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkpKTsKLSAg
ICAgICAgdW5zaWduZWQgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNl
ZFZlY3Rvckxlbmd0aCwgbmV3VXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIHVuc2lnbmVkIGNs
ZWFyRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgdXNlZFZl
Y3Rvckxlbmd0aCk7Ci0gICAgICAgIAotICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBp
bnRvIG1fc3RvcmFnZS4KLSAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5
Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVh
c3QodHJlZSk7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzVG9FeHRy
YWN0VGhyZXNob2xkOyArK2kpIHsKLSAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRl
cl0udmFsdWUpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgaSA8IHVuZGVmaW5lZEVsZW1lbnRz
VGhyZXNob2xkOyArK2kpCi0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
c2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBp
biB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB1
bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgaSA8IGNsZWFyRWxlbWVudHNUaHJlc2hvbGQ7ICsr
aSkKLSAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAg
IHVuc2lnbmVkIGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkID0gbWluKG1pbihuZXdlc3RVc2Vk
VmVjdG9yTGVuZ3RoLCBudW1EZWZpbmVkKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpKSk7CisgICAgdW5zaWduZWQgdW5kZWZpbmVkRWxlbWVu
dHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgbmV3VXNlZFZlY3Rvckxl
bmd0aCk7CisgICAgdW5zaWduZWQgY2xlYXJFbGVtZW50c1RocmVzaG9sZCA9IG1pbihuZXdlc3RV
c2VkVmVjdG9yTGVuZ3RoLCB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgCisgICAgLy8gQ29w
eSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAgQVZMVHJlZTxBVkxUcmVlQWJz
dHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOworICAgIGl0ZXIuc3Rh
cnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzVG9F
eHRyYWN0VGhyZXNob2xkOyArK2kpIHsKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlw
ZT4oKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sq
aXRlcl0udmFsdWUpOworICAgICAgICArK2l0ZXI7CisgICAgfQorICAgIC8vIFB1dCB1bmRlZmlu
ZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgZm9yICh1bnNpZ25lZCBpID0gZWxlbWVudHNUb0V4dHJh
Y3RUaHJlc2hvbGQ7IGkgPCB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgKytpKQorICAgICAg
ICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldFVuZGVmaW5lZCgpOworCisgICAg
Ly8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0
LgorICAgIGZvciAodW5zaWduZWQgaSA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkOyBpIDwg
Y2xlYXJFbGVtZW50c1RocmVzaG9sZDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhp
bmdUeXBlPigpW2ldLmNsZWFyKCk7CisgICAgCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRl
eGluZ1R5cGUpKQorICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG5ld1VzZWRWZWN0b3JMZW5ndGg7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3Qg
Q2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUo
KSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGFy
cmF5U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yID0gdW5kZWZpbmVkRWxlbWVudHNUaHJl
c2hvbGQ7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBzb3J0VmVjdG9y
PEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHNvcnRWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVjLCBjb21w
YXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtOTM4LDExMyArMTE2NywxMjEgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFy
a2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgdW5z
aWduZWQgdmVjdG9yRW5kOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOworICAg
IAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBB
cnJheUNsYXNzOgogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
Q29udGlndW91czogeworICAgICAgICB2ZWN0b3JFbmQgPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CisgICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAotICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5k
OyArK2kpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3Rvcltp
XTsKLSAgICAgICAgICAgIGlmICghdikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBm
b3IgKDsgaSA8IHN0b3JhZ2UtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgICAgICBhcmdzLmFwcGVu
ZChnZXQoZXhlYywgaSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOworICAgICAgICB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCks
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9CisgICAgCisgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgIGlm
ICghdikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsK
ICAgICB9CisgICAgCisgICAgZm9yICg7IGkgPCBsZW5ndGgoKTsgKytpKQorICAgICAgICBhcmdz
LmFwcGVuZChnZXQoZXhlYywgaSkpOwogfQogCiB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50
cyhFeGVjU3RhdGUqIGV4ZWMsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1aW50MzJfdCBsZW5ndGgp
CiB7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0
b3I7CisgICAgdW5zaWduZWQgdmVjdG9yRW5kOworICAgIAogICAgIEFTU0VSVChsZW5ndGggPT0g
dGhpcy0+bGVuZ3RoKCkpOwogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAg
IGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpOworICAgICAgICB2ZWN0b3JFbmQgPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICB1bnNp
Z25lZCBpID0gMDsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9y
YWdlLT5tX3ZlY3RvcjsKLSAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsg
KytpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07
Ci0gICAgICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgY2FsbEZyYW1l
LT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB2ZWN0b3JFbmQgPSBtaW4obGVu
Z3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kp
IHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAg
ICBpZiAoIXYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1
bWVudChpLCB2LmdldCgpKTsKICAgICB9CisgICAgCisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsr
aSkKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwogfQog
Ci11bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCit0ZW1wbGF0ZTxJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyh1bnNp
Z25lZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKQogewogICAgIEFT
U0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9
PSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNlIEFycmF5Q2xhc3M6Ci0gICAgICAgIHJldHVy
biAwOwotCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwotICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgo
KSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIG15UmVsZXZhbnRMZW5n
dGggPSByZWxldmFudExlbmd0aDxpbmRleGluZ1R5cGU+KCk7CisgICAgCisgICAgbnVtRGVmaW5l
ZCA9IDA7CisgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQg
PSAwOworICAgIGZvciAoOyBudW1EZWZpbmVkIDwgbXlSZWxldmFudExlbmd0aDsgKytudW1EZWZp
bmVkKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClb
bnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKDsgbnVtRGVm
aW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgICAg
ICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgKytudW1VbmRl
ZmluZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Ci0gICAg
ICAgICAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG15UmVsZXZh
bnRMZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhp
bmdUeXBlPigpW2ldLmdldCgpOworICAgICAgICBpZiAodikgeworICAgICAgICAgICAgaWYgKHYu
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251
bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBu
dW1VbmRlZmluZWQ7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNl
TWFwKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZl
Y3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7Ci0gICAgICAgIAotICAgICAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLSAgICAgICAgCi0gICAgICAg
IHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KICAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KKyAg
ICBuZXdSZWxldmFudExlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgCisg
ICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKQorICAgICAgICBBU1NFUlQoIWFy
cmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtRGVmaW5lZDsgaSA8IG5ld1JlbGV2YW50TGVuZ3RoOyArK2kpCisgICAgICAgIGluZGV4aW5n
RGF0YTxpbmRleGluZ1R5cGU+KClbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbmV3UmVsZXZhbnRMZW5ndGg7IGkgPCBteVJlbGV2YW50TGVuZ3RoOyArK2kpCisgICAg
ICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uY2xlYXIoKTsKIAorICAgIGlmICho
YXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdSZWxldmFudExlbmd0aDsKK30KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZp
c2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDYwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHB1c2goRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgcG9wKEV4
ZWNTdGF0ZSopOwogCi0gICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7Ci0gICAgICAgIGJvb2wgdW5zaGlmdENvdW50
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAgICAg
ICAgZW51bSBTaGlmdENvdW50TW9kZSB7CisgICAgICAgICAgICAvLyBUaGlzIGZvcm0gb2Ygc2hp
ZnQgaGludHMgdGhhdCB3ZSdyZSBkb2luZyBxdWV1ZWluZy4gV2l0aCB0aGlzIGFzc3VtcHRpb24g
aW4gaGFuZCwKKyAgICAgICAgICAgIC8vIHdlIGNvbnZlcnQgdG8gQXJyYXlTdG9yYWdlLCB3aGlj
aCBoYXMgcXVldWUgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIFNoaWZ0Q291bnRGb3JTaGlm
dCwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBmb3JtIG9mIHNoaWZ0IGhpbnRz
IHRoYXQgd2UncmUganVzdCBkb2luZyBjYXJlIGFuZCBmZWVkaW5nIG9uIGFuIGFycmF5IHRoYXQK
KyAgICAgICAgICAgIC8vIGlzIHByb2JhYmx5IHR5cGljYWxseSB1c2VkIGZvciBvcmRpbmFyeSBh
Y2Nlc3Nlcy4gV2l0aCB0aGlzIGFzc3VtcHRpb24gaW4gaGFuZCwKKyAgICAgICAgICAgIC8vIHdl
IHRyeSB0byBwcmVzZXJ2ZSB3aGF0ZXZlciBpbmRleGluZyB0eXBlIGl0IGhhcyBhbHJlYWR5Lgor
ICAgICAgICAgICAgU2hpZnRDb3VudEZvclNwbGljZQorICAgICAgICB9OworCisgICAgICAgIGJv
b2wgc2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENv
dW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGJvb2wgc2hpZnRDb3Vu
dEZvclNwbGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVk
IGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBbnlJ
bmRleGluZ1R5cGUoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICB9CisgICAgICAg
IHRlbXBsYXRlPFNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgorICAgICAgICBib29sIHNo
aWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBj
b3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzaGlmdENvdW50TW9kZSkgewor
ICAgICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHNoaWZ0Q291bnRGb3JTaGlmdChleGVjLCBzdGFydEluZGV4LCBjb3VudCk7CisgICAgICAg
ICAgICBjYXNlIFNoaWZ0Q291bnRGb3JTcGxpY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNo
aWZ0Q291bnRGb3JTcGxpY2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCB1bnNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5k
ZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGJvb2wg
dW5zaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAg
ICAgfQorICAgICAgICB0ZW1wbGF0ZTxTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KKyAg
ICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzaGlm
dENvdW50TW9kZSkgeworICAgICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5kZXgs
IGNvdW50KTsKKyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNwbGljZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50Rm9yU3BsaWNlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNv
dW50KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAog
ICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVy
Jik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSos
IHVpbnQzMl90IGxlbmd0aCk7CkBAIC05NCwxOCArMTQ2LDQ0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2VPck51bGwoKTsKICAgICAgICAgICAgIGlmICghc3RvcmFnZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAg
ICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlw
ZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAg
ICAgIGJvb2wgc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwogCi0gICAgICAgIHZvaWQgc2V0TGVuZ3Ro
V3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0KKyAgICAgICAgYm9vbCB1bnNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3Rh
cnRJbmRleCwgdW5zaWduZWQgY291bnQpOworICAgICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25l
ZCBjb3VudCwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291
bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCBib29sLCB1bnNpZ25lZCk7CisKKyAgICAgICAgdGVt
cGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBzb3J0TnVtZXJp
Y1ZlY3RvcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICB0ZW1w
bGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0
ZWRWZWN0b3IoRXhlY1N0YXRlKiwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWdu
ZWQgcmVsZXZhbnRMZW5ndGgpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY29tcGFjdEZv
clNvcnRpbmcoKTsKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4K
KyAgICAgICAgdm9pZCBzb3J0VmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFyZUZ1bmN0
aW9uLCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmKTsKKworICAgICAgICBib29sIHNldExlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRo
cm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0
YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBs
YXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgY29tcGFjdEZvclNv
cnRpbmcodW5zaWduZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCk7
CiAgICAgfTsKIAorICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1
dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7
CisgICAgICAgIEluZGV4aW5nSGVhZGVyIGhlYWRlcjsKKyAgICAgICAgaGVhZGVyLnNldFZlY3Rv
ckxlbmd0aChzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBoZWFk
ZXIuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
QnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBo
ZWFkZXIsIGhlYWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNy
ZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCkBAIC0xMjEsNyArMTk5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
aW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxE
YXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAg
ICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250
aWd1b3VzKSkgeworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5
QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJU
KGluaXRpYWxMZW5ndGggPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICB8fCAoaW5pdGlhbExl
bmd0aCAmJiBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkpOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFs
RGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBK
U0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXkt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0x
MzMsMTUgKzIxOSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHZlY3Rvckxlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgMCk7Ci0gICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBp
bmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7Ci0gICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0g
ICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKLSAgICAgICAgc3RvcmFnZS0+bV9zcGFy
c2VNYXAuY2xlYXIoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGlu
aXRpYWxMZW5ndGg7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OworICAgICAgICBpZiAo
TElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGlndW91cykp
IHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRl
bXApKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnV0dGVyZmx5ID0g
QnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+
c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHZvaWQqIHRlbXA7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAs
IDApOworICAgICAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5n
SGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgICAgICAgICBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0
YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CiAgICAg
ICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVP
YmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpKTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJh
eVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJyYXlTdHJ1
Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJy
YXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90
b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1
cmVGb3JTbG93UHV0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0
KCksIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVz
QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQ
cm90b3R5cGUuZ2V0KCkpKTsKIApAQCAtMzU3LDcgKzM1OCw3IEBAIE9iamVjdHNXaXRoQnJva2Vu
SW5kZXhpbmdGaW5kZXI6Ok9iamVjdHMKIGlubGluZSBib29sIGhhc0Jyb2tlbkluZGV4aW5nKEpT
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgLy8gVGhpcyB3aWxsIGNoYW5nZSBpZiB3ZSBoYXZlIG1v
cmUgaW5kZXhpbmcgdHlwZXMuCi0gICAgcmV0dXJuICEhKG9iamVjdC0+c3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICByZXR1cm4gISEob2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFzQ29udGln
dW91cykpOwogfQogCiB2b2lkIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXI6Om9wZXJh
dG9yKCkoSlNDZWxsKiBjZWxsKQpAQCAtNDEwLDYgKzQxMSw3IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OmhhdmVBQmFkVGltZShKU0dsb2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgSlNBcnJh
eSBhbGxvY2F0aW9ucyB0aGF0IGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBmcm9tCiAg
ICAgLy8gdGhpcyBvYmplY3Qgbm93IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNsb3dQdXQu
CiAgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJheVN0cnVj
dHVyZUZvclNsb3dQdXQuZ2V0KCkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9y
YWdlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQo
KSk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBoYXZlIGlu
ZGV4ZWQgc3RvcmFnZSBzd2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGluZGV4ZWQg
c3RvcmFnZS4KQEAgLTQ4NSw2ICs0ODcsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFtZVNjb3Bl
U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1bWVudHNT
dHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3RydWN0
dXJlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVjdHVyZVdp
dGhBcnJheVN0b3JhZ2UpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5
U3RydWN0dXJlRm9yU2xvd1B1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEzMDMxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw2ICsxMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRvIG1fYXJy
YXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUgYSBiYWQg
dGltZS4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVjdHVyZVdp
dGhBcnJheVN0b3JhZ2U7IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNs
b3dQdXQgYXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsKICAgICAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlOwogICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1
cmU7CkBAIC0yNjcsNyArMjY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cnVjdHVy
ZSogbmFtZVNjb3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZS5nZXQo
KTsgfQorICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdldCgpOyB9
CiAgICAgICAgIHZvaWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4gJm1fYXJy
YXlTdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmVXaXRo
QXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdl
OyB9CiAgICAgICAgIFN0cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1
cmUqIGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxi
YWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBjYWxs
YmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1bmN0aW9u
U3RydWN0dXJlLmdldCgpOyB9CkBAIC00NzksNyArNDgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAw
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7CisgICAg
ICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpbml0aWFsTGVu
Z3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPyBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlV2l0aEFycmF5U3RvcmFnZSgpIDogZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBp
bml0aWFsTGVuZ3RoKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1w
dHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24g
MTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMjQgKzEzMSw0MCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdl
dDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZTsKKyAg
ICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9
IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3Vy
Y2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3
QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAg
ICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZy
b21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAgICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKLSAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIChjdXJyZW50
VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBjb3VudCA9
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAg
ICAgICAgIGlmIChuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGNv
dW50LS0pIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2Ur
KyktPmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1dHRlcmZseSA9IG5l
d0J1dHRlcmZseTsKQEAgLTE1OCw2ICsxNzQsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgIAogICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBh
cHByb3ByaWF0ZS4KICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCkBAIC0yMzQsNiArMjUzLDIwIEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAg
ICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bGVuZ3RoKCkpCkBAIC0zNTEsNiArMzg0LDE2IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
cygpW3Byb3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFs
dWUpOworICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpCisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwcm9wZXJ0eU5hbWUg
KyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwpAQCAtNDQzLDYgKzQ4NiwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjplbnRlckRpY3Rpb25hcnlJCiB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgLy8gTk9URTogdGhpcyBpcyBob3JyaWJseSBpbmVmZmljaWVudCwgYXMg
aXQgd2lsbCBwZXJmb3JtIHR3byBjb252ZXJzaW9ucy4gV2UgY291bGQgb3B0aW1pemUKKyAgICAg
ICAgLy8gdGhpcyBjYXNlIGlmIHdlIGV2ZXIgY2FyZWQuCisgICAgICAgIGVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNv
bnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhn
bG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICBicmVhazsK
QEAgLTQ2NSw2ICs1MTMsMjQgQEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4
ZWRBYwogICAgIGdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRpbWUoZ2xvYmFsRGF0YSk7CiB9CiAK
K1dyaXRlQmFycmllcjxVbmtub3duPiogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3Vz
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VS
VChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0g
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwg
IWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZSgp
LT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVT
cGFyc2UoKSk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBC
QVNFX1ZFQ1RPUl9MRU4pOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChsZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZl
Y3Rvckxlbmd0aCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250
aWd1b3VzKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdT
dHJ1Y3R1cmUpOworICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKK30KKwog
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCiB7CiAg
ICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CkBA
IC00ODAsNyArNTQ2LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOwotICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRJbmRleGluZ1RyYW5z
aXRpb24oKSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1
Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0QnV0dGVyZmx5KGdsb2Jh
bERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtNDkwLDE2ICs1NTYsOTYgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEFycgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFT
RV9WRUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCit7CisgICAgQVNT
RVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisg
ICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwor
ICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lU2l6ZSgpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5
OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNh
cGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAg
CisgICAgbWVtY3B5KAorICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBw
cm9wZXJ0eVNpemUsCisgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworICAgIAorICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKG5lZWRlZExl
bmd0aCk7CisgICAgbmV3U3RvcmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3
U3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4Qmlh
cyA9IDA7CisgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gcHVibGljTGVuZ3RoOyBpLS07KSB7CisgICAgICAgIEpTVmFsdWUgdiA9
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgIGlmICghdikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKys7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRy
YW5zaXRpb24pOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5l
d1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ld1N0b3JhZ2U7Cit9CisKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1
cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9u
LCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsK
K30KKworV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Ns
b3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJl
KCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJy
YXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7
CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOwor
ICAgICAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRh
KTsKKyAgICAgICAgCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
IGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZShnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9
CisKK0J1dHRlcmZseSogSlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgaWYg
KFVOTElLRUxZKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKKyAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpLT5idXR0ZXJm
bHkoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCisg
ICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgcmV0dXJu
IEJ1dHRlcmZseTo6ZnJvbUNvbnRpZ3VvdXMoY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFs
RGF0YSwgMCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQpAQCAtNTA3LDYgKzY1MywxMCBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBl
ZmZpY2llbnQsIGlmIHdlIGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIAogICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9i
YWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKQEAgLTUyNiw2
ICs2NzYsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9p
ZCBKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJh
eVN0b3JhZ2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5
U3RvcmFnZSk7CkBAIC01NjksOCArNzI0LDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBl
KEpTR2xvYmFsRGF0YQogICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUs
IFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERh
dGEsIG5ld1N0cnVjdHVyZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEpOwogfQogCiBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzA0LDYgKzg1
OCwxNCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlm
IChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC04NzcsNiAr
MTAzOSwxNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgdW5zaWduZWQg
dXNlZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAt
MTEwMiw5ICsxMjc1LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5
KAogewogICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwogICAgIAotICAgIGlm
IChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAgICAg
ICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
LQogICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAgICAvLyBGYXN0IGNh
c2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQog
ICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBp
ZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCkBA
IC0xMTE0LDEwICsxMjg0LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9w
ZXJ0eSgKICAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVz
Y3JpcHRvci52YWx1ZSgpLCAwLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxk
VGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgfQotCisgICAg
ICAgIAogICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB9CiAKKyAgICBpZiAoZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCisgICAgICAgIG5vdGlm
eVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisKICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLmdldCgpOwogICAgIEFTU0VSVChtYXApOwogCkBAIC0xMjY2LDYgKzE0MzksMzUg
QEAgYm9vbCBKU09iamVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbgogICAgIHJldHVybiBh
c09iamVjdChwcm90b3R5cGVWYWx1ZSktPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhv
bGVGb3JQcm90b3R5cGUoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAor
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRo
b3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIAorICAgIC8v
IEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4gdGhl
IHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2
ZWN0b3IgbGVuZ3RoLgorICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgIAorICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKKyAgICAgICAgfHwg
KGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoaSwgY291bnRFbGVtZW50c0luQ29udGlndW91cyhtX2J1dHRlcmZseSkpKSkg
eworICAgICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICBjb252ZXJ0
Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlQXJyYXlTdG9yYWdl
KTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0aGlzLCBpLCB2
YWx1ZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaSA+PSBhcnJheVN0b3JhZ2UoKS0+bGVuZ3Ro
KCkpOworICAgICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZ2xvYmFsRGF0YSwg
aSArIDEpOworCisgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlKTsKK30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTM0OCwxNyArMTU1
MCwyOSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSB7
Ci0gICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAg
ICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csCisgICAgICAgICAgICAgICAgZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERh
dGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHsKLSAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIDAsIDApKTsKKyAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkg
eworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7
CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5pdGlh
bENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0
TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAxOworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRo
b3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC0xMzg0LDggKzE1OTgsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFy
cmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNT
RVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoYXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FS
UkFZX0lOREVYKTsKIApAQCAtMTQ2NywxNCArMTY4MywzMiBAQCBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewotICAg
ICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCi0gICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwotICAgICAg
ICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKLSAgICAgICAgCi0gICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBpZiAoaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAg
ICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCisgICAgICAgICAgICAgICAgZW5z
dXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2Jh
bERhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRy
aWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkg
eworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAg
ICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1
ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ5OSwxMiArMTczMyw3IEBA
IEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICgh
Y3VycmVudFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgo
ZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1h
dGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAg
IGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAg
ICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAg
ICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4g
MSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1l
c1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBB
U1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUyNCw5ICsxNzUz
LDEwIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAg
dmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5n
dGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQ1JBU0goKTsKQEAgLTE1MzUsNiArMTc2NSwxNiBAQCBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aCh2ZWN0
b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7CiB9CiAKK3Vuc2lnbmVkIEpTT2JqZWN0
Ojpjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAg
IHVuc2lnbmVkIG51bVZhbHVlcyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBpZiAoYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0pCisgICAgICAgICAgICBudW1WYWx1ZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG51
bVZhbHVlczsKK30KKwogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8gVGhpcyBm
dW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0
YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1
ZSBtYXAKQEAgLTE1NDMsNiArMTc4MywxMCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rv
ckxlbmd0aChKU0dsCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIAorICAgIGlmIChuZXdMZW5ndGggPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3Rvcihu
ZXdMZW5ndGgsIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsK
ICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKQEAg
LTE1NzQsNiArMTgxOCwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChK
U0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3Vv
dXNMZW5ndGhTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChoYXND
b250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChsZW5n
dGggPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIAorICAgIHVuc2lnbmVkIG5l
d1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKAorICAgICAgICBsZW5ndGggPDwgMSwKKyAgICAgICAg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgbmV3VmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJmbHktPnNl
dFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0
Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUp
OwpAQCAtMTYwMiw2ICsxODYyLDE3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZs
eTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49
IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTE2MSw4ICsxNjIsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAt
MjA3LDYgKzIwOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsK
ICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjMxLDEyICsyMzcsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgaWYgKGkg
PCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2KQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjY3LDkgKzI3
NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
LSAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpCkBAIC0yODUsOCArMjkzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTYsMTUg
KzMwNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChp
ICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHgg
PSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHgu
Z2V0KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAg
ICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdl
LT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChp
ICsgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChpIDwg
c3RvcmFnZS0+bGVuZ3RoKCkpOwpAQCAtMzMxLDYgKzM1NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXA7CkBAIC0zNDQsNiArMzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5pblNwYXJzZU1vZGUoKTsKQEAgLTU0MSw2ICs1NjYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIGZvby0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZSguLi4p
OwogICAgICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90
b3R5cGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIAorICAgICAgICAvLyBSZXR1
cm5zIDAgaWYgY29udGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJl
Y2F1c2UKKyAgICAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBvciBiZWNhdXNlIHdl
J3JlIGhhdmluZyBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVu
c3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhn
bG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQg
dGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQog
ICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3
b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQogICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVk
IHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKQEAgLTU1Myw2ICs1
ODgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlT
dG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgQnV0
dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzSW5kZXhlZFByb3BlcnRpZXMoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlSW5kZXhlZFN0
b3JhZ2VTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQpAQCAtNjE1LDExICs2NTgsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwog
ICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJik7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3JlYXRlSW5pdGlhbENvbnRp
Z3VvdXMoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5v
blByb3BlcnR5VHJhbnNpdGlvbik7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIEFy
cmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBkZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZvaWQgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsK
IAogICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIG5ld0xlbmd0aCk7CkBAIC02MzAsNiArNjc4LDU2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYp
OwogICAgICAgICAKICAgICAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25I
b2xlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1
aWNrbHkgdG8gc3VjY2VlZCBhbmQgeW91J3JlIHN1cmUgdGhhdAorICAgICAgICAvLyB0aGUgYXJy
YXkgaXMgY29udGlndW91cy4KKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFT
U0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVu
Z3RoKQorICAgICAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KGdsb2JhbERh
dGEsIGxlbmd0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KTsKKyAg
ICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogaW5kZXhpbmdEYXRhKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB1bnNpZ25l
ZCByZWxldmFudExlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbigKKyAgICAgICAgICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkBAIC02NjQsNyArNzYyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBl
bnN1cmVDb250aWd1b3VzTGVuZ3RoU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVu
c3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBBcnJheVN0b3JhZ2Uq
IGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEJ1dHRlcmZs
eSogZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTMwMzE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRl
eChFeGVjCiAKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXpl
ID0gMjU2OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogCiAgICAgaWYgKCEq
dGhpcykKQEAgLTIxMyw5ICsyMTMsMTIgQEAgY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKSBj
b25zdAogICAgICAgICB1LmFzRG91YmxlID0gYXNEb3VibGUoKTsKICAgICAgICAgc25wcmludGYo
ZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMy
c1sxXSwgdS5hc1R3b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5kaWYKLSAgICB9IGVsc2Ug
aWYgKGlzQ2VsbCgpKQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6
ICVwIiwgYXNDZWxsKCkpOwotICAgIGVsc2UgaWYgKGlzVHJ1ZSgpKQorICAgIH0gZWxzZSBpZiAo
aXNDZWxsKCkpIHsKKyAgICAgICAgc25wcmludGYoCisgICAgICAgICAgICBkZXNjcmlwdGlvbiwg
c2l6ZSwgIkNlbGw6ICVwICglcDogJXMsICVzKSIsCisgICAgICAgICAgICBhc0NlbGwoKSwgYXND
ZWxsKCktPnN0cnVjdHVyZSgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5j
bGFzc05hbWUsCisgICAgICAgICAgICBpbmRleGluZ1R5cGVUb1N0cmluZyhhc0NlbGwoKS0+c3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOworICAgIH0gZWxzZSBp
ZiAoaXNUcnVlKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiVHJ1ZSIp
OwogICAgIGVsc2UgaWYgKGlzRmFsc2UoKSkKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24s
IHNpemUsICJGYWxzZSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBP
cHRpb25zOjppbml0aWFsaXplKCkKICNpZiAhRU5BQkxFKFlBUlJfSklUKQogICAgIHVzZVJlZ0V4
cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYKLQorICAgIAogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3
aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CiAgICAgQVNT
RVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9y
T3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVB
ZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIzLDExICszMjMsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdElu
Q2hhaW5NYXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVy
ZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0dXJlOjpu
ZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJbmRleGVkUHJv
cGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWlu
TWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5n
QUJhZFRpbWUoKSkKKyAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpCisgICAgICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1l
KCk7Cit9CisKK05vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5
U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdAoreworICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGlu
ZygpKQogICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIAog
ICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcg
KzE1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBhbnlPYmpl
Y3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CiAgICAgICAgIAot
ICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9u
KCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdDsKKyAg
ICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRp
b24oKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lk
IHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGds
b2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
Rmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5k
aWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KIC8vIElmIGFueSBv
ZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJl
IDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVDb250aWd1b3Vz
LAogICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlLAogICAgIEFsbG9jYXRlU2xvd1B1dEFycmF5U3Rv
cmFnZSwKICAgICBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC01NywxMiArNTgsMTYg
QEAgaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eQogaW5saW5lIEluZGV4
aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewogICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAg
IGNhc2UgQWxsb2NhdGVDb250aWd1b3VzOgorICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgKEhh
c0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKSk7CisgICAgICAgIHJldHVy
biBvbGRUeXBlIHwgSGFzQ29udGlndW91czsKICAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdl
OgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0
dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzQXJyYXlTdG9yYWdlOwogICAgIGNh
c2UgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8
IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXND
b250aWd1b3VzKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBTd2l0Y2hUb1Ns
b3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9y
YWdlKTsKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIEhhc0NvbnRpZ3VvdXMpKTsKICAgICAg
ICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlOwogICAgIGNhc2UgQWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIG9s
ZFR5cGUgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01h
dGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzA0LDYgKzMwNCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9v
bCBoYXNUd29PCiAgICAgcmV0dXJuICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlU
d28oVCB2YWx1ZSkKK3sKKyAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAg
IC8vICAgKHZhbHVlICogMyArIDEpIC8gMjsKKyAgICAvLyBvcjoKKyAgICAvLyAgICh1bnNpZ25l
ZCljZWlsKHZhbHVlICogMS41KSk7CisgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBp
bnRlcm5hbCBvdmVyZmxvdy4KKyAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAodmFs
dWUgJiAxKTsKK30KKwogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYg
IU9TKFNPTEFSSVMpCiB1c2luZyBzdGQ6OmlzZmluaXRlOwogI2lmICFDT01QSUxFUl9RVUlSSyhH
Q0MxMV9HTE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>
<flag name="commit-queue"
          id="180217"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167599</attachid>
            <date>2012-10-08 13:45:20 -0700</date>
            <delta_ts>2012-10-08 16:51:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>holycontiguous_12.patch</filename>
            <type>text/plain</type>
            <size>319504</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOCBA
QAorMjAxMi0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcga2luZCBvZiBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgY2FsbGVkIENvbnRpZ3VvdXMsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgIAorICAgICAgICAtIE5vIGhlYWRlciBiaXRzIGJleW9uZCBJ
bmRleGVkSGVhZGVyLiBUaGlzIHJlc3VsdHMgaW4gYSAxNiBieXRlIHJlZHVjdGlvbgorICAgICAg
ICAgIGluIG1lbW9yeSB1c2FnZSBwZXIgYXJyYXkgdmVyc3VzIGFuIEFycmF5U3RvcmFnZSBhcnJh
eS4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHRoYXQgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBm
b3IgYW4gZW1wdHkgYXJyYXkgaXMgbm93IGp1c3QgMyAqIDggb24gYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LiBPZiB0aGF0LCBvbmx5IDggYnl0ZXMgYXJlIGFycmF5LXNwZWNpZmlj
OyB0aGUgcmVzdCBpcworICAgICAgICAgIG91ciBzdGFuZGFyZCBvYmplY3QgaGVhZGVyIG92ZXJo
ZWFkLgorICAgICAgICAKKyAgICAgICAgLSBObyBuZWVkIGZvciBob2xlIGNoZWNrcyBvbiBzdG9y
ZS4gVGhpcyByZXN1bHRzIGluIGEgfjQlIHNwZWVkLXVwIG9uCisgICAgICAgICAgS3Jha2VuIGFu
ZCBhIH4xJSBzcGVlZC11cCBvbiBWOHY3LgorICAgICAgICAKKyAgICAgICAgLSBwdWJsaWNMZW5n
dGggPD0gdmVjdG9yTGVuZ3RoLiBUaGlzIG1lYW5zIHRoYXQgZG9pbmcgbmV3IEFycmF5KGJsYWgp
CisgICAgICAgICAgaW1tZWRpYXRlbHkgYWxsb2NhdGVzIHJvb20gZm9yIGJsYWggZWxlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIE5vIHNwYXJzZSBtYXAgb3IgaW5kZXggYmlhcy4KKyAgICAg
ICAgCisgICAgICAgIElmIHlvdSBldmVyIGRvIHRoaW5ncyB0byBhbiBhcnJheSB0aGF0IHdvdWxk
IHJlcXVpcmUgcHVibGljTGVuZ3RoID4KKyAgICAgICAgdmVjdG9yTGVuZ3RoLCBhIHNwYXJzZSBt
YXAsIG9yIGluZGV4IGJpYXMsIHRoZW4gd2Ugc3dpdGNoIHRvIEFycmF5U3RvcmFnZQorICAgICAg
ICBtb2RlLiBUaGlzIGhhcHBlbnMgc2VlbXMgdG8gbmV2ZXIgaGFwcGVuIGluIGFueSBiZW5jaG1h
cmsgd2UgdHJhY2ssIGFuZAorICAgICAgICBpcyB1bmxpa2VseSB0byBoYXBwZW4gdmVyeSBmcmVx
dWVudGx5IG9uIGFueSB3ZWJzaXRlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6
CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6
QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFs
SW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5o
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6
Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToK
KyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNK
U0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVU
b0hvbGUpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAg
KEpTQzo6REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6
OkRGRzo6cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6Cisg
ICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hl
R2V0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
IChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnB1
dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKToKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0
QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlT
dG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
cmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKFNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Njb3BlOjpTYW1wbGluZ1Njb3BlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdTY29wZTo6flNh
bXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBpbGF0aW9u
SW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxhdGlvbklu
Zm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEFsbG9jYXRlSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19h
cnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaDoKKyAgICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rv
cik6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OnVuc2hpZnQpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5
Lmg6CisgICAgICAgIChCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21Q
b2ludGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5OjpwdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0UHVibGljTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OmNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21D
b250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaDoK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6QnV0dGVy
Zmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdUeXBlVG9TdHJpbmcpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpoYXNDb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojpzb3J0TnVtZXJpY1ZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVj
dG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb21w
YWN0Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNoaWZ0Q291bnRGb3JTcGxpY2UpOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNoaWZ0Q291bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291
bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNwbGlj
ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmlzTGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpjcmVhdGVDb250aWd1
b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoK
KyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjphZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNv
bnRpZ3VvdXNTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFn
ZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0
Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJv
dG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3VudEVsZW1l
bnRzSW5Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dHJ5R2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHlG
b3JQdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpoYXNTcGFyc2VNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFy
c2VJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJ
bmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nRGF0YSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpyZWxldmFudExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9KU1Zh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZGVzY3JpcHRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0M6Om5ld0luZGV4
aW5nVHlwZSk6CisKIDIwMTItMTAtMDcgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAg
PGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZW5hbWUgZmlyc3Qvc2Vj
b25kIHRvIGtleS92YWx1ZSBpbiBIYXNoTWFwIGl0ZXJhdG9ycwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAg
U0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKICAgICBydW50aW1lL0lkZW50aWZp
ZXIuY3BwCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKICAgICBy
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1g4NkFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggXApAQCAtNTE5LDYgKzUy
MCw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nVHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMzAz
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtMTk5LDYgKzE5OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcCBcCiAgICAgcnVudGltZS9PcHRpb25zLmNwcCBcCiAgICAgcnVudGltZS9JZGVudGlmaWVy
LmNwcCBcCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwIFwKICAgICBydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwIFwKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwIFwK
ICAgICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjIs
NiArNTIyLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5cGUuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNTc0LDYgKzE1NzgsMTAgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQnlWYWxJbmZv
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGJ5dGVjb2RlXENhbGxMaW5rSW5mby5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBACiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBDRDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1
MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRC
RDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2
MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3
QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1v
blNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcCAqLzsgfTsKIAkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE2NSw2ICsxNjYsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNE
QjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3
QjI5NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJB
OSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0Ux
NDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZh
bEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0Qg
LyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEw
MTU3RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcw
MDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTg0OCw2
ICs4NTAsNyBAQAogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhN
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYx
QzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJ
bmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5k
ZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYxNUQxNEI3
QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVC
MTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzgsNiArOTQxLDcgQEAKIAkJMEY3NzAwOEUx
NDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyog
REZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ND
YWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlE
MEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxMDgsNyArMjExMiw2IEBACiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1
bmN0aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyog
RnVuY3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyog
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAxMDhF
MzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJQkMwMkU5QjgwRTE4NDU0NTAwMEY5
Mjk3IC8qIEdldHRlclNldHRlci5jcHAgKi8sCiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThB
IC8qIEdldHRlclNldHRlci5oICovLApAQCAtMjExNiw2ICsyMTE5LDcgQEAKIAkJCQk5MzNBMzQ5
QTAzOEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovLAogCQkJCTBGQjdGMzhEMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAogCQkJCTBGQjdGMzhFMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRjEzRTA0
QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVD
MzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5
QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCkBAIC0yMjc0LDYgKzIy
NzgsNyBAQAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywK
IAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3
RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKKwkJCQlDMkQ1OEMz
MzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDgwLDYg
KzI0ODUsNyBAQAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUu
Y3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAq
LywKIAkJCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5o
ICovLAorCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKIAkJ
CQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJCQkw
RjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEY5MzMy
OTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTI5NTksNiAr
Mjk2NSw3IEBACiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFs
dWVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQ
dXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIw
MEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZF
MUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTND
MUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAg
LTM1NjUsNiArMzU3Miw3IEBACiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50
Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8q
IFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlG
MTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTNFMDRFMTYxNjRBMUYw
MERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjEx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQs
NyArNTY0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQoanVtcCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgYXBwZW5kKEp1bXBMaXN0JiBvdGhlcikK
KyAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSnVtcExpc3QmIG90aGVyKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChvdGhlci5tX2p1bXBzLmJlZ2luKCksIG90aGVyLm1f
anVtcHMuc2l6ZSgpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzksNiArMjM5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBQ
YXRjaGFibGVKdW1wKGp1bXAoKSk7CiAgICAgfQorCisgICAgUGF0Y2hhYmxlSnVtcCBwYXRjaGFi
bGVCcmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVz
dGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4g
UGF0Y2hhYmxlSnVtcChicmFuY2hUZXN0MzIoY29uZCwgcmVnLCBtYXNrKSk7CisgICAgfQogI2Vu
ZGlmCiAKICAgICB2b2lkIGp1bXAoTGFiZWwgdGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEJ5VmFsSW5mb19oCisjZGVmaW5lIEJ5VmFsSW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBKSVRBcnJheU1vZGUgeyBKSVRDb250aWd1b3VzLCBK
SVRBcnJheVN0b3JhZ2UgfTsKKworaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5s
aW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRDb250aWd1
b3VzOworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIENS
QVNIKCk7CisgICAgICAgIHJldHVybiBKSVRDb250aWd1b3VzOworICAgIH0KK30KKworc3RydWN0
IEJ5VmFsSW5mbyB7CisgICAgQnlWYWxJbmZvKCkgeyB9CisgICAgCisgICAgQnlWYWxJbmZvKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUsIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmUsIGludDE2X3QgcmV0
dXJuQWRkcmVzc1RvU2xvd1BhdGgpCisgICAgICAgIDogYnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KQorICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5cGVKdW1wKQorICAgICAgICAsIGFycmF5
TW9kZShhcnJheU1vZGUpCisgICAgICAgICwgYmFkVHlwZUp1bXBUb0RvbmUoYmFkVHlwZUp1bXBU
b0RvbmUpCisgICAgICAgICwgcmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgocmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
OworICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXA7CisgICAgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZTsgLy8gVGhlIGFycmF5IG1vZGUgdGhhdCB3YXMgYmFrZWQgaW50byB0aGUgaW5saW5l
IEpJVCBjb2RlLgorICAgIGludDE2X3QgYmFkVHlwZUp1bXBUb0RvbmU7CisgICAgaW50MTZfdCBy
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aDsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOworfTsKKworaW5saW5lIHVuc2lnbmVkIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXgo
QnlWYWxJbmZvKiBpbmZvKQoreworICAgIHJldHVybiBpbmZvLT5ieXRlY29kZUluZGV4OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAv
LyBCeVZhbEluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZp
bmUgQ29kZUJsb2NrX2gKIAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJ5
VmFsSW5mby5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJD
YWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNl
dC5oIgpAQCAtMjA5LDYgKzIxMCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgdm9pZCByZXNldFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICAg
ICAgCisgICAgICAgIEJ5VmFsSW5mbyYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbElu
Zm8sIHVuc2lnbmVkLCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4PihtX2J5VmFsSW5mb3MuYmVn
aW4oKSwgbV9ieVZhbEluZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgICAgICB9CiAK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02MTAsNiArNjE2LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBz
aXplKSB7IG1fc3RydWN0dXJlU3R1YkluZm9zLmdyb3coc2l6ZSk7IH0KICAgICAgICAgc2l6ZV90
IG51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
dHViSW5mb3Muc2l6ZSgpOyB9CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVT
dHViSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXROdW1iZXJPZkJ5VmFsSW5mb3Moc2l6ZV90IHNp
emUpIHsgbV9ieVZhbEluZm9zLmdyb3coc2l6ZSk7IH0KKyAgICAgICAgc2l6ZV90IG51bWJlck9m
QnlWYWxJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fYnlWYWxJbmZvcy5zaXplKCk7IH0KKyAgICAg
ICAgQnlWYWxJbmZvJiBieVZhbEluZm8oc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2J5VmFsSW5m
b3NbaW5kZXhdOyB9CiAKICAgICAgICAgdm9pZCBhZGRHbG9iYWxSZXNvbHZlSW5mbyh1bnNpZ25l
ZCBnbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24pCiAgICAgICAgIHsKQEAgLTEyODksNiArMTI5OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgVmVj
dG9yPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0cnVjdHVyZVN0dWJJbmZvczsKKyAgICAgICAgVmVj
dG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgICAgICBWZWN0b3I8R2xvYmFsUmVzb2x2
ZUluZm8+IG1fZ2xvYmFsUmVzb2x2ZUluZm9zOwogICAgICAgICBWZWN0b3I8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFZlY3RvcjxNZXRob2RDYWxsTGlua0luZm8+IG1f
bWV0aG9kQ2FsbExpbmtJbmZvczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TYW1wbGluZ1Rvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OSwxMiArODU5LDE3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAg
ICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1df
UFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RF
UzoKKyAgICAgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKQEAgLTkwOCw2ICs5MTMsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChT
cGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MTUsNiArOTIzLDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2Fz
ZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICBF
ZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CiAgICAgICAgIEVkZ2Ug
Y2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgc3dpdGNoICht
b2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpKSB7CkBAIC05MjQsMTEgKzkzMywxOCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgog
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNl
IEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICAgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM2Nyw3ICsxMzgzLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01P
REVTOiAvLyBUaGVzZSBvbmx5IGdldCBhIENoZWNrQXJyYXkgZm9yIEdldEFycmF5TGVuZ3RoCiAg
ICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmln
aHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBv
ZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0Lgog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAt
MTQxMCw5ICsxNDI4LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICB9CiAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIo
KTsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksMTQgQEAgQXJyYXk6Ok1v
ZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAgICAgICByZXR1cm4gQXJyYXk6OlVu
cHJvZmlsZWQ7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgogICAgICAgICBpZiAo
YWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFj
Y2Vzc2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U7
IC8vIEZJWE1FOiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSwg
b3Igbm90LiBUaGlzIGlzIGEgZGVjZW50IGd1ZXNzLgorICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25v
dyB3aGV0aGVyIHRvIGdvIHRvIHNsb3cgcHV0IG1vZGUgb3Igbm90LiBXZSdyZSBndWVzc2luZyB0
aGF0IHdlIGRvbid0IG5lZWQgc2xvdyBwdXQuCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNp
ZGVkOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAg
ICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzIDogKHBy
b2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6Q29udGlndW91c1RvVGFpbCA6IEFycmF5
OjpDb250aWd1b3VzKTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3Vz
KToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRv
SG9sZSgpID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5
OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8g
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpBcnJheVN0b3JhZ2UpOwogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgpAQCAtNTYs
NiArNjIsMjAgQEAgQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcAogICAg
IGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICAg
ICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIEFycmF5OjpDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29u
dGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
cmV0dXJuIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3Vz
KSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4g
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250
aWd1b3VzKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUt
Pm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5
OjpCbGFua1RvQ29udGlndW91czsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6Cisg
ICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNl
cHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYm
ICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKICAgICAgICAgICAgIHJl
dHVybiBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTsKQEAgLTE0NCw2ICsxNjQsMjIgQEAgYm9v
bCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsK
ICAgICAgICAgCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoK
KyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBIYXNDb250aWd1b3VzKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
OgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgSGFzQ29udGlndW91cykKKyAgICAgICAgICAgICYmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0Fy
cmF5KTsKKwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6CkBAIC0xNzAsNyArMjA2LDggQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RW
YWx1ZSYgdgogICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0
QXJyYXlTdG9yYWdlKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCi0g
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExf
RUZGRUNURlVMX01PREVTOgorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgpAQCAtMjI1
LDYgKzI2MiwyNCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAg
ICAgICAgIHJldHVybiAiRm9yY2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgIHJldHVybiAiU3RyaW5nIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIkNvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6
CisgICAgICAgIHJldHVybiAiQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPdXRPZkJvdW5k
cyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJu
ICJBcnJheVdpdGhDb250aWd1b3VzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOwor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAg
cmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3Vv
dXNUb1RhaWwiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVy
biAiQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6CkBA
IC0yNDksMTAgKzMwNCwyMCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUg
bW9kCiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
IjsKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgogICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICByZXR1
cm4gIkJsYW5rVG9Db250aWd1b3VzIjsKICAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9y
YWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9BcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIkJsYW5rVG9T
bG93UHV0QXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAg
ICAgcmV0dXJuICJDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVdp
dGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4
QXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDE1IEBAIGVudW0gTW9kZSB7CiAgICAgU3Ry
aW5nLAogICAgIAogICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ug
d2hlcmUgdGhlIGNoZWNrIGlzIG5vbiBzaWRlLWVmZmVjdGluZy4KKyAgICBDb250aWd1b3VzLAor
ICAgIENvbnRpZ3VvdXNUb1RhaWwsCisgICAgQ29udGlndW91c091dE9mQm91bmRzLAorICAgIEFy
cmF5V2l0aENvbnRpZ3VvdXMsCisgICAgQXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKKyAgICBQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKICAgICBBcnJheVN0b3JhZ2UsCiAg
ICAgQXJyYXlTdG9yYWdlVG9Ib2xlLAogICAgIFNsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC02OCw4
ICs3NywxNiBAQCBlbnVtIE1vZGUgewogICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHMsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlvbmFsIGluZGV4ZWQg
c3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgc2lkZS1lZmZlY3RpbmcuCisgICAgQmxhbmtUb0Nv
bnRpZ3VvdXMsCiAgICAgQmxhbmtUb0FycmF5U3RvcmFnZSwKICAgICBCbGFua1RvU2xvd1B1dEFy
cmF5U3RvcmFnZSwKKyAgICBCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAgIAor
ICAgIC8vIE1vZGVzIHRoYXQgaW5kaWNhdGUgcG9seW1vcnBoaWMgYXJyYXkgc3RvcmFnZS4gVGhl
c2UgZG9uJ3QgYmVuZWZpdCBmcm9tCisgICAgLy8gYW55IGNoZWNraW5nIG9yIHN0b3JhZ2UgQ1NF
LgorICAgIENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhDb250aWd1b3Vz
T3JBcnJheVN0b3JhZ2UsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2UsCiAgICAgCiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKQEAgLTg5LDYgKzEw
NiwzMiBAQCBlbnVtIE1vZGUgewogLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0
aGVtLgogCiAvLyBGaXJzdDogaGVscGVycyBmb3Igbm9uLXNpZGUtZWZmZWN0aW5nIGNoZWNrcy4K
KyNkZWZpbmUgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91czogICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0NPTlRJR1VP
VVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQ09OVElHVU9V
U19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0NP
TlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cworI2RlZmluZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNU
b1RhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbAorI2RlZmluZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNv
bnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCiAjZGVm
aW5lIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC0xMDYsMzMgKzE0OSw0OCBAQCBlbnVtIE1vZGUgewogI2RlZmluZSBBTExf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCiAjZGVmaW5lIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBBcnJh
eTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICBc
CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUKLSNk
ZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlCiAjZGVmaW5lIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6ICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlCiAjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUyAgICAgICAgICAgICAgICAgIFwKLSAgICBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVT
OiAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAogICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKIAogLy8gTmV4dDog
aGVscGVycyBmb3Igc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBFRkZFQ1RGVUxfTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgXAotICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9y
YWdlOiAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNf
TU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3Vz
CisjZGVmaW5lIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCi0j
ZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICBcCisjZGVmaW5l
IEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKICAg
ICBFRkZFQ1RGVUxfTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUgU0xPV19Q
VVRfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgIFwKKyNkZWZpbmUgU0xPV19QVVRfRUZG
RUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgXAogICAgIEFycmF5OjpCbGFu
a1RvU2xvd1B1dEFycmF5U3RvcmFnZQorI2RlZmluZSBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkJsYW5rVG9Db250aWd1b3Vz
T3JBcnJheVN0b3JhZ2UKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzog
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NU
T1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElDX0VGRkVD
VEZVTF9NT0RFUworCisvLyBGaW5hbGx5OiBoZWxwZXJzIGZvciBwb2x5bW9ycGhpYyBhcnJheSBh
Y2Nlc3Nlcy4KKyNkZWZpbmUgUE9MWU1PUlBISUNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09y
QXJyYXlTdG9yYWdlOiAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfUE9MWU1PUlBISUNfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUE9MWU1PUlBISUNfRUZGRUNURlVM
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIFBPTFlNT1JQSElD
X01PREVTCiAKIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6
QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKIApAQCAtMTQ1LDggKzIwMywxMCBAQCBjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJm
bHkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X01PREVTOgotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNTYsNyArMjE2LDkgQEAgaW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6
Ok1vZAogaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7
CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9V
U19NT0RFUzoKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2Niw2
ICsyMjgsOSBAQCBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFyCiBpbmxp
bmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6
CisgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBBUlJBWV9TVE9S
QUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTE4NCwxOCArMjQ5LDU1
IEBAIGlubGluZSBib29sIGlzU2xvd1B1dEFjY2VzcyhBcnJheTo6TW9kZSAKICAgICB9CiB9CiAK
K2lubGluZSBib29sIG1heVN0b3JlVG9UYWlsKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVT
OgorICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOgorICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01P
REVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCiBpbmxpbmUgYm9vbCBtYXlTdG9yZVRvSG9sZShBcnJheTo6TW9k
ZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKICAgICBjYXNlIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfUE9M
WU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIG1vZGVJc1BvbHltb3Jw
aGljKEFycmF5OjpNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBB
TExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKK2lubGluZSBib29sIHBvbHltb3Jw
aGljSW5jbHVkZXNDb250aWd1b3VzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKGFycmF5TW9kZSwgbW9kZUlzUG9seW1vcnBoaWMoYXJyYXlNb2RlKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0
b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlN
b2RlLCBtb2RlSXNQb2x5bW9ycGhpYyhhcnJheU1vZGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogaW5saW5lIGJvb2wgY2FuQ1NFU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKQEAgLTIwNCw2ICszMDYsNyBAQCBpbmxpbmUgYm9vbCBj
YW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFyCiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogog
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAg
IGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDksNyArMzUyLDExIEBAIGlubGlu
ZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW8KICAgICBjYXNlIEFycmF5OjpVbnBy
b2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgY2FzZSBOT05f
QVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6
CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTks
NyArMzY2LDggQEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogaW5s
aW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQXJyYXk6Ok1vZGUgbW9kZSkKIHsK
ICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9S
UEhJQ19NT0RFUzoKICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CiAgICAgY2FzZSBBcnJheTo6
VW5wcm9maWxlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CkBAIC0yNzMsNyArMzgxLDcg
QEAgaW5saW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQQogaW5saW5lIGJvb2wg
aXNFZmZlY3RmdWwoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
NCw2ICsxNTc0LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwog
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFy
cmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSkpOwpAQCAtMTU5Nyw2ICsxNTk5LDggQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2VUb0hvbGU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUpLCBP
cEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDApKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoK
ICAgICAgICAgICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpA
QCAtMzU5LDkgKzM2MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3Ry
dWN0dXJlIGNoYW5nZSBvciBhIHB1dCB0byBwcm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAg
ICAgICAgICAgICAgIC8vIHRoZSBHZXRCeVZhbC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5u
b3QgYWZmZWN0IHByZXZpb3VzbHkgZXhpc3RpbmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgotICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKQEAgLTEyMjIsOSArMTIyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChpc0FjdGlvbmFibGVNdXRhYmxlQXJyYXlT
cGVjdWxhdGlvbihtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGhbY2hpbGQyXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV9ncmFwaFtjaGlsZDFdLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7Cisg
ICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgewogICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihj
aGlsZDEuaW5kZXgoKSwgY2hpbGQyLmluZGV4KCkpOwogICAgICAgICAgICAgICAgIGlmIChub2Rl
SW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9k
ZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5j
aGlsZDEoKS5pbmRleCgpLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpOworICAgICAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5
TW9kZSwgbm9kZVB0ci0+Y29kZU9yaWdpbiwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSwgTm9O
b2RlLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpOwogICAg
ICAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMzcsMTcgKzEzNywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAyKTsK
KyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSwgMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAg
Ymxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgMSk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewpAQCAtMzI3LDcg
KzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQxXS5w
cmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVkaWN0
aW9uKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihj
aGlsZDEsIDMpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxk
MiwgMyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07CiAgICAgICAgICAgICAKQEAgLTM3NSwxNCArMzc1LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQogICAgIAotICAgIE5vZGVJ
bmRleCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBOb2RlSW5kZXggYXJyYXksIGJvb2wgKCpzdG9yYWdlQ2hlY2spKEFycmF5OjpNb2RlKSA9
IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGVJbmRl
eCBjaGVja0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBOb2RlSW5kZXggYXJyYXksIE5vZGVJbmRleCBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjayko
QXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUp
CiAgICAgewogICAgICAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CiAgICAg
ICAgIAogICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7CiAKICAgICAgICAgaWYgKGlzRWZmZWN0
ZnVsKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNv
ZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgICAgICBBU1NFUlQo
aW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKGluZGV4KTsKKyAgICAg
ICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1v
ZGUpLCBhcnJheSwgaW5kZXgpOwogICAgICAgICAgICAgYXJyYXlpZnkucmVmKCk7IC8vIE9uY2Ug
YmVjYXVzZSBpdCdzIHVzZWQgYXMgYSBidXR0ZXJmbHkuCiAgICAgICAgICAgICBhcnJheWlmeS5y
ZWYoKTsgLy8gQW5kIHR3aWNlIGJlY2F1c2UgaXQncyBtdXN0LWdlbmVyYXRlLgogICAgICAgICAg
ICAgTm9kZUluZGV4IGFycmF5aWZ5SW5kZXggPSBtX2dyYXBoLnNpemUoKTsKQEAgLTQxNSwxNCAr
NDE3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwg
c2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRp
b24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0Fy
cmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxk
SWR4KQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3Jl
Rml4cG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgCi0gICAgICAg
IGlmIChub2RlUHRyLT5hcnJheU1vZGUoKSA9PSBBcnJheTo6Rm9yY2VFeGl0KSB7CisgICAgICAg
IHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OiB7CiAgICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4aXQsIG5vZGVQ
dHItPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOwogICAgICAgICAg
ICAgTm9kZUluZGV4IGZvcmNlRXhpdEluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC00MzAsMTUg
KzQzMywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1f
aW5kZXhJbkJsb2NrLCBmb3JjZUV4aXRJbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbW9kZUlzU3BlY2lmaWMobm9kZVB0ci0+YXJy
YXlNb2RlKCkpKQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoK
KyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIE5v
ZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShub2RlUHRyLT5hcnJheU1vZGUoKSwgbm9kZVB0
ci0+Y29kZU9yaWdpbiwgYmFzZS5pbmRleCgpKTsKLSAgICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9O
b2RlKQorICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIEFMTF9QT0xZ
TU9SUEhJQ19NT0RFUzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICBtX2dyYXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgp
ID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgTm9kZUlu
ZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5j
b2RlT3JpZ2luLCBiYXNlLmluZGV4KCksIGluZGV4LmluZGV4VW5jaGVja2VkKCkpOworICAgICAg
ICAgICAgaWYgKHN0b3JhZ2UgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0gfQogICAgIH0KICAgICAKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYg
ZWRnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEz
MDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtNDc5LDggKzQ3OSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2gg
KG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAg
ICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJS
QVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElD
X01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
MzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NTYsOSArNTU2LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVj
dG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsK
LSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGlu
ZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIGFycmF5
LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NzMsOSArNTcx
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKLSAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBhcnJheS0+cHV0QnlJbmRleElubGluZShleGVjLCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTYwMSw2ICs1OTcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXJyYXkt
PnBvcChleGVjKSk7CiB9CiAgICAgICAgIAorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkKK3sKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhl
Yyk7CisgICAgCisgICAgYXJyYXktPmJ1dHRlcmZseSgpLT5zZXRQdWJsaWNMZW5ndGgoYXJyYXkt
PmJ1dHRlcmZseSgpLT5wdWJsaWNMZW5ndGgoKSArIDEpOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXJyYXktPnBvcChleGVjKSk7Cit9CisgICAgICAgIAogRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBiYXNlLCBKU0NlbGwqIGFyZ3VtZW50KQogewogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzMDksNiArMTMxNSwxNCBAQCBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOworICAgIAorICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3VyZUNvbnRpZ3VvdXMo
Z2xvYmFsRGF0YSkpOworfQorCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMxNyw2ICsx
MzMxLDE2IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSkpOwogfQogCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IGludDMyX3QgaW5kZXgpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERh
dGEsIGV4ZWMpOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KG9iamVjdC0+ZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVJbmRleGVkU3RvcmFnZShnbG9i
YWxEYXRhKSk7Cit9CisKIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMo
aW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgcmV0dXJuIGZtb2QoYSwgYik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTMwMzE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDcgKzc4LDcgQEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVy
YXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6
ZV90LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRVN0KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLXR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdEkpKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OICgqSl9ERkdPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FWikoRXhlY1N0
YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpK
X0RGR09wZXJhdGlvbl9FWkljZlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIElubGluZUNhbGxGcmFt
ZSosIGludDMyX3QpOwpAQCAtMTEwLDYgKzExMCw3IEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiB0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
c2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VP
WikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7
CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0
YXRlKiwgc2l6ZV90KTsKIApAQCAtMTQ4LDYgKzE0OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW8KIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpT
QXJyYXkqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVj
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwog
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKSBX
VEZfSU5URVJOQUw7CkBAIC0xOTIsNyArMTk0LDkgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25BbGxvY2F0ZVBybwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJv
cGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdU
Rl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRl
cmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBu
ZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3Vy
ZUNvbnRpZ3VvdXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CitjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2Vk
IHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3
aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0
IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Niw3ICsyNTYsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBzdHViSml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSkpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNDb250aWd1b3VzIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSkpKTsKICAgICAgICAgCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQ1LDYgKzIw
NDUsMTEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9
CiB9CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNv
bnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJl
ZykKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxv
YWRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCByZXN1bHRUYWdSZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5v
ZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKQoreworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAKKyAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHJlc3VsdFRhZ1JlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
aG9sZSk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUmIG5vZGUs
IEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZh
bHVlVGFnUmVnLCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBpZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9k
ZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
c2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgcHJvcGVydHlSZWcpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZyk7CisKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1f
aml0LnN0b3JlMzIodmFsdWVUYWdSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIG1faml0LnN0b3JlMzIodmFsdWVQ
YXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgCisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJy
YXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOworICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJlZywg
R1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlVGFnUmVn
LCBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9
IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2Rl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRp
bmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBp
ZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB1bmNv
dW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBK
SVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9yZS4gU28g
dGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxpbmcuCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFj
Y2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5n
ZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZl
cnQKKyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qg
d29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8v
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUg
Z3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVu
Z3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVs
b3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuZ3Ro
RG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5vdEhv
bGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIC8vIFN0b3JlIHRoZSB2YWx1
ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUg
b3AgPSBub2RlLm9wKCk7CkBAIC0yNTY1LDYgKzI2NzIsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3By
KCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3Vs
dFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJ
R1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0g
cmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUNvbnRp
Z3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI1ODcsNiArMjc0Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwpAQCAtMjYyNCw2ICsyNzgxLDU2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBy
ZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
c3VsdFRhZ1JlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
VGFnUmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0VGFnUmVnKTsK
KyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5
TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0VGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNv
bXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3JhZ2Uobm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywg
c3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAg
ICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChm
YWxsVGhyb3VnaCk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdS
ZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzE0
LDYgKzI5MjEsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgor
ICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BS
UmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdmFs
dWVQYXlsb2FkUmVnID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAobm9kZS5v
cCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFs
dWUgdG8gdGhlIGFycmF5LgorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
ID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVU
YWdSZWcsIHZhbHVlUGF5bG9hZFJlZyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAg
ICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAg
ICAgICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93
Q2FzZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFs
dWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIGNoaWxkMyk7CkBAIC0yNzQzLDYwICsyOTk5LDc5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mobm9k
ZS5hcnJheU1vZGUoKSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBp
ZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGlzSG9sZVZhbHVlOwotICAgICAgICAgICAgaWYgKCFtYXlTdG9yZVRvSG9s
ZShhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBi
ZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKLSAgICAg
ICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0
aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Ci0gICAgICAgICAgICAgICAgLy8gcHJvZmlsaW5nLgot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6
ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhp
cyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBo
YXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2pp
dC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Un
cmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVw
ZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVn
LCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKTsKIAogICAgICAgICAgICAgYmFzZS51c2Uo
KTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAgICAgICAgICAgdmFsdWUudXNlKCk7
CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwotCi0gICAgICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1Jl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0g
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAo
aXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoaXNIb2xlVmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNs
b3dDYXNlcy5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2
YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICAgICAgQVNTRVJUKG5vZGUub3Ao
KSA9PSBQdXRCeVZhbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVRhZ1JlZyA9IHZhbHVlLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUGF5
bG9hZFJlZyA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdG9y
YWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdG9yYWdlUmVn
KTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFy
cmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVD
b250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBzdG9yYWdlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFn
ZVJlZyk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJyYXlTdG9y
YWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVl
VGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKworICAg
ICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAg
ICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgZGVjaXNpb24g
b2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUgc2hvdWxkIGJlIG1hZGUKKyAg
ICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSwgbm90IHRoZSBtYWNo
aW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAg
IE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9h
ZFJlZykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjkxOSwyNSArMzE5NCw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0z
MigweDdmZmZmZmZlKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBz
dG9yYWdlR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLAorICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgYmFzZUdQUikpOworICAgICAgICAK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAK
KyAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIs
IFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBz
dG9yYWdlR1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBKU1ZhbHVlUmVncyhz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKSwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
UiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3Jh
Z2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBi
YXNlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yOTQ4LDQ2ICszMjUzLDg4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHZh
bHVlVGFnKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVQYXlsb2FkKHRoaXMpOwot
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gdmFsdWVUYWcuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2
YWx1ZVBheWxvYWQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdw
cigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVUYWdHUFIpOworICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZVRhZ0dQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlVGFnR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAg
bV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksCisgICAgICAgICAgICAgICAgdmFs
dWVUYWdHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAgICAg
ICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAor
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZp
bmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBh
eWxvYWRHUFIpLCBiYXNlR1BSKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3Rv
cmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0g
c3RvcmFnZUxlbmd0aC5ncHIoKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzZXRVbmRlZmluZWRDYXNlczsKLSAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQ
UikpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2Vz
OworICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKLSAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dD
YXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgdmFsdWVUYWdHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWVQYXlsb2FkR1BS
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
c3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKIAotICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKSk7CisgICAgICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFn
R1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwogCi0gICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAg
ICAgc2xvd1BhdGhNb3ZlKAotICAgICAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLCB0aGlz
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmlu
ZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMs
CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRl
ZmluZWQoKS50YWcoKSksIHZhbHVlVGFnR1BSLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVW5kZWZpbmVkKCkucGF5bG9hZCgpKSwgdmFsdWVQYXls
b2FkR1BSKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3Bl
cmF0aW9uQXJyYXlQb3AsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIs
IHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLAorICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOwog
Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksMTAgKzIxMDks
MTExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICB9CiB9
CiAKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRp
Z3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVnKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdFJlZykpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFn
ZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpLCByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpOworICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChvdXRPZkJvdW5kcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4g
c2xvd0Nhc2VzOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1w
UmVnKQoreworICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBp
ZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5Cb3VuZHNB
Y2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgc2xvd0Nhc2VzKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcsIHRlbXBSZWcpOworICAg
ICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworCisgICAgICAgIGlu
Qm91bmRzLmxpbmsoJm1faml0KTsKKyAgICB9CisKKyAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgCisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3Mo
YXJyYXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpOwor
ICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKE5vZGUmIG5vZGUsIEdQUlJl
ZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVn
LCBHUFJSZWcgdGVtcFJlZykKK3sKKyAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBub2RlLmFy
cmF5TW9kZSgpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
YmV5b25kQXJyYXlCb3VuZHMpOworICAgIGVsc2UKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
ZXlvbmRBcnJheUJvdW5kcyk7CisKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5nIHRvIGEg
aG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgaWYgKCFtYXlT
dG9yZVRvSG9sZShhcnJheU1vZGUpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdW5jb3VudGFibGUg
YmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUgYmFzZWxpbmUgSklUCisgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKKyAgICAgICAgLy8gcHJvZmlsaW5nLgorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dEhvbGVWYWx1ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRp
bWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0CisgICAgICAgICAgICAvLyB0aGUg
YWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25s
eSBoYXBwZW5zIGlmIHdlJ3JlCisgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0
aW1lLgorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0lu
VmVjdG9yT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdl
J3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJl
ZywgdGVtcFJlZyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHRlbXBSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRl
LmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICBub3RIb2xlVmFsdWUubGluaygmbV9q
aXQpOworICAgIH0KKyAgICAKKyAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5Lgor
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKLQorICAgIAogICAgIHN3aXRjaCAob3Ap
IHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgIGluaXRDb25zdGFudEluZm8obV9jb21w
aWxlSW5kZXgpOwpAQCAtMjU5NSw2ICsyNjk2LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENPTlRJ
R1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VP
VVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7
CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5v
ZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFs
QXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMo
KSk7CkBAIC0yNjE1LDYgKzI3NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE9V
VF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTI2MjcsMjEgKzI3NzQsNjUgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9QT0xZTU9S
UEhJQ19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBy
ZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSk7Ci0K
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoaG9sZSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2Vz
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91Z2g7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRp
Z3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91
Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3Bl
cnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJy
YXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQXJy
YXlTdG9yYWdlR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHJlc3VsdFJlZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJv
dWdoLmlzU2V0KCkpOworICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZmFsbFRocm91Z2gpOwogICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6CkBAIC0yNzM1LDggKzI5MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Cisg
ICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI3NTYsNTkgKzI5NDcsNzYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0cikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25k
QXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGlzSW5Cb3Vu
ZHNBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKLQot
ICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGlu
Y3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5
TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2Ug
aWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAgICAgICAg
ICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlz
IG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1
ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQg
dG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAotICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0
IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgIGlzSG9sZVZh
bHVlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7
IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90
TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFy
eVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2RlKTsKKworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGls
ZUNvbnRpZ3VvdXNQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywg
cHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpOworCisgICAg
ICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAg
ICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwg
YmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKKworICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3By
KCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9y
YXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUpOworCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAgICAgICAgICBjb21w
aWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9yYXJ5UmVnKTsKKwog
ICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOwogICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOwotCi0gICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgotICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Ci0KLSAgICAgICAgICAgIGlmICghaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJl
eW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFy
cmF5TW9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaXNIb2xlVmFs
dWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywKQEAgLTI4MjAsNiArMzAyOCw2MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0
ZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZG9uZUNhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsbFRocm91
Z2g7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wb3JhcnlSZWcpOworICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBvcmFyeVJlZywgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAgICBpZiAocG9s
eW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmFsbFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBk
b25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxU
aHJvdWdoLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZmFsbFRocm91Z2ggPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRl
bXBvcmFyeVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVt
cG9yYXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJ
bmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFs
KG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVJlZywgdGVtcG9y
YXJ5UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2gu
aXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7CisKKyAgICAgICAgICAgIGJhc2UudXNl
KCk7CisgICAgICAgICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgp
OworCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGRlY2lzaW9uIG9mIHdoZXRoZXIgb3Igbm90
IHdlJ3JlIGluIHN0cmljdCBtb2RlIHNob3VsZCBiZSBtYWRlCisgICAgICAgICAgICAvLyBiYXNl
ZCBvbiB0aGUgaW5saW5lIGNhbGwgZnJhbWUsIG5vdCB0aGUgbWFjaGluZSBjb2RlIGJsb2NrLgor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAg
ICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFzZVJl
ZywgcHJvcGVydHlSZWcsIHZhbHVlUmVnKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IGNoaWxkMyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTI5
NzMsMjYgKzMyMzgsNTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgc3dpdGNoIChu
b2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczog
eworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBi
aXphcnJlIGxlbmd0aHMuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
LCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAg
ICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJ
bW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAg
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKLSAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAg
ICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQ
Uik7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
QXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwKLSAgICAgICAgICAgICAgICB2
YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQXJyYXlQdXNoLCBOb1Jlc3VsdCwgc3RvcmFnZUxlbmd0aEdQUiwK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTMwMDIsNDEgKzMyOTUsNzcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgdmFsdWUodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRo
aXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9
IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVHUFIp
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1
ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIpLAorICAgICAgICAgICAgICAgIHZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworCisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCisgICAgICAgICAg
ICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSks
IHZhbHVlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlz
LCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHZhbHVlR1BSLCBiYXNlR1BSKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwotICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
dG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB1bmRlZmlu
ZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZh
bHVlR1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAK
LSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAg
ICAgICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2Fz
ZSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKICAgICAgICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFs
dWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKIAotICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0zMjEwLDggKzM1MzksMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3ByKCk7CiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
LmdwcigpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHNpemVHUFIpOwotICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BS
ID0gc2VsZWN0U2NyYXRjaEdQUihzaXplR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKTsKKyAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUo
KSksIHN0cnVjdHVyZUdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgIGJpZ0xlbmd0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlV2l0aEFy
cmF5U3RvcmFnZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDQxIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAg
ICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOworICAgICAgICAKKyAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
QVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1f
aml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1faml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHR1
cm5lZCBpbnRvIGEgc2luZ2xlIGJyYW5jaC4gQnV0IHdlIGN1cnJlbnRseSBoYXZlIG5vIGV2aWRl
bmNlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgc28gd291bGQgYmUgcHJvZml0YWJsZSwgbm9yIGRv
IEkgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHRoZSBwcmVzZW50IHRlc3QKKyAgICAgICAgLy8gY292
ZXJhZ2UgZm9yIHRoaXMgY29kZSBwYXRoLgorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgTk9OX0FS
UkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCkBAIC0zNTIsNiArMzg3LDI5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2UgUE9MWU1PUlBISUNf
TU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIp
OworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJh
bmNoLiBCdXQgd2UgY3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBk
b2luZyBzbyB3b3VsZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdp
dGggdGhlIHByZXNlbnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBh
dGguCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAg
ICAgICAgICAgICAocG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMobm9kZS5hcnJheU1vZGUo
KSkgPyBIYXNDb250aWd1b3VzIDogMCkKKyAgICAgICAgICAgICAgICAgICAgfCAocG9seW1vcnBo
aWNJbmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSA/IEhhc0FycmF5U3RvcmFn
ZSA6IDApKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAg
ICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmQXJndW1lbnRzOjpzX2luZm87CiAgICAgICAgIGJyZWFr
OwpAQCAtMzkwLDcyICs0NDgsMTA4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5v
ZGUmIG5vZGUKICAgICBBU1NFUlQoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKICAgICAKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAKKyAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2s7CiAgICAg
CiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBFRkZFQ1RGVUxfTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVj
dHVyZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQ
UlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGln
dW91czoKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNDb250aWd1b3VzOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgorICAg
ICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1
dEFycmF5U3RvcmFnZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0Nv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sg
PSBIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFz
ayA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBHUFJUZW1wb3Jhcnkgc3Ry
dWN0dXJlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyBz
dHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRoYXQgY29tZXMg
bmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KLSAgICAgICAgSW5kZXhpbmdU
eXBlIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0KLSAgICAgICAgICAgIGlzU2xvd1B1dEFjY2Vz
cyhub2RlLmFycmF5TW9kZSgpKSA/IChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSA6IEhhc0FycmF5U3RvcmFnZTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpaZXJvLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BS
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKKyAgICBtX2pp
dC5sb2FkUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAvLyBXZSBj
YW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9y
YWdlLgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVz
dDgoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5
cGVNYXNrKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIp
OwogICAgICAgICAKLSAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICAvLyBO
ZXh0IGNoZWNrIHRoYXQgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcmNlcHQgaW5kZXhlZCBhY2Nl
c3Nlcy4gSWYgaXQgZG9lcywKLSAgICAgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4K
KyAgICBzbG93Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgLy8gSWYgd2UncmUgYWxsZWdl
ZGx5IGNyZWF0aW5nIGNvbnRpZ3VvdXMgc3RvcmFnZSBhbmQgdGhlIGluZGV4IGlzIGJvZ3VzLCB0
aGVuCisgICAgLy8ganVzdCBkb24ndC4KKyAgICBpZiAobm9kZS5hcnJheU1vZGUoKSA9PSBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXMpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIs
IFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgVHJ1c3RlZEltbTMyKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpKSk7CisgICAgfQorICAg
IAorICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGludGVyY2VwdCBp
bmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAorICAgIC8vIHRoZW4gdGhpcyBtb2RlIHdvbid0
IHdvcmsuCisgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKSkpOwogICAgICAgICAK
LSAgICAgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgLy8gTm93IGNhbGwg
b3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyh0ZW1wR1BSKTsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBjYXNl
IEFycmF5OjpCbGFua1RvQ29udGlndW91czoKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25FbnN1cmVDb250aWd1b3VzLCB0ZW1wR1BSLCBiYXNlUmVnKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpCbGFu
a1RvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcpOwotICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHRlbXBHUFIpOwotCi0gICAgICAgIC8vIEFsYXMsIHdlIG5lZWQgdG8gcmVs
b2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9lcyBub3Qgc2F2ZQot
ICAgICAgICAvLyB0ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8g
ZG8gc28uIEVpdGhlciB3YXkgd2UncmUgdGFsa2luZwotICAgICAgICAvLyBhYm91dCBhIGxvYWQu
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUga2lu
ZCBvZiBhcnJheSBzdG9yYWdlIHRoYXQgd2Ugd2FudGVkIHRvIGdldC4KLSAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwg
cmVzdWx0IGluIHRoZSAKLSAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRp
bmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgotICAgICAgICAvLyBU
aGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoZGVzaXJl
ZEluZGV4aW5nVHlwZU1hc2spKSk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKLSAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwotICAgIH0KKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJy
YXlTdG9yYWdlOgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZywgcHJvcGVydHlSZWcpOworICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnModGVtcEdQUik7CisKKyAgICAvLyBBbGFzLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUg
c3RydWN0dXJlIGJlY2F1c2Ugc2lsZW50IHNwaWxsaW5nIGRvZXMgbm90IHNhdmUKKyAgICAvLyB0
ZW1wb3Jhcmllcy4gTm9yIHdvdWxkIGl0IGJlIHVzZWZ1bCBmb3IgaXQgdG8gZG8gc28uIEVpdGhl
ciB3YXkgd2UncmUgdGFsa2luZworICAgIC8vIGFib3V0IGEgbG9hZC4KKyAgICBtX2ppdC5sb2Fk
UHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgCisgICAgLy8gRmluYWxs
eSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3
YW50ZWQgdG8gZ2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFja3dhcmRzIHNwZWN1
bGF0aW9uIGNoZWNrLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB0aGUgCisgICAgLy8gYnl0ZWNvZGUg
b3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4
ZWN1dGVkLgorICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3Qg
dXNlci12aXNpYmxlLgorICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
LAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhp
bmdUeXBlTWFzaykpKTsKKyAgICAgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgc3Rv
cmFnZVJlc3VsdCh0ZW1wR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKQEAgLTMyMDUsMTIgKzMy
OTksMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0
b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsK
LSAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgIGNhc2UgQVJS
QVlfV0lUSF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgc3RvcmFnZSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBAIC0zMzk5LDYg
KzM1MDQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAg
IHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAorR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFy
eSYgdGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgaWYgKCFwdXRCeVZh
bFdpbGxOZWVkRXh0cmFSZWdpc3RlcihhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gSW52YWxp
ZEdQUlJlZzsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVhbFRlbXBvcmFyeSh0aGlzKTsKKyAg
ICB0ZW1wb3JhcnkuYWRvcHQocmVhbFRlbXBvcmFyeSk7CisgICAgcmV0dXJuIHRlbXBvcmFyeS5n
cHIoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKK2NsYXNzIEdQUlRlbXBvcmFyeTsKIGNsYXNzIEpTVmFsdWVPcGVyYW5k
OwogY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAgLTEx
NjYsNiArMTE2NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRp
b25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgaW50MzJfdCBz
aXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9i
amVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIo
c2l6ZSkpOwpAQCAtMTIxOCwxMSArMTIyNCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVN0SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RQUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMTQ2OCw2ICsxNDc5LDExIEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJn
MikpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9aIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIGludDMyX3QgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9s
ZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNTMxLDExICsxNTQ3LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FU3RaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB2b2lkKiBwb2ludGVyLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMjE0OSw2ICsyMTcwLDUyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxl
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJik7CiAgICAgCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZh
bChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3Jh
Z2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBj
b21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcmVzdWx0UmVnKTsKKyNlbHNl
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwo
Tm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdl
UmVnLCBHUFJSZWcgcmVzdWx0VGFnUmVnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2Rl
JiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcs
IEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKTsKKyNlbmRpZgor
ICAgIAorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICAgICAg
Ly8gRm9yIEFycmF5U3RvcmFnZSwgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIHN0b3JlcyB0byBo
b2xlcyBleGNlcHQgaWYKKyAgICAgICAgLy8gd2UncmUgaW4gU2xvd1B1dCBtb2RlLgorICAgICAg
ICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgLy8gRm9yIENvbnRpZ3VvdXMsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBh
bnkgYWNjZXNzIHRoYXQgbWF5IHN0b3JlCisgICAgICAgIC8vIHRvIHRoZSB0YWlsLgorICAgICAg
ICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdV
T1VTX01PREVTOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgLy8gQWxsIHBvbHltb3JwaGljIG1vZGVzIG5lZWQgYW4gZXh0cmEgcmVnLgorICAgICAgICBj
YXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwo
R1BSVGVtcG9yYXJ5JiwgQXJyYXk6Ok1vZGUpOworICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3Rl
ckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBu
b2RlLmFycmF5TW9kZSgpKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiwgR1BSUmVn
IGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2
YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBj
b21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0
ZW1wUmVnKTsKKyNlbHNlCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVDb250
aWd1b3VzUHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcs
IEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxv
YWRSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQXJyYXlTdG9yYWdl
UHV0QnlWYWwoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcp
OworI2VuZGlmCisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CiAg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNp
b24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwyNSBAQCBzdGF0aWMgaW5saW5l
IEpTT2JqZWN0KiBjaGVja2VkUmV0dXJuKEpTCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQog
CitjbGFzcyBTYW1wbGluZ1Njb3BlIHsKK3B1YmxpYzoKKyAgICBTYW1wbGluZ1Njb3BlKEludGVy
cHJldGVyKiBpbnRlcnByZXRlcikKKyAgICAgICAgOiBtX2ludGVycHJldGVyKGludGVycHJldGVy
KQorICAgIHsKKyAgICAgICAgaW50ZXJwcmV0ZXItPnN0YXJ0U2FtcGxpbmcoKTsKKyAgICB9Cisg
ICAgflNhbXBsaW5nU2NvcGUoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcnByZXRlci0+c3RvcFNh
bXBsaW5nKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKK307CisKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWN1dGFibGUq
IHByb2dyYW0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogdGhpc09iaikKIHsKKyAg
ICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CisgICAgCiAgICAgSlNTY29wZSog
c2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CiAgICAgQVNTRVJUKGlzVmFsaWRUaGlzT2JqZWN0
KHRoaXNPYmosIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+
ZXhjZXB0aW9uKTsKQEAgLTExMzcsNiArMTE1NCw4IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJw
cmV0ZXI6OnByZXBhcmVGb3IKIAogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJh
bWVDbG9zdXJlJiBjbG9zdXJlKSAKIHsKKyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUo
dGhpcyk7CisgICAgCiAgICAgQVNTRVJUKCFjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICBpZiAoY2xvc3VyZS5vbGRDYWxsRnJhbWUtPmds
b2JhbERhdGEoKS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpA
QCAtMTE3Miw2ICsxMTkxLDggQEAgdm9pZCBJbnRlcnByZXRlcjo6ZW5kUmVwZWF0Q2FsbChDYWxs
RnJhbQogCiBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFs
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTU2NvcGUqIHNjb3Bl
LCBpbnQgZ2xvYmFsUmVnaXN0ZXJPZmZzZXQpCiB7CisgICAgU2FtcGxpbmdTY29wZSBzYW1wbGlu
Z1Njb3BlKHRoaXMpOworICAgIAogICAgIEFTU0VSVChpc1ZhbGlkVGhpc09iamVjdCh0aGlzVmFs
dWUsIGNhbGxGcmFtZSkpOwogICAgIEFTU0VSVCghc2NvcGUtPmdsb2JhbERhdGEoKS0+ZXhjZXB0
aW9uKTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVz
eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMDMxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAwLDYgKzQwMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CiAKICAgICBtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7
CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fZ2xvYmFsUmVzb2x2ZUlu
Zm9JbmRleCA9IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAgICAgCkBAIC03Mzgs
NiArNzM5LDIwIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAg
ICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKQogICAgICAgICBt
X3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNvcHlUb1N0dWJJbmZvKG1fY29kZUJs
b2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKSwgcGF0Y2hCdWZmZXIpOworICAgIG1fY29kZUJsb2Nr
LT5zZXROdW1iZXJPZkJ5VmFsSW5mb3MobV9ieVZhbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLnNpemUo
KTsgKytpKSB7CisgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgYmFkVHlwZUp1bXAgPSBDb2RlTG9j
YXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tp
XS5iYWRUeXBlSnVtcCkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBkb25lVGFyZ2V0ID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmRvbmVUYXJn
ZXQpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5zbG93UGF0aFRhcmdldCk7
CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgcmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2YobV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5yZXR1cm5BZGRyZXNzKTsKKyAgICAg
ICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5ieVZhbEluZm8oaSkgPSBCeVZhbEluZm8oCisgICAg
ICAgICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXgsCisgICAgICAg
ICAgICBiYWRUeXBlSnVtcCwKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0u
YXJyYXlNb2RlLAorICAgICAgICAgICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGJhZFR5cGVK
dW1wLCBkb25lVGFyZ2V0KSwKKyAgICAgICAgICAgIGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihy
ZXR1cm5BZGRyZXNzLCBzbG93UGF0aFRhcmdldCkpOworICAgIH0KICAgICBtX2NvZGVCbG9jay0+
c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51
bWJlck9mQ2FsbExpbmtJbmZvcygpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBjb3B5VG9TdHViSW5mbyhTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbywgTGlua0J1
ZmZlciAmcGF0Y2hCdWZmZXIpOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgQnlWYWxDb21waWxhdGlv
bkluZm8geworICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbygpIHsgfQorICAgICAgICAKKyAg
ICAgICAgQnlWYWxDb21waWxhdGlvbkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXAsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0KQorICAgICAgICAgICAgOiBieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIGJhZFR5cGVKdW1wKGJhZFR5
cGVKdW1wKQorICAgICAgICAgICAgLCBhcnJheU1vZGUoYXJyYXlNb2RlKQorICAgICAgICAgICAg
LCBkb25lVGFyZ2V0KGRvbmVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgYmFkVHlwZUp1bXA7CisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lVGFyZ2V0OworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIHJldHVybkFkZHJlc3M7CisgICAgfTsKKwogICAgIHN0cnVjdCBTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBhdGhPdGhl
cjsKQEAgLTM0OCw2ICszNjcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQu
bV9ieXRlY29kZU9mZnNldCA9IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAg
aml0LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVy
ZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJl
Y3QpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlR2V0
QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGppdChnbG9iYWxE
YXRhLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWwoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAg
eworICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJl
c3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAg
ICAgICAgIHsKQEAgLTM5Nyw2ICs0MzAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qLCBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqLCBpbnQsIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNo
YWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVy
ZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRy
ZXNzUHRyLCBDYWxsRnJhbWUqKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJldHVybkFkZHJlc3NQ
dHIsIGJvb2wgZGlyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVz
c1B0ciwgSklUQXJyYXlNb2RlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CkBA
IC00NTIsNiArNDg4LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIFJlZ2lz
dGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRleGlu
Z1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9m
aWxlKik7CisgICAgICAgIAorICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlNb2RlKEFy
cmF5UHJvZmlsZSopOworICAgICAgICAKKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDEs
IGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGV4aW5nIHR5cGUuCisgICAgICAg
IC8vIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZCB6ZXJvIGV4dGVuZGVkLiBCYXNlIGlzIGNl
bGwgY2hlY2tlZC4KKyAgICAgICAgLy8gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuIFJl
dHVybnMgdGhlIHNsb3cgY2FzZXMuIEZhbGwtdGhyb3VnaAorICAgICAgICAvLyBjYXNlIGNvbnRh
aW5zIHJlc3VsdCBpbiByZWdUMCwgYW5kIGl0IGlzIG5vdCB5ZXQgcHJvZmlsZWQuCisgICAgICAg
IEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFp
bnMgaW5kZWNpbmcgdHlwZS4KKyAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5
ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKKyAgICAgICAgLy8gemVyby1l
eHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2Zp
bGVkLgorICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgorICAgICAgICBKdW1wTGlz
dCBlbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogCiAgICAgICAgIGVudW0gRmluYWxPYmpl
Y3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCkBAIC04NzAsNiArOTIyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwog
ICAgICAgICBWZWN0b3I8TGFiZWw+IG1fbGFiZWxzOwogICAgICAgICBWZWN0b3I8UHJvcGVydHlT
dHViQ29tcGlsYXRpb25JbmZvPiBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvOworICAg
ICAgICBWZWN0b3I8QnlWYWxDb21waWxhdGlvbkluZm8+IG1fYnlWYWxDb21waWxhdGlvbkluZm87
CiAgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8TWV0aG9kQ2FsbENvbXBp
bGF0aW9uSW5mbz4gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvOwogICAgICAgICBWZWN0b3I8
SnVtcFRhYmxlPiBtX2ptcFRhYmxlOwpAQCAtODc5LDYgKzkzMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIHVu
c2lnbmVkIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworICAgICAgICB1bnNpZ25l
ZCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9nbG9iYWxSZXNv
bHZlSW5mb0luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5rSW5mb0luZGV4OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0NywyMyArNDQ3LDIyIEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2Nh
dGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lz
dGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoID0gc3RkOjptYXgobGVuZ3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0g
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGlu
aXRpYWxMZW5ndGgpKTsKKyAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVu
Z3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRl
cmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIGluaXRpYWxMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKworICAgIGxvYWRQdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
ZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNoKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpKTsKIAogICAgIC8vIFdlIGFsbG9j
YXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVj
dGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJheSBpbml0aWFsaXphdGlv
bi4KICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJ
bmRleGluZ0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNl
bGwgZm9yIHRoZSBhcnJheS4KLSAgICBsb2FkUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSwgc2NyYXRjaCk7CiAgICAgZW1pdEFsbG9jYXRl
QmFzaWNKU09iamVjdDxKU0FycmF5LCBNYXJrZWRCbG9jazo6Tm9uZT4oc2NyYXRjaCwgY2VsbFJl
c3VsdCwgc3RvcmFnZVB0cik7CiAKLSAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZv
IGluIHRoZSBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9y
ZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpu
dW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVu
Z3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpzcGFy
c2VNYXBPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4g
dGhlIGluZGV4aW5nIGhlYWRlci4KKyAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Mo
c3RvcmFnZVJlc3VsdCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAg
c3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXds
eSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgogICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFk
ZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CkBAIC00NzIs
MTIgKzQ3MSwxMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVz
UmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAg
c3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Cisg
ICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAjZWxzZQogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkp
KTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdp
c3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZih1aW50MzJfdCkpLCBzdG9yYWdl
UHRyKTsKLSAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0
ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC01NjEsMTAgKzU2
MCwyNSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGCiAKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUpCiB7Ci0gICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9I
b2xlKCkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXco
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBJbmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKK3sKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJy
YXlNb2RlcygpICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJh
eU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBhYmlsaXR5KSkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhwcm9m
aWxlLCBIYXNBcnJheVN0b3JhZ2UpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdlOwor
ICAgIHJldHVybiBKSVRDb250aWd1b3VzOwogfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4MCw3ICsxNjgwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YQogICAgIGVtaXRTdG9yZSh1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzKSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKICAgICBza2lw
QXJndW1lbnRzQ3JlYXRpb24ubGluayh0aGlzKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYXJn
dW1lbnRzKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSk7CiAgICAgc3R1YkNh
bGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY1LDcgKzE1
NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRz
KSk7CiAgICAgCiAgICAgc2tpcEFyZ3VtZW50c0NyZWF0aW9uLmxpbmsodGhpcyk7Ci0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOworICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpOwogICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KGFyZ3VtZW50cywgcmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGlu
Zyhkc3QpOwpAQCAtMTY2MSw3ICsxNjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkp
IHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1l
KCkKKyAgICAgICAgfHwgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTE2ODAsOCArMTY4MSwxMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFs
bG9jYXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9w
ZXIgc3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGlu
dCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3Bp
ZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQorICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6aXNP
dmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IobGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBXZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxs
LgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NCwyNyArMjA0LDc4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
IHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVu
c2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGU7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJl
Z1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmls
ZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDEs
IHJlZ1QzLCBwcm9maWxlKTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9k
ZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6
CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCi0gICAg
bG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVn
VDApOyAvLyBwYXlsb2FkCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICBhZGRTbG93Q2FzZShi
YWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogICAgIAorICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEp1bXAgcmVzdWx0T0sg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7Cisj
ZW5kaWYKKwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdU
SChvcF9nZXRfYnlfdmFsKSwgZHN0LCByZWdUMSwgcmVnVDApOworICAgIAorICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZz
ZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRD
b250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQor
eworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOwor
ICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworICAgIAorICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFn
CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZAor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwog
fQogCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsK
KyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgCisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2Fk
MzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisgICAgCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIHVuc2lnbmVkIGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0yNDgsMTAgKzI5OSwxNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBlbXB0eSB2YWx1ZQogICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAK
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJv
cGVydHkpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKKyAgICBDYWxsIGNhbGwgPSBzdHViQ2Fs
bC5jYWxsKGRzdCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwor
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CiB9CkBAIC0yNjAsMjAgKzMxNyw4MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKEluc3RydWN0aW9uCiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIHByb2ZpbGUpOworICAgIAorICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGln
dW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJy
YXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAg
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
bV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQogCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2lnbmVkIHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0
MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIs
IEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAg
IAorICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDEsIHJlZ1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICAKKyAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywg
QnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOworICAgIAorICAgIGVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBqdW1w
KCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywg
VW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3Mp
OwogICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgCisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCiAgICAgSnVt
cCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSk7CiAgICAgCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0y
ODMsNyArNDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgog
ICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVn
VDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7
CiAgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKICAgICAKQEAgLTI5
Miw2ICs0MTEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgog
ICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGVuZC5saW5r
KHRoaXMpOworICAgIAorICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwg
cmVnVDMsIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMzAzLDEzICs0MjYsMTkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
aW4gdmVjdG9yIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRz
CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAogICAgIEpJVFN0dWJD
YWxsIHN0dWJQdXRCeVZhbENhbGwodGhpcywgY3RpX29wX3B1dF9ieV92YWwpOwogICAgIHN0dWJQ
dXRCeVZhbENhbGwuYWRkQXJndW1lbnQoYmFzZSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRB
cmd1bWVudChwcm9wZXJ0eSk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1
ZSk7Ci0gICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1
dEJ5VmFsQ2FsbC5jYWxsKCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNz
ID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CkBAIC0xMTEsMTcgKzExMiw2NCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwg
cmVnVDMsIHByb2ZpbGUpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwogCi0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBKSVRBcnJh
eU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250
aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAg
ICAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDApOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICByZXN1bHRPSy5saW5r
KHRoaXMpOworI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUs
IG1vZGUsIGRvbmUpKTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWRQdHIo
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpLCByZWdUMCk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNs
b3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7CisKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxl
UHRyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDYsMTAgKzE5NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNo
ZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQogICAgIAorICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYmFzZSwg
cmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7Ci0gICAg
c3R1YkNhbGwuY2FsbChkc3QpOworICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsK
KworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNs
b3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbElu
c3RydWN0aW9uSW5kZXgrKzsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKIH0KQEAg
LTIyNiw3ICsyODAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9u
CiB7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJh
eVByb2ZpbGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJv
cGVydHksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2Vy
KHJlZ1QxKTsKQEAgLTIzNCwxMCArMjg4LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBKSVRBcnJheU1vZGUg
bW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3Vz
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0
b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5
dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CisKKyAgICBlbWl0V3JpdGVCYXJy
aWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91
cykpOworICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
CisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
b3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgCisgICAg
ZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVn
VDMsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwor
ICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAorICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIEp1
bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIApA
QCAtMjQ3LDggKzM2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2Zp
bGUpOworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CiAgICAgYnJhbmNoMzIoQmVsb3csIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1Rv
KHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwpAQCAtMjU3LDggKzM3Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24KICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAgIGVuZC5s
aW5rKHRoaXMpOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCwgcmVnVDMsIHJlZ1QxLCBy
ZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yNzAsMTMgKzM4NiwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2
ZWN0b3IgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG91dCBvZiBib3VuZHMKKyAg
ICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAKICAgICBKSVRTdHViQ2FsbCBzdHVi
UHV0QnlWYWxDYWxsKHRoaXMsIGN0aV9vcF9wdXRfYnlfdmFsKTsKICAgICBzdHViUHV0QnlWYWxD
YWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50
KHByb3BlcnR5LCByZWdUMik7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudCh2YWx1
ZSwgcmVnVDIpOwotICAgIHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworICAgIENhbGwgY2FsbCA9
IHN0dWJQdXRCeVZhbENhbGwuY2FsbCgpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRy
ZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaW5kZXgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTY1Niw3ICs3NzgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5
TGVuCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KHJl
Z1QyLCByZWdUMSwgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpOwogICAgIEp1bXAgZmFpbHVyZUNh
c2VzMSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKElzQXJyYXkpKTsK
LSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UgfCBIYXND
b250aWd1b3VzKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGgg
ZnJvbSB0aGUgc3RvcmFnZQogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwpAQCAtMTI3NCw2ICsxMzk2LDc2IEBAIGJvb2wgSklU
Ojppc0RpcmVjdFB1dEJ5SWQoU3RydWN0dXJlU3R1YkkKICAgICB9CiB9CiAKK3ZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5i
ZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVC
bG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25M
YWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAg
ICgiQmFzZWxpbmUgZ2V0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2lu
dCAlcCIsCisgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7Cisg
ICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkg
eworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRp
Z3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAg
ICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlv
bkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJl
dHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGlu
ZSBwdXRfYnlfdmFsIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAg
ICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1
dF9ieV92YWxfZ2VuZXJpYykpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5o
IgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIK
ICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0y
NDE0LDYgKzI0MTUsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwo
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgICAg
ICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9w
ZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoc3Vic2NyaXB0Lmlz
VUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwor
ICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmNhbkdldEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFz
ZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0KKworICAgIGlmIChpc05hbWUo
c3Vic2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nh
c3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7CisK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNh
bGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNh
bGxGcmFtZSwgcHJvcGVydHkpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CkBAIC0yNDIzLDM1ICsyNDQ4LDQ0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1
YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNl
VmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1
YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAg
ICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0
cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7
Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92
YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VW
YWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAg
ICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyB0aGlzIGF0IGFsbC4KKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Cisg
ICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9y
Tm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0
QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5n
VHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorICAgIAor
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWxfZ2VuZXJp
YykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAo
aXNOYW1lKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
Z2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSkt
PnByaXZhdGVOYW1lKCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVy
dHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZy
YW1lKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJv
cGVydHkpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJf
UkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0yNTAyLDIzICsyNTM2LDE0IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3B1dF9ieV92YWwpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
c3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tG
cmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKLQogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUlu
dDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVp
Y2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0
SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI1MjgsMTEgKzI1NTMsNjEgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICBiYXNlVmFs
dWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwo
KSktPnByaXZhdGVOYW1lKCksIHZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFt
ZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhy
ZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4
Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFu
IGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQo
Y2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgfQorfQor
CitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQoreworICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFy
Z3NbMl0uanNWYWx1ZSgpOworCisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNj
cmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemlu
ZyBhdCBhbGwuCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUp
OworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8oKSkgeworICAgICAgICAgICAgLy8gRG9udCBldmVyIHRyeSB0byBvcHRpbWl6ZS4K
KyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5l
cmljKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGlt
aXplLgorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5
dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRp
bWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGlu
Z1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5
TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlKTsKKworICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tG
cmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzJdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9i
eV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7
CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90
ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBs
b2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQx
LCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBi
dGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXog
dDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpIDRbUENdLCB0MQogICAgIGxv
YWRwIDMyW1BDXSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApA
QCAtMTMwNiwxMCArMTMwNiwyMSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkaSAx
MltQQ10sIHQzCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDMsIEludDMyVGFn
LCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1
b3VzCisgICAgCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaSBU
YWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QzLCB0MSwg
OF0sIHQxCisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3Vv
dXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKLSAg
ICBsb2FkaSA0W1BDXSwgdDAKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFn
T2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciAr
IFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKworLm9wR2V0QnlWYWxEb25lOgorICAgIGxv
YWRpIDRbUENdLCB0MAogICAgIGJpZXEgdDIsIEVtcHR5VmFsdWVUYWcsIC5vcEdldEJ5VmFsU2xv
dwogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDAsIDhdCiAgICAgc3RvcmVpIHQxLCBQ
YXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCkBAIC0xMzgzLDI5ICsxMzk0LDUyIEBAIF9sbGludF9v
cF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAg
IGxvYWRwIDE2W1BDXSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6
IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdwogICAgIGxvYWRpIDhbUENdLCB0
MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQwLCBJbnQzMlRhZywgdDIsIC5v
cFB1dEJ5VmFsU2xvdykKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgSW50
MzJUYWcsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJpZXEg
QXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDIsIDhdLCBFbXB0eVZhbHVl
VGFnLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgotICAgIGxvYWRp
IDEyW1BDXSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyh0MywgdDEsIHQzKQot
ICAgIHdyaXRlQmFycmllcih0MSwgdDMpCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1f
dmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0KLSAgICBzdG9yZWkgdDMsIEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MiwgOF0KKyAgICBidGl6IHQyLCBIYXND
b250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQzLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwg
Lm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0
b3JlUmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisgICAgc3RvcmVp
IHQxLCBUYWdPZmZzZXRbdDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0
MCwgdDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZC
b3VuZHM6CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBpZiBWQUxVRV9Q
Uk9GSUxFUgorICAgICAgICBsb2FkcCAxNltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJh
eVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCisgICAgZW5kCisgICAgYWRkaSAxLCB0Mywg
dDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3Jl
UmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJh
eVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
bG93CisgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0Mywg
OF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5
VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGkgMTJbUENdLCB0MgorICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHQyLCB0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyKHQx
LCB0MikKKyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRb
dDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxv
YWRPZmZzZXRbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6
Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0g
ICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAg
ICAgIGxvYWRwIDE2W1BDXSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0MV0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9u
dW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVz
dWx0CisgICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAog
ICAgIGFkZGkgMSwgdDIsIHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZh
bFN0b3JlUmVzdWx0CisgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQK
IAogLm9wUHV0QnlWYWxTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1
dF9ieV92YWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAg
IGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0Miwg
dDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRp
eiB0MiwgKEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwg
dDEKICAgICBsb2FkcCA2NFtQQiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVt0M10sIHQwCkBAIC0xMTQ3LDE0ICsxMTQ3LDI1IEBAIF9sbGludF9vcF9nZXRfYnlf
dmFsOgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0
MywgdDEpCiAgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJy
YXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3Vz
LCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4
aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlW
YWxTbG93CisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4
XSwgdDIKKyAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKyAgICBqbXAgLm9wR2V0QnlWYWxE
b25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0
b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFl
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAg
ICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHog
dDIsIC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3RvcmVwIHQyLCBb
Y2ZyLCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZhbHVlUHJvZmls
ZSh0MiwgdDApCkBAIC0xMjI2LDI5ICsxMjM3LDUxIEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgog
ICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRwIDMyW1BCLCBQ
QywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFz
QXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwg
dDAKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQdXRCeVZhbFNs
b3cpCi0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQw
LCB0MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxvYWRwIEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNs
b3cKLSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlW
YWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4
XSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBidGl6IHQyLCBI
YXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0
MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0
aFt0MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRp
Z3VvdXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEpCisgICAgc3Rv
cmVwIHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGln
dW91c091dE9mQm91bmRzOgorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAg
aWYgVkFMVUVfUFJPRklMRVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAg
ICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQK
KyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlW
YWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAs
IHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0
b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3Rv
cmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEs
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5v
cFB1dEJ5VmFsRW1wdHk6Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZB
TFVFX1BST0ZJTEVSCi0gICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVU
b0hvbGVbdDNdCisgICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3Jl
YiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRk
aSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDIsIHQxCisgICAgYmliIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAorICAgIGFkZGkgMSwgdDMs
IHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Cisg
ICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxT
bG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAg
ZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0
IElzQXJyYXkgPSAxCitjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9y
YWdlID0gOAotY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlID0gMTYKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaQogCiBpbmxpbmUgYm9vbCBpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQogewot
ICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBt
aW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CisgICAgcmV0dXJuIGxlbmd0aCAvIG1p
bkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKIH0KIAogaW5saW5lIEluZGV4aW5nSGVh
ZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsx
OTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tCiAvLyBjdXJy
ZW50Q291bnQpIHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgbGVmdCBvciByaWdodCBhcyBhcHByb3By
aWF0ZTsgaW4gdGhlCiAvLyBjYXNlIG9mIHNoaWZ0IHRoaXMgbXVzdCBiZSByZW1vdmluZyB2YWx1
ZXMsIGluIHRoZSBjYXNlIG9mIHVuc2hpZnQgdGhpcwogLy8gbXVzdCBiZSBpbnRyb2R1Y2luZyBu
ZXcgdmFsdWVzLgotc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1
bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6
U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENv
dW50LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VS
VChjdXJyZW50Q291bnQgPiByZXN1bHRDb3VudCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjdXJy
ZW50Q291bnQgLSByZXN1bHRDb3VudDsKQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjCiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmop
KSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAg
aWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRD
b3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9
PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4o
ZXhlYywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
MzEsNyArMjMyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYwog
ICAgICAgICB9CiAgICAgfQogfQotc3RhdGljIGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJy
ZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0
ZTxKU0FycmF5OjpTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KK3ZvaWQgdW5zaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2ln
bmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBBU1NFUlQocmVzdWx0Q291bnQgPiBjdXJyZW50Q291bnQpOwogICAgIHVuc2lnbmVk
IGNvdW50ID0gcmVzdWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CkBAIC0yNDcsMTAgKzI0OSwxMCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4CiAKICAgICBpZiAoaXNK
U0FycmF5KHRoaXNPYmopKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlz
T2JqKTsKLSAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVu
c2hpZnRDb3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5n
dGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVuc2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhl
YywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAt
LWspIHsKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAg
ICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CkBAIC01MjYsNyArNTI4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBhcnJh
eS0+cHVzaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiAgICAgfQotCisgICAgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU0
NCw2ICs1NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQorICAgIAogICAgIEpTVmFsdWUgbmV3
TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90
PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBuZXdMZW5ndGgpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKQEAgLTYwMCw3ICs2MDMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMs
IDApOwotICAgICAgICBzaGlmdChleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOworICAg
ICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAs
IDEsIDAsIGxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHB1
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKGxlbmd0aCAtIDEpKTsKQEAgLTczMCw3ICs3MzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYykpOwogCkBAIC03NjIsMTEgKzc2NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4
PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxB
cmdzIDwgZGVsZXRlQ291bnQpIHsKLSAgICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgYmVnaW4s
IGRlbGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNB
cnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNv
dW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKLSAgICAg
ICAgdW5zaGlmdChleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxB
cmdzLCBsZW5ndGgpOworICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxp
Y2U+KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxl
bmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIHVu
c2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7
Ci0gICAgICAgIHVuc2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwor
ICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09i
aiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdz
IGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9m
IGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNo
YXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQor
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCk7IH0KQEAgLTcwLDkgKzc5LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50
MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5n
dGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4
aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rv
ckxlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5n
dGgodmFsdWUpOyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRl
eGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFy
cmF5U3RvcmFnZT4oKTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygp
IHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9Cisg
ICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjb250aWd1b3VzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QnV0dGVyZmx5Kj4oY29udGlndW91cyk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhP
ZlByb3BlcnR5U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzAzMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnJlc2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBB
U1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNl
IHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAg
LTE2Myw3ICsxNjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3Ry
CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFn
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBh
Y2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2Vl
IGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwxMCArNDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNp
dAogCiBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0
b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdUeXBlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgY2hhciogaW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgY2hhciByZXN1bHRbMTI4XTsKKyAgICBjb25zdCBj
aGFyKiBiYXNpY05hbWU7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVz
KSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5IjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICBiYXNpY05hbWUgPSAiTm9uQXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAi
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiTm9uQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXlDbGFzczoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5Q2xhc3MiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJB
cnJheVdpdGhDb250aWd1b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhBcnJheVN0b3JhZ2Ui
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6
CisgICAgICAgIGJhc2ljTmFtZSA9ICJBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYmFzaWNOYW1lID0gIlVua25vd24h
IjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHNucHJpbnRmKAorICAgICAgICBy
ZXN1bHQsIHNpemVvZihyZXN1bHQpLCAiJXMlcyIsIGJhc2ljTmFtZSwKKyAgICAgICAgKGluZGV4
aW5nVHlwZSAmIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzKSA/ICJ8TWF5SGF2ZUluZGV4ZWRBY2Nl
c3NvcnMiIDogIiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuaAkocmV2aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE5ICszMiwyMSBAQCB0eXBl
ZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJl
c2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5
ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNDb250
aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJh
eVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNTbG93
UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIAogLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tp
bmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNrZWQg
b2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAzMjsgLy8gTWVhbnMgdGhhdCB0aGlz
IG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0Lgotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSA2NDsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMgID0gMzI7CiAKIC8vIExpc3Qg
b2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9u
QXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgPSBIYXNDb250aWd1b3VzOwogc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgICAgID0g
SGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIHN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7
IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXkiIGJ1dCB0aGlzIHdvdWxkIGxlYWQgdG8g
ZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAgID0gSXNBcnJheSB8IEhhc0NvbnRpZ3Vv
dXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICAg
ICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc1Nsb3dQ
dXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU0LDEwIEBAIHN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJheTogICAgICAgICAgICAgICAgICAgIFwK
ICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQpAQCAtNzYs
NiArODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0luZGV4aW5nSGVhZGVyKEluZAogICAg
IHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBlKTsKIH0KIAorc3RhdGljIGlubGluZSBi
b29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKK3sKKyAgICByZXR1
cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKIHsKICAgICBy
ZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJh
eVN0b3JhZ2UpKTsKQEAgLTg2LDYgKzk3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZFVz
ZVNsb3dQdXQoSW5kZQogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBIYXNTbG93UHV0QXJy
YXlTdG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciogaW5kZXhpbmdUeXBlVG9TdHJpbmcoSW5kZXhp
bmdUeXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDMxOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTMwMzE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNyw5ICszMzcsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNl
KEpTR2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQor
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uLCBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVy
IHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgpAQCAtNDAy
LDEyICs0MDEsNzEgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFz
czoKKyAgICAgICAgaWYgKCFuZXdMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAg
ICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBl
eGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIGNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIH0K
KyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdM
ZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOgorICAgICAgICBpZiAobmV3TGVuZ3RoID09IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVu
Z3RoID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBk
byBmYXN0IHB1c2guCisgICAgICAgICAgICB8fCAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgKKyAgICAgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdM
ZW5ndGgsIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMobV9idXR0ZXJmbHkpKSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAg
IGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7
CisgICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bmV3TGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3
TGVuZ3RoOykKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIo
KTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1
cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0
aW9uLCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENS
QVNIKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIEpTVmFsdWUgSlNBcnJh
eTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWxlbmd0aC0tKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uY2xlYXIoKTsKKyAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAg
ICAKQEAgLTQzMSwyNiArNDg5LDI4IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotCi0gICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCi0g
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
LSAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAgICAgLy8gUmV0dXJu
IGVsZW1lbnQuCi0gICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpbmRleCA9IGdldEFycmF5TGVuZ3RoKCkgLSAxOworICAgIC8vIExldCBl
bGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4
ZWMsIGluZGV4KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAgICBpZiAoIWRlbGV0ZVBy
b3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1l
dGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICBz
ZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgIC8vIFJldHVybiBlbGVtZW50LgorICAg
IHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVu
dGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtNDY0LDYgKzUyNCwyNiBAQCB2
b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAg
QVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBp
ZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChs
ZW5ndGggKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICAgICAgbWV0aG9k
VGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsKKyAg
ICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0
aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhl
eGVjLCBsZW5ndGgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IGxlbmd0aCgpOwogICAgICAgICBpZiAoYXR0ZW1wdFRvSW50ZXJjZXB0UHV0
QnlJbmRleE9uSG9sZShleGVjLCBvbGRMZW5ndGgsIHZhbHVlLCB0cnVlKSkgewpAQCAtNTA1LDE4
ICs1ODUsMTQgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAg
IH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKGNvdW50ID4gMCk7Ci0gICAgCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERh
dGEoKSk7Ci0gICAgCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7
CiAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFy
cmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwK
ICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAg
IGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJz
ZUluZGV4aW5nTW9kZSgpKQorICAgIGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciB8fCBpblNwYXJzZUluZGV4aW5nTW9kZSgpIHx8IHNob3VsZFVzZVNsb3dQdXQo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKCFvbGRMZW5ndGgpCkBAIC01NjUsMTcgKzY0MSw2OSBAQCBib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBBU1NFUlQoY291bnQgPiAw
KTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
IGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNh
c2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChjb3VudCA8PSBvbGRM
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50
aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbworICAgICAgICAv
LyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCisgICAgICAgIGlmIChvbGRMZW5n
dGggLSAoc3RhcnRJbmRleCArIGNvdW50KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAg
ICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNv
dW50LCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgeworICAg
ICAgICAgICAgLy8gU3RvcmluZyB0byBhIGhvbGUgaXMgZmluZSBzaW5jZSB3ZSdyZSBzdGlsbCBo
YXZpbmcgYSBnb29kIHRpbWUuIEJ1dCByZWFkaW5nCisgICAgICAgICAgICAvLyBmcm9tIGEgaG9s
ZSBpcyB0b3RhbGx5IG5vdCBmaW5lLCBzaW5jZSB3ZSBtaWdodCBoYXZlIHRvIHJlYWQgZnJvbSB0
aGUgcHJvdG8KKyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdldCgpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCF2KSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRo
aXMgcGF0aCBpcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBtYWtlIHRoZSBzYW1lCisgICAgICAg
ICAgICAgICAgLy8gbWlzdGFrZSBpbiB0aGUgZnV0dXJlOiBzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZSgpIGNhbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgLy8gYWJvdXQgaG9sZXMg
KGF0IGxlYXN0IGZvciBub3cpLCBidXQgaXQgY2FuIGRldGVjdCB0aGVtIHF1aWNrbHkuIFNvCisg
ICAgICAgICAgICAgICAgLy8gd2UgY29udmVydCB0byBhcnJheSBzdG9yYWdlIGFuZCB0aGVuIGFs
bG93IHRoZSBhcnJheSBzdG9yYWdlIHBhdGggdG8KKyAgICAgICAgICAgICAgICAvLyBmaWd1cmUg
aXQgb3V0LgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5vIG5lZWQg
Zm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3VuZCBpbiB0aGUg
c2FtZSB2ZWN0b3IuCisgICAgICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCBvdXIgc3Rh
bmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgorICAgICAgICAg
ICAgLy8gYmFycmllci4KKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIHNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBhcnJheVN0b3JhZ2UoKSk7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5zaGlmdCBjYW4g
YmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAotYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3Vu
dCkKK2Jvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7CiAKICAgICBBU1NFUlQoc3RhcnRJbmRleCA8PSBsZW5ndGgpOwogCiAgICAgLy8g
SWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1h
bCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90
eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBz
dG9yYWdlLT5pblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkgfHwgc2hvdWxkVXNlU2xv
d1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBib29sIG1vdmVGcm9udCA9ICFzdGFydEluZGV4IHx8IHN0YXJ0SW5kZXggPCBsZW5n
dGggLyAyOwpAQCAtNjEwLDYgKzczOCw0OCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChF
eGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50KQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICAvLyBXZSBjb3VsZCBo
YW5kbGUgdGhpcy4gQnV0IGl0IHNob3VsZG4ndCBldmVyIGNvbWUgdXAsIHNvIHdlIHdvbid0Lgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogeworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBl
bnRpcmUgYXJyYXkgdG8gZG8gdGhlIHVuc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KKyAg
ICAgICAgLy8gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93LgorICAgICAgICBpZiAob2xk
TGVuZ3RoIC0gc3RhcnRJbmRleCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAgICAgICAg
ICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwg
Y291bnQsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgp
KSk7CisgICAgICAgIAorICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgb2xkTGVuZ3RoICsgY291bnQpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4OykgeworICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghdikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgICAgICBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTk9URTogd2UncmUgbGVhdmluZyBiZWlu
ZyBnYXJiYWdlIGluIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IHdlIHNoaWZ0ZWQgb3V0Cisg
ICAgICAgIC8vIG9mLiBUaGlzIGlzIGZpbmUgYmVjYXVzZSB0aGUgY2FsbGVyIGlzIHJlcXVpcmVk
IHRvIHN0b3JlIG92ZXIgdGhhdCBhcmVhLCBhbmQKKyAgICAgICAgLy8gaW4gY29udGlndW91cyBt
b2RlIHN0b3JpbmcgaW50byBhIGhvbGUgaXMgZ3VhcmFudGVlZCB0byBiZWhhdmUgZXhhY3RseSB0
aGUgc2FtZQorICAgICAgICAvLyBhcyBzdG9yaW5nIG92ZXIgYW4gZXhpc3RpbmcgZWxlbWVudC4K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlOgorICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVj
LCBzdGFydEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CiBzdGF0aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikKIHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4o
YSktPmFzTnVtYmVyKCk7CkBAIC02MjQsNiArNzk0LDQ1IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KGMKICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZSh2YS0+c2Vj
b25kLCB2Yi0+c2Vjb25kKTsKIH0KIAordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZT4KK3ZvaWQgSlNBcnJheTo6c29ydE51bWVyaWNWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBj
YWxsRGF0YSkKK3sKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aENvbnRpZ3Vv
dXMgfHwgaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgCisgICAg
dW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOworICAgIHVuc2lnbmVkIG5ld1Jl
bGV2YW50TGVuZ3RoOworICAgIGNvbXBhY3RGb3JTb3J0aW5nPGluZGV4aW5nVHlwZT4oCisgICAg
ICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwKKyAgICAgICAgbmV3UmVsZXZhbnRMZW5n
dGgpOworICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YSA9IGluZGV4aW5nRGF0
YTxpbmRleGluZ1R5cGU+KCk7CisgICAgCisgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBBcnJheVdp
dGhBcnJheVN0b3JhZ2UgJiYgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpKSB7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAg
IGlmICghZGF0YVtpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1i
ZXJzID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgIHJldHVybiBzb3J0KGV4ZWMs
IGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAKKyAgICAvLyBGb3Ig
bnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBt
ZXJnZXNvcnQuIFdlCisgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJp
bGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAgICAvLyBzaWRlLWVmZmVjdCBm
cm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgorICAgIHFz
b3J0KGRhdGEsIG5ld1JlbGV2YW50TGVuZ3RoLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgcmV0dXJuOworfQorCiB2b2lkIEpTQXJy
YXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24s
IENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAgQVNT
RVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKQEAgLTYzMiwxMTcgKzg0MSwxMjkgQEAgdm9p
ZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogICAgIGNhc2UgQXJyYXlDbGFz
czoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBj
b21wYWN0Rm9yU29ydGluZygpOwotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPihleGVjLCBjb21w
YXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICAgICAg
c2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKCFzdG9yYWdl
LT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJl
TnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCi0g
ICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3
aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgICAg
IC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJl
J3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcg
dGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgICAgIHFzb3J0KHN0b3Jh
Z2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFy
ZU51bWJlcnNGb3JRU29ydCk7Ci0gICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhBcnJheVN0b3JhZ2U+KGV4
ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKICAgICAgICAgcmV0dXJu
OwotICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLXZv
aWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZhbnRM
ZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKLSAgICAKLSAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJyYXlD
bGFzczoKKyAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQogICAgICAgICByZXR1cm47CisgICAgCisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNp
dmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KKyAg
ICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdp
Y2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQor
ICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlm
IHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisg
ICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBt
YWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCiAgICAgICAgIAotICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7Ci0gICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgQVNTRVJU
KCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
ICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhw
ZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQu
Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2lu
ZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVt
cG9yYXJ5Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9t
IGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRo
YXQgcmV0dXJuCi0gICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0
cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotICAg
ICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhyZWxldmFudExl
bmd0aCk7CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgSGVh
cDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwogICAgICAgICAKLSAg
ICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgdmFs
dWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1
ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAg
ICAgICAgfQorICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgpOworICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5k
ZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVl
LmlzUHJpbWl0aXZlKCk7CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZSBm
b2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZh
bHVlcyBldmVuIGFmdGVyCi0gICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhj
ZXB0aW9uLgorICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNh
bGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgIC8vIGEgdG9T
dHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAgICAKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAg
ICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxp
bmUoZXhlYyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsr
KQorICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5n
SW5saW5lKGV4ZWMpOwogICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFs
dWVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgeworICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgICAgIC8v
IEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBt
aWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0g
ICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBi
eSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXgg
c29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4K
ICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgICAgIGlmIChpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMpCi0gICAgICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwg
dmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1Bh
aXJGb3JRU29ydCk7Ci0jZWxzZQotICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkg
ZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgICAgICAvLyBF
Q01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFj
dGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIGlmIChpc1NvcnRpbmdQ
cmltaXRpdmVWYWx1ZXMpCiAgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6
ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0
KTsKKyAgICBlbHNlCisgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBs
aWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCisgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9l
cyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBl
cmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdl
ZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKKyAgICAvLyBpbmNy
ZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZh
bHVlcy4KKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAgIGNhc2UgQXJyYXlXaXRoQ29u
dGlndW91czoKKyAgICAgICAgZW5zdXJlQ29udGlndW91c0xlbmd0aChnbG9iYWxEYXRhLCByZWxl
dmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhl
IHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVj
dG9yIHN0b3JhZ2UsCi0gICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRo
ZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgICAgICBpZiAoc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsKLSAgICAgICAg
ICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGlm
IChhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgPCByZWxldmFudExlbmd0aCkgeworICAg
ICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWxldmFu
dExlbmd0aCk7CisgICAgICAgICAgICBiZWdpbiA9IGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsK
ICAgICAgICAgfQotICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgo
KSA8IHJlbGV2YW50TGVuZ3RoKQorICAgICAgICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0
aChyZWxldmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgYmVnaW5baV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgCisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVt
cFNvcnRWZWN0b3IoJnZhbHVlcyk7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlD
bGFzczoKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7
CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5n
dGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAg
ICAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLCBuZXdSZWxldmFudExlbmd0aCk7
CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3Vz
PigKKyAgICAgICAgICAgIGV4ZWMsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5n
dGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0aEFycmF5U3RvcmFnZT4oCisg
ICAgICAgICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQsIG5ld1JlbGV2YW50TGVuZ3Ro
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKICAgICAgICAg
CisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPigKKyAg
ICAgICAgICAgIGV4ZWMsIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgyOCwxMDggKzEw
NDksMTE2IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKICAgICBz
dGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAweDdGRkZGRkZGOyB9CiB9OwogCi12b2lkIEpT
QXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2Fs
bFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3RlbXBsYXRlPEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnRWZWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0
IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2Rl
KCkpOworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKTsKICAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewot
ICAgIGNhc2UgQXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVz
IGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVy
LgorICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNv
bXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCiAgICAgICAgIAotICAgICAgICAvLyBUaGUg
bWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xl
YXJseSB1cCB0byBubyBnb29kCi0gICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3Nl
ZC4KLSAgICAgICAgQVNTRVJUKGFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwotICAgICAgICBp
ZiAoYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8v
IFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBp
cyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNz
ZWQuCisgICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgIGlmICht
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oYXJyYXlTdG9yYWdlKCktPmxl
bmd0aCgpLCBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBBU1NFUlQo
IWFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIHVuc2lnbmVkIG5vZGVDb3Vu
dCA9IHVzZWRWZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHJl
bGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKKyAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1
c2VkVmVjdG9yTGVuZ3RoOwogICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlQ291bnQpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFub2RlQ291bnQpCisgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUs
IDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247Ci0gICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwotICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICBBVkxUcmVlPEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdo
IGZvciAyXjMxIGl0ZW1zCisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsK
KyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOworICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVKUykKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRv
cHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVu
Y3Rpb24pLCAyKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKCF0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6
IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rvciwg
bWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVu
ZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCisgICAgLy8gRklYTUU6
IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rvciwg
bWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCisgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIg
dXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQg
PSAwOworICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgIHVuc2lnbmVkIG51bVVuZGVm
aW5lZCA9IDA7CiAgICAgICAgIAotICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBp
Z25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNl
cnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICAgICAgZm9yICg7IG51bURl
ZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgICAgIGlm
IChudW1EZWZpbmVkID4gYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgdHJlZS5p
bnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYg
KGkgPiBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Z2V0KCk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAgICAgICAgIGlmICh2LmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKLSAgICAg
ICAgICAgICAgICB9CisgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlz
c2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBv
dGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgaWYgKG51bURlZmluZWQgPiBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNW
YWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsK
KyAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsK
KyAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
aWYgKGkgPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5nZXQo
KTsKKyAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
djsKKyAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAg
ICAgICArK251bURlZmluZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZDsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwKTsKKyAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKICAgICAgICAgCi0gICAgICAgIC8vIFRoZSBhcnJheSBzaXpl
IG1heSBoYXZlIGNoYW5nZWQuICBGaWd1cmUgb3V0IHRoZSBuZXcgYm91bmRzLgotICAgICAgICB1
bnNpZ25lZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gbWluKGFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKSwgYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAvLyBUaGUgYXJyYXkg
c2l6ZSBtYXkgaGF2ZSBjaGFuZ2VkLiAgRmlndXJlIG91dCB0aGUgbmV3IGJvdW5kcy4KKyAgICB1
bnNpZ25lZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdU
eXBlPigpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgZWxlbWVudHNUb0V4dHJhY3RUaHJl
c2hvbGQgPSBtaW4obWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG51bURlZmluZWQpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkpKTsKLSAg
ICAgICAgdW5zaWduZWQgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNl
ZFZlY3Rvckxlbmd0aCwgbmV3VXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIHVuc2lnbmVkIGNs
ZWFyRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgdXNlZFZl
Y3Rvckxlbmd0aCk7Ci0gICAgICAgIAotICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBp
bnRvIG1fc3RvcmFnZS4KLSAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5
Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVh
c3QodHJlZSk7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzVG9FeHRy
YWN0VGhyZXNob2xkOyArK2kpIHsKLSAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRl
cl0udmFsdWUpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgaSA8IHVuZGVmaW5lZEVsZW1lbnRz
VGhyZXNob2xkOyArK2kpCi0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
c2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBp
biB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB1
bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgaSA8IGNsZWFyRWxlbWVudHNUaHJlc2hvbGQ7ICsr
aSkKLSAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAg
IHVuc2lnbmVkIGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkID0gbWluKG1pbihuZXdlc3RVc2Vk
VmVjdG9yTGVuZ3RoLCBudW1EZWZpbmVkKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpKSk7CisgICAgdW5zaWduZWQgdW5kZWZpbmVkRWxlbWVu
dHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgbmV3VXNlZFZlY3Rvckxl
bmd0aCk7CisgICAgdW5zaWduZWQgY2xlYXJFbGVtZW50c1RocmVzaG9sZCA9IG1pbihuZXdlc3RV
c2VkVmVjdG9yTGVuZ3RoLCB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgCisgICAgLy8gQ29w
eSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAgQVZMVHJlZTxBVkxUcmVlQWJz
dHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOworICAgIGl0ZXIuc3Rh
cnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzVG9F
eHRyYWN0VGhyZXNob2xkOyArK2kpIHsKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlw
ZT4oKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sq
aXRlcl0udmFsdWUpOworICAgICAgICArK2l0ZXI7CisgICAgfQorICAgIC8vIFB1dCB1bmRlZmlu
ZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgZm9yICh1bnNpZ25lZCBpID0gZWxlbWVudHNUb0V4dHJh
Y3RUaHJlc2hvbGQ7IGkgPCB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgKytpKQorICAgICAg
ICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldFVuZGVmaW5lZCgpOworCisgICAg
Ly8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0
LgorICAgIGZvciAodW5zaWduZWQgaSA9IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkOyBpIDwg
Y2xlYXJFbGVtZW50c1RocmVzaG9sZDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhp
bmdUeXBlPigpW2ldLmNsZWFyKCk7CisgICAgCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRl
eGluZ1R5cGUpKQorICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG5ld1VzZWRWZWN0b3JMZW5ndGg7Cit9CisKK3ZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3Qg
Q2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUo
KSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGFy
cmF5U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yID0gdW5kZWZpbmVkRWxlbWVudHNUaHJl
c2hvbGQ7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBzb3J0VmVjdG9y
PEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHNvcnRWZWN0b3I8QXJyYXlXaXRoQXJyYXlTdG9yYWdlPihleGVjLCBjb21w
YXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIHJldHVybjsKLSAgICB9
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtOTM4LDExMyArMTE2NywxMjcgQEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFy
a2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgdW5z
aWduZWQgdmVjdG9yRW5kOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOworICAg
IAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBB
cnJheUNsYXNzOgogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
Q29udGlndW91czogeworICAgICAgICB2ZWN0b3JFbmQgPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CisgICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAotICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5k
OyArK2kpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3Rvcltp
XTsKLSAgICAgICAgICAgIGlmICghdikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBm
b3IgKDsgaSA8IHN0b3JhZ2UtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgICAgICBhcmdzLmFwcGVu
ZChnZXQoZXhlYywgaSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOworICAgICAgICB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCks
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgdmVjdG9yID0gMDsKKyAgICAgICAgdmVjdG9yRW5kID0gMDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kp
IHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAg
ICBpZiAoIXYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXJncy5hcHBlbmQodi5nZXQo
KSk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3RoKCk7ICsraSkKKyAgICAgICAg
YXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1
bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVu
Z3RoKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yOworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICAKICAgICBBU1NFUlQobGVuZ3Ro
ID09IHRoaXMtPmxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yID0gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
QVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAg
dW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0g
c3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5n
dGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9y
W2ldOwotICAgICAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxG
cmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWlu
KGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBDUkFTSCgpOworICAgICAgICB2ZWN0b3IgPSAwOworICAgICAgICB2ZWN0b3JFbmQg
PSAwOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07
CisgICAgICAgIGlmICghdikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYWxsRnJhbWUt
PnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwogICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IGxl
bmd0aDsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBp
KSk7CiB9CiAKLXVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKCkKK3RlbXBsYXRl
PEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0
aW5nKHVuc2lnbmVkJiBudW1EZWZpbmVkLCB1bnNpZ25lZCYgbmV3UmVsZXZhbnRMZW5ndGgpCiB7
CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICBBU1NFUlQoaW5kZXhp
bmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAKLSAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJyYXlDbGFzczoKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Ci0g
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
Pmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgdW5zaWduZWQgbXlSZWxl
dmFudExlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKKyAgICAKKyAgICBu
dW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwogICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG51bVVu
ZGVmaW5lZCA9IDA7CisgICAgZm9yICg7IG51bURlZmluZWQgPCBteVJlbGV2YW50TGVuZ3RoOyAr
K251bURlZmluZWQpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5n
VHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAo
OyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUg
diA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKHYpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICAr
K251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2
KTsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwg
bXlSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGluZGV4aW5nRGF0
YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7CisgICAgICAgIGlmICh2KSB7CisgICAgICAgICAg
ICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5
cGU+KClbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVCghc3RvcmFnZS0+
bV9zcGFyc2VNYXApOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLSAgICAgICAgCi0gICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIG51bURlZmluZWQ7CiAgICAgfQogICAgICAgICAKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotfQorICAgIG5ld1JlbGV2YW50TGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsK
KyAgICAKKyAgICBpZiAoaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpCisgICAgICAgIEFT
U0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3UmVsZXZhbnRMZW5ndGg7ICsraSkKKyAgICAgICAg
aW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5zZXRVbmRlZmluZWQoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBuZXdSZWxldmFudExlbmd0aDsgaSA8IG15UmVsZXZhbnRMZW5ndGg7ICsr
aSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5jbGVhcigpOwogCisg
ICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKQorICAgICAgICBhcnJheVN0b3Jh
Z2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1JlbGV2YW50TGVuZ3RoOworfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCArNzEsNjAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgcHVzaChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICAgICAgSlNWYWx1
ZSBwb3AoRXhlY1N0YXRlKik7CiAKLSAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKLSAgICAgICAgYm9vbCB1bnNo
aWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQp
OworICAgICAgICBlbnVtIFNoaWZ0Q291bnRNb2RlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgZm9y
bSBvZiBzaGlmdCBoaW50cyB0aGF0IHdlJ3JlIGRvaW5nIHF1ZXVlaW5nLiBXaXRoIHRoaXMgYXNz
dW1wdGlvbiBpbiBoYW5kLAorICAgICAgICAgICAgLy8gd2UgY29udmVydCB0byBBcnJheVN0b3Jh
Z2UsIHdoaWNoIGhhcyBxdWV1ZSBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgU2hpZnRDb3Vu
dEZvclNoaWZ0LAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIGZvcm0gb2Ygc2hp
ZnQgaGludHMgdGhhdCB3ZSdyZSBqdXN0IGRvaW5nIGNhcmUgYW5kIGZlZWRpbmcgb24gYW4gYXJy
YXkgdGhhdAorICAgICAgICAgICAgLy8gaXMgcHJvYmFibHkgdHlwaWNhbGx5IHVzZWQgZm9yIG9y
ZGluYXJ5IGFjY2Vzc2VzLiBXaXRoIHRoaXMgYXNzdW1wdGlvbiBpbiBoYW5kLAorICAgICAgICAg
ICAgLy8gd2UgdHJ5IHRvIHByZXNlcnZlIHdoYXRldmVyIGluZGV4aW5nIHR5cGUgaXQgaGFzIGFs
cmVhZHkuCisgICAgICAgICAgICBTaGlmdENvdW50Rm9yU3BsaWNlCisgICAgICAgIH07CisKKyAg
ICAgICAgYm9vbCBzaGlmdENvdW50Rm9yU2hpZnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJh
eVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBz
aGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50
V2l0aEFueUluZGV4aW5nVHlwZShleGVjLCBzdGFydEluZGV4LCBjb3VudCk7CisgICAgICAgIH0K
KyAgICAgICAgdGVtcGxhdGU8U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+CisgICAgICAg
IGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHNoaWZ0Q291bnRN
b2RlKSB7CisgICAgICAgICAgICBjYXNlIFNoaWZ0Q291bnRGb3JTaGlmdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsK
KyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNwbGljZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2hpZnRDb3VudEZvclNwbGljZShleGVjLCBzdGFydEluZGV4LCBjb3VudCk7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIHVuc2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBl
bnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTcGxpY2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoZXhlYywgc3RhcnRJbmRleCwgY291bnQp
OworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlPFNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRN
b2RlPgorICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHNoaWZ0Q291bnRNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNoaWZ0Q291bnRGb3JTaGlm
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50Rm9yU2hpZnQoZXhlYywgc3Rh
cnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU3BsaWNlOgor
ICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRGb3JTcGxpY2UoZXhlYywgc3RhcnRJ
bmRleCwgY291bnQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1l
bnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2Fs
bEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKQEAgLTk0LDE4ICsxNDYsNDQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZU9yTnVsbCgpOwogICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdl
dCgpOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgp
OwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNoaWZ0Q291bnRXaXRoQW55SW5k
ZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50
KTsKKyAgICAgICAgYm9vbCBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh1bnNpZ25lZCBzdGFy
dEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKik7CiAKLSAgICAgICAgdm9pZCBz
ZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsKLQorICAgICAgICBi
b29sIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJvb2wgdW5zaGlmdENv
dW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgs
IHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpOwogICAgICAgICBib29sIHVu
c2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIGJvb2wsIHVuc2lnbmVkKTsKKworICAg
ICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNv
cnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxs
VHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKTsKKyAgICAgICAgCisgICAg
ICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgc29y
dENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2lu
LCB1bnNpZ25lZCByZWxldmFudExlbmd0aCk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBj
b21wYWN0Rm9yU29ydGluZygpOworICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRWZWN0b3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb21w
YXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYpOworCisgICAgICAgIGJvb2wg
c2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBuZXdMZW5ndGgs
IGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSopOworICAgICAgICB2b2lkIHNldExl
bmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUpOworICAgICAgICAKKyAgICAg
ICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBjb21w
YWN0Rm9yU29ydGluZyh1bnNpZ25lZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQmIG5ld1JlbGV2YW50
TGVuZ3RoKTsKICAgICB9OwogCisgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQ29udGlndW91
c0FycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVyOworICAgICAgICBoZWFkZXIu
c2V0VmVjdG9yTGVuZ3RoKHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKSk7CisgICAg
ICAgIGhlYWRlci5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAs
IHRydWUsIGhlYWRlciwgaGVhZGVyLnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgaW5saW5lIEJ1dHRl
cmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZSgKQEAgLTEyMSw3ICsxOTksMTUgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAg
ICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5
KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5
V2l0aENvbnRpZ3VvdXMpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVDb250aWd1
b3VzQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5pdGlhbExlbmd0aCA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQorICAgICAgICAgICAgICAgICAgIHx8IChp
bml0aWFsTGVuZ3RoICYmIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZs
eShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfQogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEu
aGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwogICAgICAg
ICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJh
eTsKQEAgLTEzMywxNSArMjE5LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAodmVj
dG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCogdGVtcDsKLSAgICAgICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5
Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwotICAgICAgICBzdG9yYWdl
LT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAg
ICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250
aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICB2b2lkKiB0ZW1wOworICAgICAg
ICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBidXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAgICAgICAgICAgYnV0
dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2Uo
dGVtcCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0g
aW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pihn
bG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5
KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMTMwMzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDggQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU0Rlc3Ry
dWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX2FycmF5UHJvdG90eXBlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250aWd1b3VzKSk7CisgICAgbV9h
cnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9h
cnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAgICAgbV9hcnJh
eVN0cnVjdHVyZUZvclNsb3dQdXQuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3Rv
dHlwZS5nZXQoKSwgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpOwogICAgIG1fcmVnRXhw
TWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4
cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCkBAIC0zNTcsNyArMzU4LDcgQEAgT2JqZWN0c1dp
dGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6T2JqZWN0cwogaW5saW5lIGJvb2wgaGFzQnJva2VuSW5k
ZXhpbmcoSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICAvLyBUaGlzIHdpbGwgY2hhbmdlIGlmIHdl
IGhhdmUgbW9yZSBpbmRleGluZyB0eXBlcy4KLSAgICByZXR1cm4gISEob2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpOworICAgIHJldHVybiAhIShv
YmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSAmIChIYXNBcnJheVN0b3JhZ2UgfCBI
YXNDb250aWd1b3VzKSk7CiB9CiAKIHZvaWQgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRl
cjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCkBAIC00MTAsNiArNDExLDcgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFs
bCBKU0FycmF5IGFsbG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJl
IGZyb20KICAgICAvLyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0cnVjdHVyZSB0aGF0IHVzZXMg
U2xvd1B1dC4KICAgICBtX2FycmF5U3RydWN0dXJlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX2Fy
cmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhB
cnJheVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93
UHV0LmdldCgpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgb2JqZWN0cyB0aGF0
IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xvdyBraW5kIG9mCiAgICAgLy8g
aW5kZXhlZCBzdG9yYWdlLgpAQCAtNDg1LDYgKzQ4Nyw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9u
YW1lU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Fy
Z3VtZW50c1N0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJy
YXlTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5U3Ry
dWN0dXJlV2l0aEFycmF5U3RvcmFnZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9ib29sZWFuT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTMw
MzE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25hbWVTY29wZVN0cnVjdHVyZTsKICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcmd1bWVudHNTdHJ1Y3R1cmU7CiAgICAgICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmU7IC8vIFRoaXMgZ2V0cyBzZXQg
dG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2
ZSBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3Ry
dWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgLy8gVGhpcyBnZXRzIHNldCB0byBtX2FycmF5U3RydWN0
dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRlY2lkZSB0byBoYXZlIGEgYmFkIHRpbWUuCiAg
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0
OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1
cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGJhY2tDb25zdHJ1Y3Rv
clN0cnVjdHVyZTsKQEAgLTI2Nyw3ICsyNjgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
U3RydWN0dXJlKiBuYW1lU2NvcGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25hbWVTY29w
ZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUqIGFyZ3VtZW50c1N0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzU3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAg
IFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5U3RydWN0
dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlT
dG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uu
Z2V0KCk7IH0KICAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1cmUoKSB7IHJldHVy
biAmbV9hcnJheVN0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiBhZGRyZXNzT2ZBcnJheVN0cnVj
dHVyZVdpdGhBcnJheVN0b3JhZ2UoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJh
eVN0b3JhZ2U7IH0KICAgICAgICAgU3RydWN0dXJlKiBib29sZWFuT2JqZWN0U3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgICAg
IFN0cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1
cmUqIGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNr
RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAgLTQ3OSw3ICs0ODIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGlu
aXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA/IGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgOiBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlKCksIGluaXRpYWxMZW5ndGgpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9
IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCArMTMxLDQzIEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0
ZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJy
ZW50VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291
cmNlOworICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIEFT
U0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5ld0J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5
SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKLSAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgewotICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
KGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgY3VycmVudFNvdXJj
ZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAg
IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwKQogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOworICAgICAgICAgICAgICAgIGN1
cnJlbnRTb3VyY2UgPSAwOworICAgICAgICAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0p
IHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdl
dCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgKGN1
cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRl
cmZseTsKQEAgLTE1OCw2ICsxNzcsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZp
c2l0QnV0dGVyCiAgICAgICAgIAogICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3By
aWF0ZS4KICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCkBAIC0yMzQsNiArMjU2LDIwIEBAIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlz
T2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAg
aWYgKHZhbHVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVu
Z3RoKCkpCkBAIC0zNTEsNiArMzg3LDE2IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW3By
b3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwor
ICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisg
ICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChwcm9wZXJ0eU5hbWUgKyAxKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwpAQCAtNDQzLDYgKzQ4OSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRl
ckRpY3Rpb25hcnlJCiB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgLy8gTk9URTogdGhpcyBpcyBob3JyaWJseSBpbmVmZmljaWVudCwgYXMgaXQgd2ls
bCBwZXJmb3JtIHR3byBjb252ZXJzaW9ucy4gV2UgY291bGQgb3B0aW1pemUKKyAgICAgICAgLy8g
dGhpcyBjYXNlIGlmIHdlIGV2ZXIgY2FyZWQuCisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBlbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxE
YXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICBicmVhazsKQEAgLTQ2
NSw2ICs1MTYsMjQgQEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBYwog
ICAgIGdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRpbWUoZ2xvYmFsRGF0YSk7CiB9CiAKK1dyaXRl
QmFycmllcjxVbmtub3duPiogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5n
dGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0lu
ZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVk
c1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2Uo
KSk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZF
Q1RPUl9MRU4pOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdy
b3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChsZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxl
bmd0aCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVDb250aWd1b3Vz
KTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1
cmUpOworICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKK30KKwogQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCiB7CiAgICAgSW5k
ZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CkBAIC00ODAs
NyArNTQ5LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAg
IHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAwOwotICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRJbmRleGluZ1RyYW5zaXRpb24o
KSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEs
IG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
NDkwLDE2ICs1NTksOTYgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFy
cgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNU
T1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE5vblByb3BlcnR5VHJhbnNp
dGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGhh
c0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgCisgICAgdW5z
aWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVu
c2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6
ZSgpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5
LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVuZ3RoKSk7CisgICAgCisgICAg
bWVtY3B5KAorICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVy
dHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0
eVNpemUsCisgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwor
ICAgIAorICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKG5lZWRlZExlbmd0aCk7
CisgICAgbmV3U3RvcmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0aCk7CisgICAgbmV3U3RvcmFn
ZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7
CisgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gcHVibGljTGVuZ3RoOyBpLS07KSB7CisgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgIGlmICghdikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
Kys7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHRyYW5zaXRp
b24pOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVj
dHVyZSk7CisgICAgcmV0dXJuIG5ld1N0b3JhZ2U7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gY29u
dmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3sKKyAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKK30KKwor
V3JpdGVCYXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c1Nsb3coSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
IGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgc3RydWN0dXJlKCktPm5l
ZWRzU2xvd1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRhLCAwKTsKKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9y
YWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAg
ICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpOworICAgICAg
ICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAg
ICAgICAgCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGlmIChV
TkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGVu
c3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9i
YWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0J1
dHRlcmZseSogSlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgaWYgKFVOTElL
RUxZKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSkKKyAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgcmV0dXJuIEJ1dHRl
cmZseTo6ZnJvbUNvbnRpZ3VvdXMoY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwg
MCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQpAQCAtNTA3LDYgKzY1NiwxMCBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSB3YXkgbW9yZSBlZmZpY2ll
bnQsIGlmIHdlIGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIAogICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRh
LCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKQEAgLTUyNiw2ICs2Nzks
MTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogdm9pZCBKU09i
amVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3Jh
Z2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAg
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFn
ZSk7CkBAIC01NjksOCArNzI3LDcgQEAgdm9pZCBKU09iamVjdDo6c2V0UHJvdG90eXBlKEpTR2xv
YmFsRGF0YQogICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBuZXdTdHJ1Y3R1cmUsIFN3aXRj
aFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIG5l
d1N0cnVjdHVyZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEp
OwogfQogCiBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtNzA0LDYgKzg2MSwxNCBA
QCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAgICAgY2FzZSBBTExf
QkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKKyAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChpID49
IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCkBAIC04NzcsNiArMTA0Miwx
NyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgY2FzZSBB
TExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExl
bmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
b2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtMTEwMiw5
ICsxMjc4LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogewog
ICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwogICAgIAotICAgIGlmIChkZXNj
cmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKLSAgICAgICAgbm90
aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLQogICAg
IGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAgICAvLyBGYXN0IGNhc2U6IHdl
J3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQogICAgICAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRy
aWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCkBAIC0xMTE0
LDEwICsxMjg3LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgK
ICAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsK
ICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRv
ci52YWx1ZSgpLCAwLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cg
OiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgfQotCisgICAgICAgIAog
ICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB9CiAKKyAgICBpZiAoZGVzY3JpcHRvci5h
dHRyaWJ1dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCisgICAgICAgIG5vdGlmeVByZXNl
bmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisKICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwLmdldCgpOwogICAgIEFTU0VSVChtYXApOwogCkBAIC0xMjY2LDYgKzE0NDIsMzUgQEAgYm9v
bCBKU09iamVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbgogICAgIHJldHVybiBhc09iamVj
dChwcm90b3R5cGVWYWx1ZSktPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQ
cm90b3R5cGUoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKIH0KIAordm9pZCBK
U09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0
cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7Cisg
ICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgIAorICAgIC8vIEZvciB1
cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4gdGhlIHB1Ymxp
YyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3Ig
bGVuZ3RoLgorICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIAorICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKKyAgICAgICAgfHwgKGkgPj0g
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JW
ZWN0b3IoaSwgY291bnRFbGVtZW50c0luQ29udGlndW91cyhtX2J1dHRlcmZseSkpKSkgeworICAg
ICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICBjb252ZXJ0Q29udGln
dW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChn
bG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
ZmFsc2UpOworICAgICAgICBBU1NFUlQoaSA+PSBhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpOwor
ICAgICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEp
OworCisgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
K30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7CiAgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTM0OCwxNyArMTU1MywyOSBA
QCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSB7Ci0gICAg
ICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBl
eGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csCisgICAgICAgICAgICAgICAgZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICghaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKLSAg
ICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IDAsIDApKTsKKyAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgeworICAg
ICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisg
ICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKSB7CisgICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRp
Z3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCi0gICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVj
dG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSAxOworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsK
KyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0
cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkBAIC0xMzg0LDggKzE2MDEsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZl
Y3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUsIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGlu
ZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGhh
c0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQo
YXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKIApAQCAtMTQ2NywxNCArMTY4NiwzMiBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3RvCiAgICAgCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewotICAgICAgICBp
ZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwotICAgICAgICBpZiAo
IWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKLSAgICAgICAgCi0gICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsg
MSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNw
YXJzZSgpIHx8IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhl
YywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCisgICAgICAgICAgICAgICAgZW5zdXJlQXJy
YXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEp
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7
CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICB9
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgeworICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY3JlYXRlSW5pdGlhbENv
bnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChS
ZWFkT25seSB8IEFjY2Vzc29yKSkgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3Rv
cmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ5OSwxMiArMTczNiw3IEBAIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICBlbHNlIGlmICghY3VycmVu
dFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJl
ZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0
aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5l
d0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3Jl
YXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAv
LyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBp
bmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAo
ZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSB0aW1lc1RocmVl
UGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQo
aW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAtMTUyNCw5ICsxNzU2LDEwIEBA
IEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICAgICAgdmVjdG9y
TGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
Q1JBU0goKTsKQEAgLTE1MzUsNiArMTc2OCwxNiBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpT
T2JqZWN0OjpnZXROZXdWCiAgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7CiB9CiAKK3Vuc2lnbmVkIEpTT2JqZWN0Ojpjb3Vu
dEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAgIHVuc2ln
bmVkIG51bVZhbHVlcyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBpZiAoYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0pCisgICAgICAgICAgICBudW1WYWx1ZXMrKzsKKyAgICB9CisgICAgcmV0dXJuIG51bVZhbHVl
czsKK30KKwogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlv
biBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBi
ZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAK
QEAgLTE1NDMsNiArMTc4NiwxMCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0
aChKU0dsCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgIAorICAgIGlmIChuZXdMZW5ndGggPj0gTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWAorICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihuZXdMZW5n
dGgsIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKQEAgLTE1NzQs
NiArMTgyMSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5n
dGhTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChoYXNDb250aWd1
b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChsZW5ndGggPiBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rv
ckxlbmd0aCA9IHN0ZDo6bWluKAorICAgICAgICBsZW5ndGggPDwgMSwKKyAgICAgICAgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCk7CisgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jv
d0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAgICAgICAgbmV3VmVjdG9yTGVu
Z3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworfQorCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93
T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAt
MTYwMiw2ICsxODY1LDE3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAg
ICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLmdldCgpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUsIDApOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3Jh
Z2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTE2MSw4ICsxNjIsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjA3LDYg
KzIwOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkg
PCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE4LDYgKzIyMiw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0
KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjMxLDEyICsyMzcsMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgorICAgICAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgaWYgKGkgPCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2KQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHY7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChp
IDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjY3LDkgKzI3NCwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpCkBAIC0yODUsOCArMjkzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTYsMTUgKzMwNSwy
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAg
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYp
OworICAgICAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7
CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAg
ICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFn
ZS0+bGVuZ3RoKCkpOwpAQCAtMzMxLDYgKzM1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewog
ICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV9zcGFyc2VNYXA7CkBAIC0zNDQsNiArMzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5p
blNwYXJzZU1vZGUoKTsKQEAgLTU0MSw2ICs1NjYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIC8vIGZvby0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZSguLi4pOwogICAg
ICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUo
RXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIDAg
aWYgY29udGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UK
KyAgICAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBvciBiZWNhdXNlIHdlJ3JlIGhh
dmluZyBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVuc3VyZUNv
bnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyhnbG9iYWxE
YXRhKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9i
amVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQogICAgICAg
ICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBo
YXZlIHJlcXVpcmVkIHRoZQogICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhh
dmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKQEAgLTU1Myw2ICs1ODgsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdl
U2xvdyhnbG9iYWxEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgQnV0dGVyZmx5
KiBlbnN1cmVJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlSW5kZXhlZFN0b3JhZ2VT
bG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQpAQCAtNjE1LDExICs2NTgsMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAg
ICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMo
SlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3BlcnR5
VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbik7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKIAogICAg
ICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5l
d0xlbmd0aCk7CkBAIC02MzAsNiArNjc4LDU2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpTR2xvYmFsRGF0YSYpOwogICAg
ICAgICAKICAgICAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCBzZXRJbmRleFF1aWNrbHkg
dG8gc3VjY2VlZCBhbmQgeW91J3JlIHN1cmUgdGhhdAorICAgICAgICAvLyB0aGUgYXJyYXkgaXMg
Y29udGlndW91cy4KKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVCho
YXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKQor
ICAgICAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KGdsb2JhbERhdGEsIGxl
bmd0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
b3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVyZmx5KTsKKyAgICAgICAg
CisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogaW5kZXhpbmdEYXRhKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0
ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB1bnNpZ25lZCByZWxl
dmFudExlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CkBAIC02NjQsNyArNzYyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBlbnN1cmVD
b250aWd1b3VzTGVuZ3RoU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGVuc3VyZUNv
bnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3Vy
ZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEJ1dHRlcmZseSogZW5z
dXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVj
CiAKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHNpemUgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2
OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykK
QEAgLTIxMyw5ICsyMTMsMTIgQEAgY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKSBjb25zdAog
ICAgICAgICB1LmFzRG91YmxlID0gYXNEb3VibGUoKTsKICAgICAgICAgc25wcmludGYoZGVzY3Jp
cHRpb24sIHNpemUsICJEb3VibGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwg
dS5hc1R3b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKGlz
Q2VsbCgpKQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwIiwg
YXNDZWxsKCkpOwotICAgIGVsc2UgaWYgKGlzVHJ1ZSgpKQorICAgIH0gZWxzZSBpZiAoaXNDZWxs
KCkpIHsKKyAgICAgICAgc25wcmludGYoCisgICAgICAgICAgICBkZXNjcmlwdGlvbiwgc2l6ZSwg
IkNlbGw6ICVwICglcDogJXMsICVzKSIsCisgICAgICAgICAgICBhc0NlbGwoKSwgYXNDZWxsKCkt
PnN0cnVjdHVyZSgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5jbGFzc05h
bWUsCisgICAgICAgICAgICBpbmRleGluZ1R5cGVUb1N0cmluZyhhc0NlbGwoKS0+c3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOworICAgIH0gZWxzZSBpZiAoaXNU
cnVlKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiVHJ1ZSIpOwogICAg
IGVsc2UgaWYgKGlzRmFsc2UoKSkKICAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUs
ICJGYWxzZSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAJKHJldmlzaW9uIDEzMDMxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKICNpZiAhRU5BQkxFKFlBUlJfSklUKQogICAgIHVzZVJlZ0V4cEpJVCgp
ID0gZmFsc2U7CiAjZW5kaWYKLQorICAgIAogICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBu
ZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CiAgICAgQVNTRVJUKHRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcCgpKTsKICAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldh
cm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTMwMzE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIzLDExICszMjMsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5N
YXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3Vn
Z2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wgU3RydWN0dXJlOjpuZWVkc1Ns
b3dQdXRJbmRleGluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGll
cyhpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGlmIChhbnlPYmplY3RJbkNoYWluTWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRp
bWUoKSkKKyAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nl
c3NlcygpCisgICAgICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCk7Cit9
CisKK05vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFn
ZVRyYW5zaXRpb24oKSBjb25zdAoreworICAgIGlmIChuZWVkc1Nsb3dQdXRJbmRleGluZygpKQog
ICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOwogICAgIAogICAgIHJl
dHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBhbnlPYmplY3RJbkNo
YWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAg
ICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29u
c3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdDsKKyAgICAgICAg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBj
b25zdDsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEds
b2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9i
amVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMzAzMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJ
bnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUg
dHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KIC8vIElmIGFueSBvZiB0aGVz
ZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCiBl
bnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVDb250aWd1b3VzLAogICAg
IEFsbG9jYXRlQXJyYXlTdG9yYWdlLAogICAgIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSwK
ICAgICBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC01NywxMiArNTgsMTYgQEAgaW5s
aW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eQogaW5saW5lIEluZGV4aW5nVHlw
ZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3BlcnR5VHJhbnNp
dGlvbiB0cmFuc2l0aW9uKQogewogICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2Ug
QWxsb2NhdGVDb250aWd1b3VzOgorICAgICAgICBBU1NFUlQoIShvbGRUeXBlICYgKEhhc0FycmF5
U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKSk7CisgICAgICAgIHJldHVybiBvbGRU
eXBlIHwgSGFzQ29udGlndW91czsKICAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgotICAg
ICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIChv
bGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzQXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWxs
b2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc1Ns
b3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250aWd1
b3VzKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2FzZSBTd2l0Y2hUb1Nsb3dQdXRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVChvbGRUeXBlICYgSGFzQXJyYXlTdG9yYWdlKTsK
KyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIEhhc0NvbnRpZ3VvdXMpKTsKICAgICAgICAgcmV0
dXJuIChvbGRUeXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdl
OwogICAgIGNhc2UgQWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIG9sZFR5cGUg
fCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRy
YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9u
IDEzMDMxNSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzA0LDYgKzMwNCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBoYXNU
d29PCiAgICAgcmV0dXJuICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZhbHVlKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28oVCB2
YWx1ZSkKK3sKKyAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgIC8vICAg
KHZhbHVlICogMyArIDEpIC8gMjsKKyAgICAvLyBvcjoKKyAgICAvLyAgICh1bnNpZ25lZCljZWls
KHZhbHVlICogMS41KSk7CisgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5h
bCBvdmVyZmxvdy4KKyAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAodmFsdWUgJiAx
KTsKK30KKwogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElMRVIoUlZDVCkgJiYgIU9TKFNP
TEFSSVMpCiB1c2luZyBzdGQ6OmlzZmluaXRlOwogI2lmICFDT01QSUxFUl9RVUlSSyhHQ0MxMV9H
TE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>
<flag name="commit-queue"
          id="180335"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167647</attachid>
            <date>2012-10-08 16:51:28 -0700</date>
            <delta_ts>2012-10-09 14:08:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>holycontiguous_14.patch</filename>
            <type>text/plain</type>
            <size>319636</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOCBA
QAorMjAxMi0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGludHJvZHVjZXMgYSBuZXcga2luZCBvZiBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgY2FsbGVkIENvbnRpZ3VvdXMsCisgICAgICAgIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5n
IHByb3BlcnRpZXM6CisgICAgICAgIAorICAgICAgICAtIE5vIGhlYWRlciBiaXRzIGJleW9uZCBJ
bmRleGVkSGVhZGVyLiBUaGlzIHJlc3VsdHMgaW4gYSAxNiBieXRlIHJlZHVjdGlvbgorICAgICAg
ICAgIGluIG1lbW9yeSB1c2FnZSBwZXIgYXJyYXkgdmVyc3VzIGFuIEFycmF5U3RvcmFnZSBhcnJh
eS4gSXQgYWxzbyBtZWFucworICAgICAgICAgIHRoYXQgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBm
b3IgYW4gZW1wdHkgYXJyYXkgaXMgbm93IGp1c3QgMyAqIDggb24gYm90aAorICAgICAgICAgIDMy
LWJpdCBhbmQgNjQtYml0LiBPZiB0aGF0LCBvbmx5IDggYnl0ZXMgYXJlIGFycmF5LXNwZWNpZmlj
OyB0aGUgcmVzdCBpcworICAgICAgICAgIG91ciBzdGFuZGFyZCBvYmplY3QgaGVhZGVyIG92ZXJo
ZWFkLgorICAgICAgICAKKyAgICAgICAgLSBObyBuZWVkIGZvciBob2xlIGNoZWNrcyBvbiBzdG9y
ZS4gVGhpcyByZXN1bHRzIGluIGEgfjQlIHNwZWVkLXVwIG9uCisgICAgICAgICAgS3Jha2VuIGFu
ZCBhIH4xJSBzcGVlZC11cCBvbiBWOHY3LgorICAgICAgICAKKyAgICAgICAgLSBwdWJsaWNMZW5n
dGggPD0gdmVjdG9yTGVuZ3RoLiBUaGlzIG1lYW5zIHRoYXQgZG9pbmcgbmV3IEFycmF5KGJsYWgp
CisgICAgICAgICAgaW1tZWRpYXRlbHkgYWxsb2NhdGVzIHJvb20gZm9yIGJsYWggZWxlbWVudHMu
CisgICAgICAgIAorICAgICAgICAtIE5vIHNwYXJzZSBtYXAgb3IgaW5kZXggYmlhcy4KKyAgICAg
ICAgCisgICAgICAgIElmIHlvdSBldmVyIGRvIHRoaW5ncyB0byBhbiBhcnJheSB0aGF0IHdvdWxk
IHJlcXVpcmUgcHVibGljTGVuZ3RoID4KKyAgICAgICAgdmVjdG9yTGVuZ3RoLCBhIHNwYXJzZSBt
YXAsIG9yIGluZGV4IGJpYXMsIHRoZW4gd2Ugc3dpdGNoIHRvIEFycmF5U3RvcmFnZQorICAgICAg
ICBtb2RlLiBUaGlzIGhhcHBlbnMgc2VlbXMgdG8gbmV2ZXIgaGFwcGVuIGluIGFueSBiZW5jaG1h
cmsgd2UgdHJhY2ssIGFuZAorICAgICAgICBpcyB1bmxpa2VseSB0byBoYXBwZW4gdmVyeSBmcmVx
dWVudGx5IG9uIGFueSB3ZWJzaXRlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBhdGNoYWJsZUJyYW5jaFRlc3QzMik6
CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTQzo6aXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkJ5VmFsSW5mbzo6
QnlWYWxJbmZvKToKKyAgICAgICAgKEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OmdldEJ5VmFs
SW5mb0J5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeVZhbEluZm8p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE51bWJlck9mQnlWYWxJbmZvcyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpieVZhbEluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5o
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6
Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToK
KyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNK
U0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luQm91bmRzQWNjZXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjptYXlTdG9yZVRvVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWF5U3RvcmVU
b0hvbGUpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc1BvbHltb3JwaGljKToKKyAgICAgICAg
KEpTQzo6REZHOjpwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyk6CisgICAgICAgIChKU0M6
OkRGRzo6cG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6REZHOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNFZmZlY3RmdWwpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6Cisg
ICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hl
R2V0QnlJRCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAg
IChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnB1
dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKToKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0
QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlT
dG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
cmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKFNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpTYW1wbGlu
Z1Njb3BlOjpTYW1wbGluZ1Njb3BlKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdTY29wZTo6flNh
bXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpCeVZhbENvbXBpbGF0aW9u
SW5mbzo6QnlWYWxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoQnlWYWxDb21waWxhdGlvbklu
Zm8pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEFsbG9jYXRlSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsZVN0
b3JlVG9Ib2xlU3BlY2lhbENhc2UpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm9maWxlU2F3KToKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19h
cnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6
CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6cHV0QnlWYWwpOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaDoKKyAgICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rv
cik6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OnVuc2hpZnQpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvRnVuY1VuU2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5
Lmg6CisgICAgICAgIChCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21Q
b2ludGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5OjpwdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2V0UHVibGljTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OmNvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21D
b250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaDoK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6QnV0dGVy
Zmx5OjpzaGlmdCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdUeXBlVG9TdHJpbmcpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpoYXNDb250aWd1b3VzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojpzb3J0TnVtZXJpY1ZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1l
cmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydENvbXBhY3RlZFZlY3Rvcik6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0VmVj
dG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb21w
YWN0Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnNoaWZ0Q291bnRGb3JTcGxpY2UpOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNoaWZ0Q291bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291
bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNwbGlj
ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmlzTGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpjcmVhdGVDb250aWd1
b3VzQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoK
KyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OmFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjphZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RFbXB0eUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNv
bnRpZ3VvdXNTbG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFn
ZVNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpzd2l0
Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJv
dG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb3VudEVsZW1l
bnRzSW5Db250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dHJ5R2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHlG
b3JQdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpoYXNTcGFyc2VNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFy
c2VJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJ
bmRleGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nRGF0YSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpyZWxldmFudExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9KU1Zh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZGVzY3JpcHRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0M6Om5ld0luZGV4
aW5nVHlwZSk6CisKIDIwMTItMTAtMDggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWZ0ZXIgcjEzMDM0NCwgT3BhcXVlSlNTdHJpbmcoKSBjcmVhdGVzIGFu
IGVtcHR5IHN0cmluZyB3aGljaCBzaG91bGQgYmUgYSBudWxsIHN0cmluZwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkx
LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKICAgICBydW50aW1lL0lk
ZW50aWZpZXIuY3BwCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAK
ICAgICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
NyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZv
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25z
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggXApAQCAtNTIx
LDYgKzUyMiw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nVHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nVHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtMjAwLDYgKzIwMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvR2V0dGVy
U2V0dGVyLmNwcCBcCiAgICAgcnVudGltZS9PcHRpb25zLmNwcCBcCiAgICAgcnVudGltZS9JZGVu
dGlmaWVyLmNwcCBcCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwIFwKICAgICBydW50aW1l
L0luaXRpYWxpemVUaHJlYWRpbmcuY3BwIFwKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
Y3BwIFwKICAgICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlz
aW9uIDEzMDY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC01MjIsNiArNTIyLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5
cGUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNTc0LDYgKzE1NzgsMTAgQEAKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQnlW
YWxJbmZvLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGJ5dGVjb2RlXENhbGxMaW5rSW5mby5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBACiAJCTBGMENENEMyMTVGMUE2MDcwMDMy
RjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJ
bmRleE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjBDRDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1
RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZD
NDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0
IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEz
RTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYx
NUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8q
IENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE2NSw2ICsxNjYsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJG
MDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIw
MDA0NzJBOSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
MDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAv
KiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0
QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBK
U1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVj
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3
RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAg
LTg1MCw2ICs4NTIsNyBAQAogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0
SW5kZXhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdElu
ZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1
MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERF
NyAvKiBJbmRleGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5kZXhpbmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYx
NUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDAsNiArOTQzLDcgQEAKIAkJMEY3
NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIxMTQsNyArMjExOCw2IEBACiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3
IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYw
RjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4
NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAy
MUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQy
MDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJQkMwMkU5QjgwRTE4NDU0
NTAwMEY5Mjk3IC8qIEdldHRlclNldHRlci5jcHAgKi8sCiAJCQkJQkMzMzdCREUwRTFBRjBCODAw
NzY5MThBIC8qIEdldHRlclNldHRlci5oICovLApAQCAtMjEyMiw2ICsyMTI1LDcgQEAKIAkJCQk5
MzNBMzQ5QTAzOEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovLAogCQkJCTBGQjdGMzhE
MTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAogCQkJCTBGQjdGMzhFMTVF
RDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkw
RjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3
RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJRTE3ODYzNkMw
RDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2
MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCkBAIC0yMjgw
LDYgKzIyODQsNyBAQAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAu
aCAqLywKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAog
CQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKKwkJCQlD
MkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0y
NDg2LDYgKzI0OTEsNyBAQAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVBy
b2ZpbGUuY3BwICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuaCAqLywKIAkJCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50
aW9ucy5oICovLAorCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAq
LywKIAkJCQkwRjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywK
IAkJCQkwRjBCODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJ
MEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTI5
NjYsNiArMjk3Miw3IEBACiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFy
cmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFD
MCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYx
MzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0Qy
MTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFC
MjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKQEAgLTM1NzIsNiArMzU3OSw3IEBACiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8q
IExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZE
QTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTNFMDRFMTYx
NjRBMUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1
NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyNEQzMUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwNjg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2NCw3ICs1NjQsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2p1bXBzLmFwcGVuZChqdW1wKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
dm9pZCBhcHBlbmQoSnVtcExpc3QmIG90aGVyKQorICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBK
dW1wTGlzdCYgb3RoZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fanVtcHMuYXBwZW5kKG90
aGVyLm1fanVtcHMuYmVnaW4oKSwgb3RoZXIubV9qdW1wcy5zaXplKCkpOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksMTEgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAoanVtcCgpKTsKICAgICB9
CisKKyAgICBQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaFRlc3QzMihSZXN1bHRDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMy
KC0xKSkKKyAgICB7CisgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGJyYW5jaFRlc3QzMihj
b25kLCByZWcsIG1hc2spKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQganVtcChMYWJlbCB0
YXJnZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5m
by5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnlWYWxJbmZvX2gKKyNkZWZpbmUgQnlW
YWxJbmZvX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkK
KworI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgor
I2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEpJ
VEFycmF5TW9kZSB7IEpJVENvbnRpZ3VvdXMsIEpJVEFycmF5U3RvcmFnZSB9OworCitpbmxpbmUg
Ym9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUp
Cit7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9k
ZUZvckluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CisgICAgY2FzZSBBUlJBWV9XSVRIX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3Jh
Z2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIEpJVENv
bnRpZ3VvdXM7CisgICAgfQorfQorCitzdHJ1Y3QgQnlWYWxJbmZvIHsKKyAgICBCeVZhbEluZm8o
KSB7IH0KKyAgICAKKyAgICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxv
Y2F0aW9uSnVtcCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgaW50MTZfdCBi
YWRUeXBlSnVtcFRvRG9uZSwgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAgICAg
ICAgOiBieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgYmFkVHlwZUp1bXAo
YmFkVHlwZUp1bXApCisgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAgICAgLCBi
YWRUeXBlSnVtcFRvRG9uZShiYWRUeXBlSnVtcFRvRG9uZSkKKyAgICAgICAgLCByZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aChyZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRU
eXBlSnVtcDsKKyAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOyAvLyBUaGUgYXJyYXkgbW9kZSB0
aGF0IHdhcyBiYWtlZCBpbnRvIHRoZSBpbmxpbmUgSklUIGNvZGUuCisgICAgaW50MTZfdCBiYWRU
eXBlSnVtcFRvRG9uZTsKKyAgICBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoOworICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Cit9OworCitpbmxpbmUgdW5zaWdu
ZWQgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleChCeVZhbEluZm8qIGluZm8pCit7CisgICAgcmV0
dXJuIGluZm8tPmJ5dGVjb2RlSW5kZXg7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIEJ5VmFsSW5mb19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEzMDY4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBDb2RlQmxvY2tfaAogCiAjaW5jbHVkZSAi
QXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNh
bGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmgiCkBAIC0yMDksNiArMjEwLDExIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0U3R1
YihTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgICAgICAKKyAgICAgICAgQnlWYWxJbmZvJiBnZXRC
eVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5zaWduZWQsIGdldEJ5VmFsSW5mb0J5
dGVjb2RlSW5kZXg+KG1fYnlWYWxJbmZvcy5iZWdpbigpLCBtX2J5VmFsSW5mb3Muc2l6ZSgpLCBi
eXRlY29kZUluZGV4KSk7CisgICAgICAgIH0KIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENh
bGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAg
LTYxMCw2ICs2MTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TnVtYmVy
T2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3Mu
Z3JvdyhzaXplKTsgfQogICAgICAgICBzaXplX3QgbnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Mo
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCk7IH0KICAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKGludCBpbmRleCkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmVTdHViSW5mb3NbaW5kZXhdOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNl
dE51bWJlck9mQnlWYWxJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX2J5VmFsSW5mb3MuZ3JvdyhzaXpl
KTsgfQorICAgICAgICBzaXplX3QgbnVtYmVyT2ZCeVZhbEluZm9zKCkgY29uc3QgeyByZXR1cm4g
bV9ieVZhbEluZm9zLnNpemUoKTsgfQorICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyhzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fYnlWYWxJbmZvc1tpbmRleF07IH0KIAogICAgICAgICB2b2lk
IGFkZEdsb2JhbFJlc29sdmVJbmZvKHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbikK
ICAgICAgICAgewpAQCAtMTI4OSw2ICsxMjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoSklUKQogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+IG1fc3Ry
dWN0dXJlU3R1YkluZm9zOworICAgICAgICBWZWN0b3I8QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7
CiAgICAgICAgIFZlY3RvcjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5mb3M7
CiAgICAgICAgIFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAg
VmVjdG9yPE1ldGhvZENhbGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9zOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNp
b24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9v
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21p
Y3MuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5
LDEyICs4NTksMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2Fz
ZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19DT05USUdVT1VTX01PREVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElD
X01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0Nl
bGwpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYg
KzkxMyw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTkxNSw2ICs5MjMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOwogICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkp
IHsKQEAgLTkyNCwxMSArOTMzLDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2Fz
ZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVT
OgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAg
ICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2Ug
U0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEz
ODMsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hl
Y2tBcnJheSBmb3IgR2V0QXJyYXlMZW5ndGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBm
aWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAog
ICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBi
dXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5
OiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVG
RkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExf
RUZGRUNURlVMX01PREVTOgogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVj
dHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTMwNjg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw4ICszOSwxNCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxl
KiBwCiAgICAgICAgIHJldHVybiBBcnJheTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFw
cm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVy
biBBcnJheTo6QmxhbmtUb0FycmF5U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hl
dGhlciB0byBnbyB0byBzbG93IHB1dCBtb2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vl
c3MuCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0
b3JhZ2U7IC8vIEZJWE1FOiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQg
bW9kZSBvciBub3QuIFdlJ3JlIGd1ZXNzaW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4K
ICAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5
OjpDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFy
cmF5OjpDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNB
cnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUg
PyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0
b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhD
b250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAg
cmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9m
Qm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91
cyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAg
ICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDog
KHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDog
QXJyYXk6OkFycmF5U3RvcmFnZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
U2xvd1B1dEFycmF5U3RvcmFnZSk6CkBAIC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9t
T2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Up
OgorICAgICAgICByZXR1cm4gQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBj
YXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRp
Z3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhD
b250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzT3JBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwg
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9u
ID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2Vz
KCkpCisgICAgICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAg
ICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJh
eSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6
V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAg
ICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAg
ICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25B
cnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAg
aWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9y
YWdlOwpAQCAtMTQ0LDYgKzE2NCwyMiBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFj
dFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJp
bmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBB
cnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRp
Z3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
Q29udGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1
b3VzKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29s
IG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
KEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAg
JiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5
cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQ
T0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CkBAIC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1v
ZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwog
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3Vz
VG9UYWlsIjsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiAiQ29udGlndW91c091dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAi
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3Vz
OgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1
cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAi
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNo
YXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJs
eUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2li
bHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6Qmxh
bmtUb0NvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAg
IGNhc2UgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtU
b0FycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNh
c2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVy
biAiQmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5
U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9y
YWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1
bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiAr
NTQsMTUgQEAgZW51bSBNb2RlIHsKICAgICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2Yg
Y29udmVudGlvbmFsIGluZGV4ZWQgc3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUt
ZWZmZWN0aW5nLgorICAgIENvbnRpZ3VvdXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBD
b250aWd1b3VzT3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJh
eVdpdGhDb250aWd1b3VzVG9UYWlsLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
cywKKyAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9m
Qm91bmRzLAogICAgIEFycmF5U3RvcmFnZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAg
U2xvd1B1dEFycmF5U3RvcmFnZSwKQEAgLTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAg
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBN
b2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBz
aWRlLWVmZmVjdGluZy4KKyAgICBCbGFua1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlT
dG9yYWdlLAogICAgIEJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250
aWd1b3VzT3JBcnJheVN0b3JhZ2UsCisgICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBw
b2x5bW9ycGhpYyBhcnJheSBzdG9yYWdlLiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAv
LyBhbnkgY2hlY2tpbmcgb3Igc3RvcmFnZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9y
YWdlLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMs
CiAgICAgSW50OEFycmF5LApAQCAtODksNiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZl
IHRoZSB3b3JkICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZv
ciBub24tc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9V
U19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
CisjZGVmaW5lIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAg
ICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9m
Qm91bmRzCisjZGVmaW5lIEFMTF9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisj
ZGVmaW5lIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBBcnJheTo6Q29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3Vz
CisjZGVmaW5lIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAg
ICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzVG9UYWlsCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kczogICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzT3V0T2ZCb3VuZHMKICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0Vf
TU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4
IEBAIGVudW0gTW9kZSB7CiAjZGVmaW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzog
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9S
QUdFX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xF
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUg
T1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAg
IFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOiAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kcwogCiAvLyBOZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBj
aGVja3MuCi0jZGVmaW5lIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBc
Ci0gICAgQXJyYXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVm
aW5lIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJB
WV9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJy
YXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6
QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgIFwKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdF
X01PREVTICAgICAgICAgICAgICAgICAgXAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlf
U1RPUkFHRV9NT0RFUwotI2RlZmluZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9N
T0RFUyAgXAorI2RlZmluZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAg
ICAgICAgICAgICBcCiAgICAgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVm
aW5lIFBPTFlNT1JQSElDX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBBcnJheTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExf
RUZGRUNURlVMX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxM
X0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgUE9MWU1PUlBISUNfRUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhl
bHBlcnMgZm9yIHBvbHltb3JwaGljIGFycmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJ
Q19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNv
bnRpZ3VvdXNPckFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisj
ZGVmaW5lIEFMTF9QT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBQT0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9i
c2VydmVkKEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBA
IC0xNDUsOCArMjAzLDEwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7
CiBpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7
CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVT
OgogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgor
ICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUg
Ym9vbCBtb2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0Fy
cmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lU
SF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNPckFycmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJ
c0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2Fz
ZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJ
TF9NT0RFUzoKKyAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNl
IElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBkZWZhdWx0OgpAQCAtMTg0LDE4ICsyNDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNj
ZXNzKEFycmF5OjpNb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwo
QXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAg
Y2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NP
TlRJR1VPVVNfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6
CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBi
b29sIG1heVN0b3JlVG9Ib2xlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2gg
KGFycmF5TW9kZSkgewogICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAg
IGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19Q
VVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgbW9kZUlzUG9seW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIH0KIAoraW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQ
b2x5bW9ycGhpYyhhcnJheU1vZGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJv
b2wgcG9seW1vcnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5
TW9kZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdl
KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAt
MjA0LDYgKzMwNiw3IEBAIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIK
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTI0OSw3ICszNTIsMTEgQEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFy
cmF5OjpNbwogICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgogICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09O
VElHVU9VU19NT0RFUzoKICAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgor
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
T3JBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzT3JBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2Rl
U3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1
cmVDaGVjayhBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9NT0RFUzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDoKICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKQEAgLTI3Myw3ICszODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21T
dHJ1Y3R1cmVDaGVjayhBCiBpbmxpbmUgYm9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2Rl
KQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDEzMDY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc0LDYgKzE1NzQsOCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUlu
ZGV4IGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0x
NTk3LDYgKzE1OTksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9v
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChB
cnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3
LDYgKzE3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFs
SXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgogICAgICAgICAgICAgICAgIGNhc2UgQVJSQVlf
U1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2Rl
OwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zNTksOSArMzYwLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAvLyBmb3IgYSBzdHJ1Y3R1cmUgY2hhbmdlIG9yIGEgcHV0IHRvIHBy
b3BlcnR5IHN0b3JhZ2UgdG8gYWZmZWN0CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFs
LgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVB1c2g6Ci0g
ICAgICAgICAgICAgICAgLy8gQSBwdXNoIGNhbm5vdCBhZmZlY3QgcHJldmlvdXNseSBleGlzdGlu
ZyBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQo
aW5kZXgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMTIyMiw5ICsx
MjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAgICAg
RWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAgICAg
RWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAg
aWYgKGlzQWN0aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGQxXS5w
cmVkaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtjaGlsZDJdLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYmICFtX2dyYXBoW2NoaWxkMV0uc2hv
dWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdl
KG5vZGUuYXJyYXlNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5pbmRleCgpLCBjaGlsZDIuaW5kZXgo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgbm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5v
ZGVQdHItPmNvZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCksIGxlbmd0aE5lZWRz
U3RvcmFnZSwgbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBOb2RlSW5k
ZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBu
b2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9k
ZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05v
ZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzNywxNyArMTM3
LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5
T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJh
dGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAg
ICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7CisgICAgICAg
ICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIDIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hp
bGQxKCksIDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgp
LCBub2RlLmNoaWxkMigpLCAxKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgVmFsdWVUb0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CisgICAgICAgICAgICBibGVz
c0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAg
ICAgIApAQCAtMzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgYm9vbCAo
KnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgTm9kZUluZGV4
IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5DU0VTdG9yYWdl
LCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtb2Rl
SXNTcGVjaWZpYyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgucmVmKGFy
cmF5KTsKIAogICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJyYXlNb2RlKSkgewotICAgICAgICAg
ICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSks
IGFycmF5KTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBOb05vZGUpOworICAgICAgICAg
ICAgbV9ncmFwaC5yZWYoaW5kZXgpOworICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlm
eSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBpbmRleCk7CiAgICAgICAg
ICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNlZCBhcyBhIGJ1dHRl
cmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdpY2UgYmVjYXVzZSBp
dCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlpZnlJbmRleCA9
IG1fZ3JhcGguc2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2lu
LCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIHVuc2lnbmVkIHN0b3Jh
Z2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdl
IGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAgICAgewogICAgICAgICBpZiAobV9n
cmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHItPmFycmF5TW9kZSgpID09
IEFycmF5OjpGb3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUo
KSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAgICAgICAgIE5vZGUg
Zm9yY2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdpbik7CiAgICAgICAgICAg
ICBmb3JjZUV4aXQucmVmKCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggZm9yY2VFeGl0SW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGZvcmNlRXhpdEluZGV4
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KCFtb2RlSXNTcGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUoKSkpCisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpVbnByb2Zp
bGVkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5
KG5vZGVQdHItPmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCkp
OwotICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICBk
ZWZhdWx0OiB7CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9k
ZVB0ci0+YXJyYXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmlnaW4sIGJhc2UuaW5kZXgoKSwgaW5k
ZXguaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dy
YXBoLmNoaWxkKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRn
ZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9CiAgICAgfQogICAg
IAogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDEyIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAg
ICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElH
VU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9X
X1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9E
RVM6CisgICAgICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBu
b2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Niw5ICs1NTYs
NyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAo
aW5kZXggPj0gMCkgewotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRl
eCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXkt
PmNhblNldEluZGV4UXVpY2tseShpbmRleCkpOwotICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUo
KS0+cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpLCB0cnVlKTsKKyAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaW5k
ZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKQEAgLTU3Myw5ICs1NzEsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9i
YWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2
ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4UXVpY2tseShpbmRleCkp
OwotICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChhcnJheSwgZXhlYywg
aW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIGFy
cmF5LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNjAxLDYg
KzU5NywxNiBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKIH0KICAgICAgICAgCitF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQoreworICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICBhcnJheS0+YnV0dGVy
Zmx5KCktPnNldFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVyZmx5KCktPnB1YmxpY0xlbmd0aCgp
ICsgMSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMp
KTsKK30KKyAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
Z0V4cEV4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQp
CiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpA
QCAtMTMwOSw2ICsxMzE1LDE0IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZUIKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAor
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
Z2xvYmFsRGF0YSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KG9iamVjdC0+ZW5zdXJlQ29udGlndW91cyhnbG9iYWxEYXRhKSk7Cit9CisKIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7CkBAIC0xMzE3LDYgKzEzMzEsMTYgQEAgY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25FbnN1cmVBcnJheQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihvYmplY3QtPmVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CiB9CiAKK2NoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCkKK3sKKyAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisKKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmpl
Y3QtPmVuc3VyZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91YmxlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAg
ICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQq
LCBzaXplX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdP
cGVyYXRpb25fRVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9E
RkdPcGVyYXRpb25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RaKShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiAoKkpfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0
YXRlKiwgaW50MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0xMTAsNiArMTEw
LDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwg
SlNPYmplY3QqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9u
X0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVBT
KShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElP
TiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBAIC0xNDgsNiAr
MTQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
SlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3Ro
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2Us
IElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUs
IEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTE5Miw3ICsxOTQs
OSBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNp
emVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqLCBKU09i
amVjdCopOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5z
dXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5k
ZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0
aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0
aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNw
cAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRpYyBib29sIHRy
eUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsgCiAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0Nv
bnRpZ3VvdXMgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBzdHViSml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDEzMDY4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNDUsNiArMjA0NSwxMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJS
ZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRU
YWdSZWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OworICAgIAorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcpOworICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZ1JlZywgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgCisgICAgcmV0dXJuIHNs
b3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5
UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFRhZ1JlZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWRSZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcpOworICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9s
ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnUmVnLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJv
dW5kcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4gc2xvd0Nhc2Vz
OworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
b250aWd1b3VzUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcs
IEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxv
YWRSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsK
KyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAg
IGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJbkJvdW5k
c0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgIG1f
aml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICBtX2ppdC5z
dWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKworICAgICAgICBpbkJvdW5kcy5s
aW5rKCZtX2ppdCk7CisgICAgfQorCisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSk7CisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAK
KyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdl
UHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcpCit7
CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBp
ZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsK
KyAgICBlbHNlCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwor
CisgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVu
dCBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2Rl
KSkgeworICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0
aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxsIGltbWVkaWF0
ZWx5IGNvdW50IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0Cisg
ICAgICAgIC8vIHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOworICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUg
dGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3Zl
IGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFw
cGVucyBpZiB3ZSdyZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4K
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rv
ck9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3
cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIH0KKyAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAgICB9
CisgICAgCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpKTsKKyAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgIAor
ICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKQEAgLTI1NjUsNiAr
MjY3Miw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0
T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGls
ZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0K
KyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VSZWcs
IHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcp
OworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3Vs
dFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQ
YXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hp
bGQzKCkpOwpAQCAtMjU4Nyw2ICsyNzQzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19Q
VVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yNjI0LDYgKzI3ODEsNTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX1BP
TFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2Fk
LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVD
YXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRUYWdSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCByZXN1bHRUYWdSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGlj
SW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2Vz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJv
dWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRUYWdS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQ
YXlsb2FkUmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJ
bmNsdWRlc0FycmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNl
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhy
b3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0VGFn
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFs
KG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRUYWdSZWcsIHJl
c3VsdFBheWxvYWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxs
VGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50
LAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTI3MTQsNiArMjkyMSw1NSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9D
T05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBjaGlsZDMpOworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1ZS50YWdH
UFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcgPSB2YWx1ZS5wYXlsb2Fk
R1BSKCk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdS
ZWcsIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIGNoaWxkNCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVD
b250aWd1b3VzUHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHBy
b3BlcnR5UmVnLCBzdG9yYWdlUmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKTsKKwor
ICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJl
eW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1
bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgog
ICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKQEAgLTI3NDMsNjAgKzI5
OTksNzkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAg
ICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhub2RlLmFycmF5TW9kZSgpKSkKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IGJleW9uZEFycmF5Qm91bmRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sg
aWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0lu
VmVjdG9yLgotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNIb2xlVmFsdWU7Ci0g
ICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQs
IHRoZW4gdGhlIGJhc2VsaW5lIEpJVAotICAgICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRl
bHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKLSAg
ICAgICAgICAgICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVl
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3Mo
YXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3Ry
YW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBp
bnZlcnQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mg
c2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQotICAg
ICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAgICAgICAg
ICAgICAgICAgICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdo
dCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0aERvZXNOb3RO
ZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNv
bXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgYmFz
ZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRS
ZWcpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNl
KCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7
Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWVQYXlsb2FkUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNz
KGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlC
b3VuZHMpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAgICAgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBOb1Jl
c3VsdCwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcp
KTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7
CisgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnID0gdmFsdWUucGF5bG9hZEdQUigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c3RvcmFnZSh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2Fz
ZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQu
bG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3Jw
aGljSW5jbHVkZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNh
c2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3Vn
aC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxU
aHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdl
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChub2RlLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJl
ZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNB
cnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFs
bFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0KCkpOwor
ICAgICAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoZmFsbFRocm91Z2gpOworCisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAg
ICAgICAgcHJvcGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKworICAgICAg
ICAgICAgLy8gRklYTUU6IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiBz
dHJpY3QgbW9kZSBzaG91bGQgYmUgbWFkZQorICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIGlu
bGluZSBjYWxsIGZyYW1lLCBub3QgdGhlIG1hY2hpbmUgY29kZSBibG9jay4KKyAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9u
ZEFycmF5Qm91bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5
UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTE5LDI1ICszMTk0LDU1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQ
UiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6
YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwg
c3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZC
b3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJh
eVB1c2gsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIsIHN0b3Jh
Z2VMZW5ndGhHUFIpLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXls
b2FkR1BSLCBiYXNlR1BSKSk7CisgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwg
c3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhh
bmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7
CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQ
YXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1f
aml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0g
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgc3RvcmFn
ZUdQUik7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOwogICAgICAgICAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25BcnJheVB1c2gsIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIp
LCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlv
bkFycmF5UHVzaCwgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiksIHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAg
IGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTI5NDgsNDYgKzMyNTMsODggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVUYWcodGhpcyk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSB2YWx1ZVBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdl
TGVuZ3RoKHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwogICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZVRhZy5ncHIoKTsKICAgICAg
ICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlUGF5bG9hZC5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RvcmFn
ZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5v
ZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91
czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7
CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSwgdmFsdWVUYWdHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdW5kZWZp
bmVkQ2FzZSA9CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCisgICAg
ICAgICAgICAgICAgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9q
aXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZUdQUiwgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLAorICAgICAgICAgICAgICAgIHZh
bHVlUGF5bG9hZEdQUik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCB2YWx1ZVRhZ0dQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
IHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywK
KyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVm
aW5lZCgpLnRhZygpKSwgdmFsdWVUYWdHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxv
YWRHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXls
b2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOworCisgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAg
ICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwotICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CisgICAgICAgICAgICBzZXRVbmRlZmluZWRD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9y
YWdlTGVuZ3RoR1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1ZVRhZ0dQUik7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
dmFsdWVUYWdHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlUGF5bG9hZEdQ
Uik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOwogCi0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSwgdmFsdWVUYWdHUFIpKTsKKyAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyks
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7
CiAKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZh
bHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAgICAgICAg
ICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVUYWdHUFIsCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgp
LnBheWxvYWQoKSksIHZhbHVlUGF5bG9hZEdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVUYWdHUFIs
CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRl
ZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpKTsKICAgICAgICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikp
OworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9u
QXJyYXlQb3AsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2
YWx1ZVBheWxvYWRHUFIpLCBiYXNlR1BSKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTMwNjg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEwOSwxMCArMjEwOSwxMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcs
IEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcp
Cit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIpLCByZXN1bHRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKSk7CisgICAgCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BS
UmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZykKK3sK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdFJlZyk7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdFJlZyk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGhvbGUpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChO
b2RlJiBub2RlLCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcs
IEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2Rl
KSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBz
bG93Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBwcm9wZXJ0eVJlZywgdGVtcFJlZyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0K
KworICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAg
ICAKKyAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9y
YWdlUHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJl
ZyBzdG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFy
cmF5OjpNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5C
b3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxz
ZQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8v
IENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1W
YWx1ZXNJblZlY3Rvci4KKyAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0
LCB0aGVuIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3Vu
dCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAv
LyBwcm9maWxpbmcuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgaWYgKGlzU2xv
d1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Yg
c3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3Vs
ZCBpbnZlcnQKKyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBs
eSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAg
ICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWln
aHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9Cisg
ICAgICAgIG5vdEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIC8vIFN0
b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5v
cCgpOwotCisgICAgCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAg
ICAgICAgaW5pdENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7CkBAIC0yNTk1LDYgKzI2OTYs
NTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAg
ICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExf
RUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAg
IGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0
b3JhZ2VSZWcsIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlf
U1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI2MTUsNiArMjc2MSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwpAQCAtMjYyNywyMSArMjc3NCw2NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5
VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOwor
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0LmdwcigpKTsKLQorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMp
OwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3Vs
dFJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAg
ICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAg
IGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgewor
ICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3Vv
dXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3Vz
R2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJl
ZykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNB
cnJheVN0b3JhZ2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFs
bFRocm91Z2guaXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBk
b25lQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxs
VGhyb3VnaCk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmdw
cigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3MzUsOCAr
MjkyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNo
IChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAg
ICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NP
TlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IGNoaWxkMyk7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpA
QCAtMjc1Niw1OSArMjk0Nyw3NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4K
ICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAg
ICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSk7Ci0gICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdy
ZSB3cml0aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3Iu
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0hvbGVWYWx1ZTsKLSAgICAgICAg
ICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgdW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0
aGUgYmFzZWxpbmUgSklUCi0gICAgICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3Vu
dCB0aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAotICAgICAgICAg
ICAgICAgIC8vIHByb2ZpbGluZy4KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93
UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBz
b3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwg
d2Ugd291bGQgaW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2gu
IEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYg
d2UncmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4K
LSAgICAgICAgICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3
ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
UmVnKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBH
UFJSZWcgdGVtcG9yYXJ5UmVnID0gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3Jh
cnksIG5vZGUpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzID0KKyAgICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAg
ICAgICAgICAgICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFs
dWVSZWcsIHRlbXBvcmFyeVJlZyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAg
ICAgICBwcm9wZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAg
ICAgc3RvcmFnZS51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93Q2Fz
ZXMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVS
ZWcpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7Cisg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworCisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgICAgIHdy
aXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUu
b3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZh
bHVlIHRvIHRoZSBhcnJheS4KKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5n
cHIoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRV
cGRhdGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBu
b3RIb2xlVmFsdWUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAg
IEdQUlJlZyB0ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBv
cmFyeSwgbm9kZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpOworCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAg
ICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAg
ICAgICAgIHN0b3JhZ2UudXNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0
byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KTsKLQotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICAg
ICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLApAQCAtMjgyMCw2ICszMDI4LDYzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNf
TU9ERVM6IHsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5KHRoaXMp
OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHRlbXBvcmFyeVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0
b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModGVtcG9yYXJ5UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcG9y
YXJ5UmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhu
b2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1Nl
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJy
YXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAg
ICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcs
IHN0b3JhZ2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVD
YXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJv
dWdoKTsKKworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVz
ZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0
aGUgZGVjaXNpb24gb2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUgc2hvdWxk
IGJlIG1hZGUKKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSwg
bm90IHRoZSBtYWNoaW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAg
ICAgICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewogICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMjk3MywyNiArMzIzOCw1NCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KTsKKyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
ICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0
b3JhZ2VMZW5ndGhHUFIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7
CisgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAot
ICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJ
bW0zMigweDdmZmZmZmZlKSkpOworICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXph
cnJlIGxlbmd0aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAg
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1t
MzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVl
c0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAg
ICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdl
TGVuZ3RoR1BSLAotICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwo
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gs
IE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQ
UiwgYmFzZUdQUikpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVu
Z3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3Jh
Z2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMzAwMiw0MSArMzI5NSw3NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3Rv
cmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAg
ICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAg
ICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCB1bmRlZmluZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MigKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksCisgICAg
ICAgICAgICAgICAgdmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1
ZUdQUik7CisKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
ICAgIHNsb3dQYXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhp
cywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zl
ckxlbmd0aCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0
aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0
aC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0
aEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZp
bmVkQ2FzZXM7Ci0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNs
b3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSks
IHZhbHVlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgIHNl
dFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICBtX2pp
dC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZh
bHVlc0luVmVjdG9yKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
Uiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN1
YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVz
SW5WZWN0b3IpKSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAg
ICAgICAgICAgIHNsb3dQYXRoTW92ZSgKLSAgICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNl
cywgdGhpcywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAg
ICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlzLAorICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSkpLCB2YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2Us
IHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2
YWx1ZUdQUiwgYmFzZUdQUikpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTMyMTAsOCArMzUzOSwx
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmUoKSwgc2l6ZUdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzZWxlY3RTY3JhdGNoR1BSKHNpemVHUFIp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgYmlnTGVu
Z3RoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkpLCBzdHJ1Y3R1cmVHUFIp
OworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6ZUdQUik7
CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxNSw2ICszMTUsNDEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2Rl
JiBubwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8g
PSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT05fQVJSQVlf
Q09OVElHVU9VU19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3Vv
dXMpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6
IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJhbmNoLiBC
dXQgd2UgY3VycmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBkb2luZyBz
byB3b3VsZCBiZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdpdGggdGhl
IHByZXNlbnQgdGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBhdGguCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7
CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewog
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigK
QEAgLTM1Miw2ICszODcsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2Rl
JiBubwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBt
X2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNh
biBiZSB0dXJuZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBu
byBldmlkZW5jZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2ZpdGFibGUs
IG5vciBkbyBJIGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0CisgICAgICAg
IC8vIGNvdmVyYWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkp
KTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAgIChwb2x5bW9ycGhpY0luY2x1
ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSA/IEhhc0NvbnRpZ3VvdXMgOiAwKQorICAg
ICAgICAgICAgICAgICAgICB8IChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUu
YXJyYXlNb2RlKCkpID8gSGFzQXJyYXlTdG9yYWdlIDogMCkpKSk7CisgICAgICAgIAorICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1
bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CkBAIC0zOTAsNzIgKzQ0OCwxMDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAgIEFTU0VSVCghbW9kZUFs
cmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1v
ZGUoKSkpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgIAorICAgIEluZGV4aW5nVHlwZSBk
ZXNpcmVkSW5kZXhpbmdUeXBlTWFzazsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKLSAgICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzog
ewotICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwotICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVy
ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICAK
LSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwor
ICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBkZXNpcmVkSW5kZXhp
bmdUeXBlTWFzayA9IEhhc0NvbnRpZ3VvdXM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNr
ID0gSGFzQXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFu
a1RvU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sg
PSBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAg
ICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0
b3JhZ2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CisgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIo
KTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICAv
LyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJh
eSBzdG9yYWdlLgotICAgICAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sg
PQotICAgICAgICAgICAgaXNTbG93UHV0QWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpID8gKEhhc0Fy
cmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpIDogSGFzQXJyYXlTdG9yYWdlOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q4
KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVk
SW5kZXhpbmdUeXBlTWFzaykpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1
Y3R1cmVHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHRlbXBHUFIpOworICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQg
aWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Olplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKICAgICAgICAgCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgbV9qaXQubG9h
ZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIAotICAgICAgICBzbG93Q2Fz
ZS5saW5rKCZtX2ppdCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRv
ZXMgbm90IGludGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAotICAgICAgICAv
LyB0aGVuIHRoaXMgbW9kZSB3b24ndCB3b3JrLgorICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsK
KyAgICAKKyAgICAvLyBJZiB3ZSdyZSBhbGxlZ2VkbHkgY3JlYXRpbmcgY29udGlndW91cyBzdG9y
YWdlIGFuZCB0aGUgaW5kZXggaXMgYm9ndXMsIHRoZW4KKyAgICAvLyBqdXN0IGRvbid0LgorICAg
IGlmIChub2RlLmFycmF5TW9kZSgpID09IEFycmF5OjpCbGFua1RvQ29udGlndW91cykgewogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykp
KTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBUcnVzdGVkSW1tMzIoTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gTmV4dCBjaGVjayB0aGF0IHRo
ZSBvYmplY3QgZG9lcyBub3QgaW50ZXJjZXB0IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0IGRvZXMs
CisgICAgLy8gdGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4KKyAgICBzcGVjdWxhdGlvbkNoZWNr
KAorICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBt
X2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1
cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8pKSk7CiAgICAgICAgIAotICAgICAgICAvLyBOb3cgY2FsbCBvdXQgdG8g
Y3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyh0ZW1wR1BSKTsKKyAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9y
YWdlLgorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIHRlbXBHUFIs
IGJhc2VSZWcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSwgdGVtcEdQUiwg
YmFzZVJlZyk7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7Ci0KLSAg
ICAgICAgLy8gQWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBiZWNhdXNlIHNp
bGVudCBzcGlsbGluZyBkb2VzIG5vdCBzYXZlCi0gICAgICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Ig
d291bGQgaXQgYmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxr
aW5nCi0gICAgICAgIC8vIGFib3V0IGEgbG9hZC4KLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICAKLSAgICAgICAgLy8gRmluYWxs
eSwgY2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3
YW50ZWQgdG8gZ2V0LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBz
cGVjdWxhdGlvbiBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAotICAgICAgICAvLyBi
eXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJl
aW5nIHJlZXhlY3V0ZWQuCi0gICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNh
dGlvbiBpcyBub3QgdXNlci12aXNpYmxlLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJv
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwg
U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpKTsKLSAgICAg
ICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBzdG9yYWdlUmVzdWx0KHRl
bXBHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNhc2Ug
QXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOwogICAgICAgICBicmVh
azsKICAgICB9CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKworICAgIC8v
IEFsYXMsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3Bp
bGxpbmcgZG9lcyBub3Qgc2F2ZQorICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUg
dXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCisgICAgLy8g
YWJvdXQgYSBsb2FkLgorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOworICAgICAgICAKKyAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtp
bmQgb2YgYXJyYXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCisgICAgLy8gTm90ZSB0
aGF0IHRoaXMgaXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwgcmVz
dWx0IGluIHRoZSAKKyAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0
aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCisgICAgLy8gVGhhdCdzIGZpbmUs
IHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCisgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVy
bywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSkpOworICAgICAgICAKKyAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGls
ZUluZGV4KTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5k
ZXggbm9kZUluZGV4KQpAQCAtMzIwNSwxMiArMzI5OSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9T
VE9SQUdFX01PREVTOiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsK
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0g
cmVzdWx0LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJlZyk7
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAgICAg
ICAgICAgCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigp
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
UmVnID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwg
cmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KSk7CiAgICAgICAgICAgICAKQEAgLTMzOTksNiArMzUwNCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwg
bV9jb21waWxlSW5kZXgpOwogfQogCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJl
Z2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSkKK3sKKyAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5
TW9kZSkpCisgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIEdQUlRlbXBv
cmFyeSByZWFsVGVtcG9yYXJ5KHRoaXMpOworICAgIHRlbXBvcmFyeS5hZG9wdChyZWFsVGVtcG9y
YXJ5KTsKKyAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0
Miw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR1BSVGVt
cG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsK
IGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMTE2Niw2ICsxMTY3LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZElt
bVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsK
KyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBv
bGQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMjE4LDExICsxMjI0LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNDY4LDYg
KzE0NzksMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1og
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgaW50MzJfdCBhcmcyKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0
ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAg
LTE1MzEsMTEgKzE1NDcsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
VHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0yMTQ5LDYg
KzIxNzAsNTIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5v
ZGUmKTsKICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BS
UmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChO
b2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJl
ZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29t
cGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHBy
b3BlcnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFRhZ1JlZywgR1BSUmVn
IHJlc3VsdFBheWxvYWRSZWcpOworI2VuZGlmCisgICAgCisgICAgYm9vbCBwdXRCeVZhbFdpbGxO
ZWVkRXh0cmFSZWdpc3RlcihBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICAvLyBGb3IgQXJyYXlTdG9yYWdlLCB3ZSBuZWVk
IGFuIGV4dHJhIHJlZyBmb3Igc3RvcmVzIHRvIGhvbGVzIGV4Y2VwdCBpZgorICAgICAgICAvLyB3
ZSdyZSBpbiBTbG93UHV0IG1vZGUuCisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xF
X01PREVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
KyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBGb3IgQ29udGlndW91
cywgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIGFueSBhY2Nlc3MgdGhhdCBtYXkgc3RvcmUKKyAg
ICAgICAgLy8gdG8gdGhlIHRhaWwuCisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01P
REVTOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAg
ICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBBbGwgcG9seW1vcnBoaWMgbW9kZXMg
bmVlZCBhbiBleHRyYSByZWcuCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHUFJSZWcg
dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmLCBBcnJheTo6TW9kZSk7
CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0
ZW1wb3JhcnksIE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVn
aXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUuYXJyYXlNb2RlKCkpOworICAgIH0KKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29u
dGlndW91c1B1dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVn
LCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChO
b2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworI2Vsc2UKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiwgR1BSUmVn
IGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2
YWx1ZVRhZ1JlZywgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VS
ZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVRh
Z1JlZywgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyk7CisjZW5kaWYKKyAgICAKICAgICB2b2lkIGNv
bXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU3Ry
aW5nKE5vZGUmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzgsOCArNzM4LDI1IEBAIHN0YXRpYyBpbmxpbmUgSlNPYmplY3QqIGNoZWNrZWRSZXR1cm4oSlMK
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiB9CiAKK2NsYXNzIFNhbXBsaW5nU2NvcGUgeworcHVi
bGljOgorICAgIFNhbXBsaW5nU2NvcGUoSW50ZXJwcmV0ZXIqIGludGVycHJldGVyKQorICAgICAg
ICA6IG1faW50ZXJwcmV0ZXIoaW50ZXJwcmV0ZXIpCisgICAgeworICAgICAgICBpbnRlcnByZXRl
ci0+c3RhcnRTYW1wbGluZygpOworICAgIH0KKyAgICB+U2FtcGxpbmdTY29wZSgpCisgICAgewor
ICAgICAgICBtX2ludGVycHJldGVyLT5zdG9wU2FtcGxpbmcoKTsKKyAgICB9Citwcml2YXRlOgor
ICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOworfTsKKwogSlNWYWx1ZSBJbnRlcnByZXRl
cjo6ZXhlY3V0ZShQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTT2JqZWN0KiB0aGlzT2JqKQogeworICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29w
ZSh0aGlzKTsKKyAgICAKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsK
ICAgICBBU1NFUlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc09iaiwgY2FsbEZyYW1lKSk7CiAgICAg
QVNTRVJUKCFzY29wZS0+Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24pOwpAQCAtMTEzNyw2ICsxMTU0
LDggQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogCiBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsb3N1cmUmIGNsb3N1cmUpIAogeworICAg
IFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKKyAgICAKICAgICBBU1NFUlQoIWNs
b3N1cmUub2xkQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwogICAg
IGlmIChjbG9zdXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0xMTcyLDYgKzExOTEsOCBAQCB2b2lkIElu
dGVycHJldGVyOjplbmRSZXBlYXRDYWxsKENhbGxGcmFtCiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNTY29wZSogc2NvcGUsIGludCBnbG9iYWxSZWdpc3Rlck9mZnNldCkK
IHsKKyAgICBTYW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CisgICAgCiAgICAgQVNT
RVJUKGlzVmFsaWRUaGlzT2JqZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7CiAgICAgQVNTRVJU
KCFzY29wZS0+Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24pOwogICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVn
aW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIAogICAgIG1fcHJvcGVy
dHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0gMDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCA9IDA7CiAgICAgbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4ID0gMDsKICAgICBtX2NhbGxMaW5r
SW5mb0luZGV4ID0gMDsKICAgICAKQEAgLTczOCw2ICs3MzksMjAgQEAgSklUQ29kZSBKSVQ6OnBy
aXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0
cnVjdHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlv
bkluZm8uc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm9baV0uY29weVRvU3R1YkluZm8obV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpLCBw
YXRjaEJ1ZmZlcik7CisgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQnlWYWxJbmZvcyhtX2J5
VmFsQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYnlWYWxDb21waWxhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ29kZUxvY2F0
aW9uSnVtcCBiYWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRp
b25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJhZFR5cGVKdW1wKSk7CisgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlW
YWxDb21waWxhdGlvbkluZm9baV0uZG9uZVRhcmdldCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsIHNsb3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGls
YXRpb25JbmZvW2ldLnNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBy
ZXR1cm5BZGRyZXNzID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW2ldLnJldHVybkFkZHJlc3MpOworICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2stPmJ5
VmFsSW5mbyhpKSA9IEJ5VmFsSW5mbygKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm9baV0uYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIGJhZFR5cGVKdW1wLAorICAgICAgICAg
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tpXS5hcnJheU1vZGUsCisgICAgICAgICAgICBkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoYmFkVHlwZUp1bXAsIGRvbmVUYXJnZXQpLAorICAgICAgICAg
ICAgZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKHJldHVybkFkZHJlc3MsIHNsb3dQYXRoVGFyZ2V0
KSk7CisgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkg
ewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZv
KGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMzA2ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNiAr
MjY0LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvcHlUb1N0dWJJbmZvKFN0
cnVjdHVyZVN0dWJJbmZvJiBpbmZvLCBMaW5rQnVmZmVyICZwYXRjaEJ1ZmZlcik7CiAgICAgfTsK
IAorICAgIHN0cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5mbyB7CisgICAgICAgIEJ5VmFsQ29tcGls
YXRpb25JbmZvKCkgeyB9CisgICAgICAgIAorICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbyh1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRU
eXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmVUYXJnZXQpCisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCisgICAgICAgICAgICAsIGFycmF5
TW9kZShhcnJheU1vZGUpCisgICAgICAgICAgICAsIGRvbmVUYXJnZXQoZG9uZVRhcmdldCkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsK
KyAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGRvbmVUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0
aFRhcmdldDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgcmV0dXJuQWRkcmVzczsKKyAg
ICB9OworCiAgICAgc3RydWN0IFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8gewogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVyOwpAQCAtMzQ4LDYgKzM2NywyMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJh
bnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNl
dCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7
CisgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQ
dXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KGdsb2Jh
bERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQog
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9s
aW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKICAgICAgICAgewpAQCAtMzk3LDYgKzQzMCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyosIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCos
IGludCwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZz
ZXQsIENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
KFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3Qg
Y291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIsIENhbGxGcmFtZSopOwogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8q
LCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0
cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciwgYm9vbCBkaXJlY3QpOworICAgICAgICAK
KyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogCiAgICAg
ICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcHJpdmF0ZUNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiwgVHJhbXBvbGluZVN0cnVjdHVyZSopOwog
ICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwg
Ym9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKQEAgLTQ1Miw2ICs0ODgsMjIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShSZWdpc3RlcklEIHN0
cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBBcnJheVByb2ZpbGUq
KTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChS
ZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlU3Rv
cmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIEpJ
VEFycmF5TW9kZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKik7CisgICAgICAgIAorICAg
ICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29u
dGFpbnMgaW5kZXhpbmcgdHlwZS4KKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQg
YW5kIHplcm8gZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLgorICAgICAgICAvLyBTdHJ1
Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4gUmV0dXJucyB0aGUgc2xvdyBjYXNlcy4gRmFsbC10
aHJvdWdoCisgICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0IGluIHJlZ1QwLCBhbmQgaXQg
aXMgbm90IHlldCBwcm9maWxlZC4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1w
TGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QwLCBi
YXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgorICAgICAgICAv
LyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1j
aGVja2VkIGFuZAorICAgICAgICAvLyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tl
ZC4gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuCisgICAgICAgIC8vIHJldHVybnMgdGhl
IHNsb3cgY2FzZXMuCisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1p
dEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSk7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5v
dEZpbmFsIH07CiAKQEAgLTg3MCw2ICs5MjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
VmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAgIFZlY3RvcjxMYWJlbD4gbV9sYWJl
bHM7CiAgICAgICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8+IG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3RvcjxCeVZhbENvbXBpbGF0aW9u
SW5mbz4gbV9ieVZhbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm8+IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm87CiAg
ICAgICAgIFZlY3RvcjxNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvPiBtX21ldGhvZENhbGxDb21w
aWxhdGlvbkluZm87CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CkBAIC04
NzksNiArOTMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNv
cmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAgdW5zaWduZWQgbV9wcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Owog
ICAgICAgICB1bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXg7CiAgICAgICAgIHVuc2ln
bmVkIG1fY2FsbExpbmtJbmZvSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ3
LDIzICs0NDcsMjIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZwog
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVn
aXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklE
IHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0ciwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQogewotICAgIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIDRVKTsK
LSAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoaW5pdGlhbExlbmd0aCkpOworICAgIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAg
c2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwg
aW5pdGlhbExlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworCisgICAgbG9hZFB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCksIHNj
cmF0Y2gpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Moc2NyYXRj
aCwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNDb250
aWd1b3VzKSkpOwogCiAgICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3Qg
dG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVu
IGR1cmluZyBKU0FycmF5IGluaXRpYWxpemF0aW9uLgogICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3Rv
cmFnZShpbml0aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3Vs
dCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhlIGFycmF5LgotICAgIGxvYWRQ
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgp
LCBzY3JhdGNoKTsKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJyYXksIE1hcmtl
ZEJsb2NrOjpOb25lPihzY3JhdGNoLCBjZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsKIAotICAgIC8v
IFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIEFycmF5U3RvcmFnZS4KLSAgICBz
dG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhz
dG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsK
LSAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OmluZGV4Qmlh
c09mZnNldCgpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhzdG9y
YWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNldCgpKSk7CisgICAgLy8gU3Rv
cmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbyBpbiB0aGUgaW5kZXhpbmcgaGVhZGVyLgorICAgIHN0
b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgp
LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgo
KSkpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2x5IGFsbG9jYXRlZCBBcnJheVN0b3JhZ2UuCiAg
ICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpKTsKQEAgLTQ3MiwxMiArNDcxLDEyIEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnMKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHN0b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKKyAgICAgICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkp
KTsKICNlbHNlCiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFs
dWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAg
ICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsK
KyAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhj
YWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgc2l6ZW9mKHVpbnQzMl90KSksIHN0b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZTMyKHN0b3Jh
Z2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkp
KTsKKyAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKICNl
bmRpZgogICAgIH0KIH0KQEAgLTU2MSwxMCArNTYwLDI1IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZUYKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxl
U3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKIHsKLSAg
ICBpZiAoIWNhbkJlT3B0aW1pemVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpICAgIAogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5
UHJvZmlsZS0+YWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSk7CisjZW5kaWYKK30KKworc3RhdGlj
IGlubGluZSBib29sIGFycmF5UHJvZmlsZVNhdyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEluZGV4
aW5nVHlwZSBjYXBhYmlsaXR5KQoreworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBy
ZXR1cm4gISEocHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCkgJiAoYXNBcnJheU1vZGVzKE5v
bkFycmF5IHwgY2FwYWJpbGl0eSkgfCBhc0FycmF5TW9kZXMoQXJyYXlDbGFzcyB8IGNhcGFiaWxp
dHkpKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgSklU
QXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKK3sK
KyAgICBpZiAoYXJyYXlQcm9maWxlU2F3KHByb2ZpbGUsIEhhc0FycmF5U3RvcmFnZSkpCisgICAg
ICAgIHJldHVybiBKSVRBcnJheVN0b3JhZ2U7CisgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9
CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjgwLDcgKzE2ODAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
CiAgICAgZW1pdFN0b3JlKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpLCBy
ZWdUMSwgcmVnVDApOwogICAgIAogICAgIHNraXBBcmd1bWVudHNDcmVhdGlvbi5saW5rKHRoaXMp
OwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKKyAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKTsK
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChhcmd1bWVudHMpOwogICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KHByb3BlcnR5KTsKICAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGRz
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlz
aW9uIDEzMDY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NjUsNyArMTU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYXJndW1lbnRfYnlfdmEKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVubW9kaWZp
ZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpKTsKICAgICAKICAgICBza2lwQXJndW1lbnRz
Q3JlYXRpb24ubGluayh0aGlzKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfZ2V0X2J5X3ZhbCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dl
dF9ieV92YWxfZ2VuZXJpYyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYXJndW1lbnRzLCBy
ZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKICAgICBz
dHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGRzdCk7CkBAIC0xNjYxLDcgKzE2NjEsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBp
bnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29w
aWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6
aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IobGVuZ3RoKSkpKSB7CiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9uZXdfYXJyYXkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCkpOwpAQCAtMTY4MCw4ICsxNjgxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfYXJy
YXkoSW5zdHJ1Y3QKICAgICAvLyBJZiB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6ZSwg
d2Ugd2lsbCBhbHJlYWR5IG1ha2UgdGhlIHByb3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAgICAg
Ly8gZW1pdF9vcF9uZXdfYXJyYXkuCiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkp
CisgICAgaWYgKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgp
CisgICAgICAgIHx8IENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpCiAgICAgICAgIHJl
dHVybjsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFdlJ3JlIGhhdmluZyBhIGJhZCB0aW1l
LgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRT
cGFjZSBmb3Igc3RvcmFnZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2gg
c3BhY2UgaW4gTWFya2VkU3BhY2UgZm9yIGNlbGwuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDI3ICsyMDQsNzggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFz
ZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIHByb2ZpbGUpOworCisgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIEpJVEFy
cmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9k
ZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENv
bnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdU
MiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRh
ZwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSkpOworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CiAgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICBicmVha3BvaW50KCk7
CisgICAgcmVzdWx0T0subGluayh0aGlzKTsKKyNlbmRpZgorCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZSgpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgbWFwKG1f
Ynl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpLCBkc3QsIHJlZ1Qx
LCByZWdUMCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwor
fQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRy
dXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgCisgICAgbG9hZDMyKEJhc2VJ
bmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gz
MihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwor
ICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0
QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdl
IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAKKyAgICBsb2FkMzIoQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCByZWdUMSk7IC8vIHRhZworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBh
eWxvYWQKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dD
YXNlczsKK30KKyAgICAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKQEAgLTI0OCwxMCArMjk5LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hl
Y2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCisgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsK
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSk7Ci0gICAgc3R1YkNhbGwuY2FsbChk
c3QpOworICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsKKworICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0g
c2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgr
KzsKIAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKIH0KQEAgLTI2MCwyMCArMzE3LDgy
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNp
Z25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWdu
ZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAg
ICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJl
Z1QyKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
KHJlZ1QxLCByZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNB
cnJheVN0b3JhZ2UpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgcHJv
ZmlsZSk7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShw
cm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6
CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBt
b2RlLCBkb25lKSk7Cit9CiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c1B1dEJ5
VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpCit7CisgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG91dE9mQm91bmRzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBs
YWJlbCgpOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOworICAgIHN0b3JlMzIo
cmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJ
bmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIAorICAgIG91dE9m
Qm91bmRzLmxpbmsodGhpcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCkpKSk7CisgICAgCisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENh
c2UocHJvZmlsZSk7CisgICAgCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVn
VDEpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMp
OworICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAKICAgICBlbWl0V3JpdGVCYXJyaWVy
KHJlZ1QwLCByZWdUMSwgcmVnVDEsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiAgICAgCisgICAgcmV0dXJuIHNsb3dDYXNl
czsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorewor
ICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVBy
b2ZpbGU7CisgICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJh
eVN0b3JhZ2UpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7CisKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJh
c2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICAgICAKICAgICBM
YWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKQEAgLTI4Myw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAg
CiAgICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVT
cGVjaWFsQ2FzZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOworICAgIGVt
aXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwogICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDIs
IEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwogICAgIApAQCAtMjkyLDYgKzQxMSwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3Vs
dCwgdGhpcyk7CiAgICAgCiAgICAgZW5kLmxpbmsodGhpcyk7CisgICAgCisgICAgZW1pdFdyaXRl
QmFycmllcihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0zMDMsMTMgKzQyNiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBj
aGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNl
bGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNr
Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2ZWN0b3IgY2hlY2sKKyAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIG91dCBvZiBib3VuZHMKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9
IGxhYmVsKCk7CiAgICAgCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlzLCBj
dGlfb3BfcHV0X2J5X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChiYXNl
KTsKICAgICBzdHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5KTsKICAgICBzdHVi
UHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlKTsKLSAgICBzdHViUHV0QnlWYWxDYWxsLmNh
bGwoKTsKKyAgICBDYWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICAKKyAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0
aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVj
dGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw2ICs5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAg
IHVuc2lnbmVkIGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVu
c2lnbmVkIHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHks
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1Qx
KTsKQEAgLTExMSwxNyArMTEyLDY0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5z
dHJ1Y3Rpb24KIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CiAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIFBhdGNoYWJs
ZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKLSAgICBsb2FkUHRyKEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMCkpOworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2Rl
KHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoK
KyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFn
ZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBh
ZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAor
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICBKdW1wIHJlc3VsdE9LID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCk7CisgICAgYnJl
YWtwb2ludCgpOworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7CisjZW5kaWYKIAogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihI
YXNDb250aWd1b3VzKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2Fs
ZVB0ciksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDApKTsKKyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKKworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgIGxvYWRQdHIo
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QwKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NiwxMCArMTk0LDE2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGVtcHR5IHZhbHVlCiAgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAg
IAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQocHJvcGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2Fs
bCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5B
ZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQpAQCAtMjI5LDcgKzI4Myw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMjM3LDEwICsyOTEsNzIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHplcm9FeHRl
bmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwg
cmVnVDMsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9y
YWdlKSkpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxl
KTsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgIAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2Zp
bGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93
Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExh
YmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUs
IGRvbmUpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVn
VDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
KTsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAg
ICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKdW1wIG91dE9mQm91bmRz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxh
YmVsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworICAgIHN0
b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0cikpOworICAgIAor
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAg
IAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVT
cGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QxLCByZWdUMyk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3Vs
dCwgdGhpcyk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiBz
bG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSkKK3sKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
YXJyYXlQcm9maWxlOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
SGFzQXJyYXlTdG9yYWdlKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVy
bywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCkBAIC0yNTAsOCArMzY2LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIEp1bXAgZW5kID0ganVtcCgpOwog
ICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgZW1pdEFycmF5UHJvZmls
ZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0
KCkpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CkBAIC0yNjAsOCArMzc2LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGp1bXAoKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0V3JpdGVC
YXJyaWVyKHJlZ1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVz
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgCisgICAgcmV0dXJuIHNsb3dD
YXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTI3MywxMyArMzg5LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNr
CiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBj
aGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBjaGVjaworICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcworICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFi
ZWwoKTsKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRCeVZhbENhbGwodGhpcywgY3RpX29wX3B1
dF9ieV92YWwpOwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAg
IHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKICAgICBzdHVi
UHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0gICAgc3R1YlB1dEJ5VmFs
Q2FsbC5jYWxsKCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisK
KyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93
UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0
cnVjdGlvbkluZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pbmRleChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjU5LDcgKzc4MSw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDIsIHJlZ1QxLCBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCk7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoSXNBcnJheSkpOwotICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOwor
ICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMpKTsKIAogICAgIC8vIENoZWNr
cyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CkBA
IC0xMjc3LDYgKzEzOTksNzYgQEAgYm9vbCBKSVQ6OmlzRGlyZWN0UHV0QnlJZChTdHJ1Y3R1cmVT
dHViSQogICAgIH0KIH0KIAordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJ
bmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2Rl
SW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSklUQ29u
dGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFy
cmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSku
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJl
c3MudmFsdWUoKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5
cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAg
IAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAor
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfdmFsIHN0dWIg
Zm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgIG1fY29kZUJsb2Nr
LCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rp
b24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92YWxfZ2VuZXJpYykp
OworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAg
ICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdl
OgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFk
VHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAg
ICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIHBh
dGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgQ29kZUJs
b2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFk
ZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlciht
X2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ0V4cFByb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTI0MTQsNiArMjQxNSwzMCBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
fQogCitzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbCgKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCit7CisgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vi
c2NyaXB0LmlzU3RyaW5nKCkpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vi
c2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIGlmIChzdWJzY3JpcHQuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJf
dCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CisgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VW
YWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKKyAgICAgICAg
ICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJhbWUs
IGkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwg
aSk7CisgICAgfQorCisgICAgaWYgKGlzTmFtZShzdWJzY3JpcHQpKQorICAgICAgICByZXR1cm4g
YmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGpzQ2FzdDxOYW1lSW5zdGFuY2UqPihzdWJzY3JpcHQu
YXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2Fs
bEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7
CisgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Cit9CisKIERF
RklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9nZXRfYnlfdmFsKQogewogICAg
IFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTI0MjMsMzUgKzI0NDgsNDQg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAgICAgCi0gICAgaWYgKExJ
S0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7Ci0gICAg
ICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blBy
b3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkp
IHsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChz
dWJzY3JpcHQuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFz
VUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmco
YmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkpIHsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKLSAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBp
KTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkg
JiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBv
cHRpbWl6aW5nIHRoaXMgYXQgYWxsLgorICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG9iamVj
dC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgICAgICBpZiAob2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5
IHRvIG9wdGltaXplLgorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtD
YWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9n
ZXRfYnlfdmFsX2dlbmVyaWMpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEF0
dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7CisgICAgICAgICAgICBB
U1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgQnlWYWxJbmZvJiBieVZhbEluZm8g
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAx
KTsKKyAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAgICAg
ICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9ySW5kZXhp
bmdUeXBlKGluZGV4aW5nVHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBi
eVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRC
eVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksICZi
eVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxG
cmFtZSwgaSk7Ci0gICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJfUkVUVVJO
X0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisgICAgCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKIAotICAgIGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewotICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFtZUlu
c3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7Ci0gICAgICAgIENI
RUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwotICAgIH0KKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOwogCi0gICAgSWRlbnRpZmllciBwcm9wZXJ0eShjYWxsRnJhbWUsIHN1YnNjcmlwdC50b1N0
cmluZyhjYWxsRnJhbWUpLT52YWx1ZShjYWxsRnJhbWUpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSk7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQ
VElPTl9BVF9FTkQoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOworICAgIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0QnlWYWwoY2FsbEZyYW1l
LCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CisgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTigpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
ICAgICAKQEAgLTI1MDIsMjMgKzI1MzYsMTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2Rl
ZEpTVmFsdWUsIG9wXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAot
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbCkKK3N0YXRpYyB2b2lkIHB1
dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBz
dWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxG
cmFtZTsKLSAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzdGFja0ZyYW1lLmdsb2JhbERh
dGE7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVl
KCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgp
OwotICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOwotCiAg
ICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3Qg
aSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0
KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUp
OwogICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQotICAgICAg
ICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJhbWUsIGksIHZh
bHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgIH0g
ZWxzZQpAQCAtMjUyOCwxMSArMjU1Myw2MSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cF9wdXRfYnlfdmFsCiAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBqc0Nhc3Q8TmFt
ZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSwgdmFsdWUsIHNs
b3QpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHkoY2FsbEZyYW1l
LCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZyYW1lKSk7Ci0gICAg
ICAgIGlmICghc3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5leGNlcHRpb24pIHsgLy8gRG9uJ3QgcHV0
IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCisgICAgICAgIGlm
ICghY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBh
biBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkp
OwogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwg
c2xvdCk7CiAgICAgICAgIH0KICAgICB9Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQs
IG9wX3B1dF9ieV92YWwpCit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKKwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5qc1ZhbHVlKCk7CisKKyAgICBpZiAo
YmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgc3Vic2NyaXB0LmlzSW50MzIoKSkgeworICAgICAgICAv
LyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6aW5nIGF0IGFsbC4KKyAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAg
aWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7CisgICAgICAgICAgICAv
LyBEb250IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOworICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IGNhbGxGcmFtZS0+Ynl0ZWNvZGVPZmZzZXRGb3JOb25ERkdDb2RlKCk7
CisgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgQnlWYWxJ
bmZvJiBieVZhbEluZm8gPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nZXRCeVZhbEluZm8oYnl0
ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICAgICAgICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKGluZGV4aW5n
VHlwZSkpIHsKKyAgICAgICAgICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJy
YXlNb2RlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7CisgICAgICAgICAgICAgICAgaWYg
KGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKQorICAgICAgICAgICAgICAgICAgICBK
SVQ6OmNvbXBpbGVQdXRCeVZhbCgmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFNUVUJfUkVUVVJOX0FERFJFU1MsIGFycmF5TW9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHV0QnlWYWwoY2Fs
bEZyYW1lLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUpOworCisgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0
X2J5X3ZhbF9nZW5lcmljKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNWYWx1ZSgpOworICAgIAorICAg
IHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlKTsKIAogICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw2ICszNzAsNyBAQCBleHRl
cm4gIkMiIHsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3Nl
bGZfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVk
SlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0
aV9vcF9nZXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOworICAg
IEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX2dlbmVyaWMoU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NU
VUIgY3RpX29wX2dldF9ieV92YWxfc3RyaW5nKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pbihTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBj
dGlfb3BfaW5zdGFuY2VvZihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKQEAg
LTQ0Niw2ICs0NDcsNyBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9w
dXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2luZGV4KFNUVUJfQVJHU19ERUNM
QVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92
YWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CisgICAgdm9pZCBKSVRfU1RV
QiBjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lO
VEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0ZXJfc2V0dGVyKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9nbG9iYWxfdmFyX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNp
b24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTExNzEsNyArMTE3MSw3IEBAIF9sbGlu
dF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNd
LCB0MgogICAgIGFycmF5UHJvZmlsZSh0MiwgdDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXks
IC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9w
R2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRpeiB0MiwgKEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJh
eVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93
CiAgICAgbG9hZGkgNFtQQ10sIHQxCiAgICAgbG9hZHAgMzJbUENdLCB0MgogICAgIGxvYWRwIEpT
T2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwCkBAIC0xMzA2LDEwICsxMzA2LDIxIEBAIF9sbGlu
dF9vcF9nZXRfYnlfdmFsOgogICAgIGxvYWRpIDEyW1BDXSwgdDMKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlUGF5bG9hZCh0MywgSW50MzJUYWcsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAg
bG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250
aWd1b3VzLCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0MSwgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0M10s
IC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRpIFRhZ09mZnNldFt0MywgdDEsIDhdLCB0MgorICAg
IGxvYWRpIFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKyAgICBqbXAgLm9wR2V0QnlWYWxE
b25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0
b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFl
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGxvYWRp
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKICAgICBs
b2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5bG9hZE9mZnNldFt0MywgdDEsIDhdLCB0
MQorCisub3BHZXRCeVZhbERvbmU6CisgICAgbG9hZGkgNFtQQ10sIHQwCiAgICAgYmllcSB0Miwg
RW1wdHlWYWx1ZVRhZywgLm9wR2V0QnlWYWxTbG93CiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRb
Y2ZyLCB0MCwgOF0KICAgICBzdG9yZWkgdDEsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KQEAg
LTEzODYsMjkgKzEzOTcsNTIgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgSlND
ZWxsOjptX3N0cnVjdHVyZVt0MV0sIHQyCiAgICAgbG9hZHAgMTZbUENdLCB0MwogICAgIGFycmF5
UHJvZmlsZSh0MiwgdDMsIHQwKQotICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0
QnlWYWxTbG93CiAgICAgbG9hZGkgOFtQQ10sIHQwCi0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZVBheWxvYWQodDAsIEludDMyVGFnLCB0MiwgLm9wUHV0QnlWYWxTbG93KQorICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGVQYXlsb2FkKHQwLCBJbnQzMlRhZywgdDMsIC5vcFB1dEJ5VmFsU2xvdykK
ICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAotICAgIGJpYWVxIHQyLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFn
T2Zmc2V0W3QwLCB0MiwgOF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsRW1wdHkKLS5vcFB1
dEJ5VmFsU3RvcmVSZXN1bHQ6Ci0gICAgbG9hZGkgMTJbUENdLCB0MwotICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUyUmVnKHQzLCB0MSwgdDMpCi0gICAgd3JpdGVCYXJyaWVyKHQxLCB0MykKLSAg
ICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDAsIHQyLCA4
XQotICAgIHN0b3JlaSB0MywgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRPZmZzZXRb
dDAsIHQyLCA4XQorICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcFB1dEJ5VmFsTm90Q29u
dGlndW91cworCisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJv
dW5kcworLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQ6CisgICAgbG9hZGkgMTJbUENd
LCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHQyLCB0MSwgdDIpCisgICAgd3Jp
dGVCYXJyaWVyKHQxLCB0MikKKyAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFt0MCwgdDMsIDhdCisg
ICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W3QwLCB0MywgOF0KKyAgICBkaXNwYXRjaCg1KQor
Cisub3BQdXRCeVZhbENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBiaWFlcSB0MywgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5v
cFB1dEJ5VmFsU2xvdworICAgIGlmIFZBTFVFX1BST0ZJTEVSCisgICAgICAgIGxvYWRwIDE2W1BD
XSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0
MV0KKyAgICBlbmQKKyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBq
bXAgLm9wUHV0QnlWYWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250
aWd1b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93Cisg
ICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92
ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBiaWVxIEFycmF5U3RvcmFnZTo6
bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDAsIHQzLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wUHV0QnlW
YWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdDoK
KyAgICBsb2FkaSAxMltQQ10sIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcodDIs
IHQxLCB0MikKKyAgICB3cml0ZUJhcnJpZXIodDEsIHQyKQorICAgIHN0b3JlaSB0MSwgQXJyYXlT
dG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDMsIDhdCisgICAgc3RvcmVpIHQyLCBB
cnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5bG9hZE9mZnNldFt0MCwgdDMsIDhdCiAgICAgZGlz
cGF0Y2goNSkKIAotLm9wUHV0QnlWYWxFbXB0eToKKy5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1w
dHk6CiAgICAgaWYgVkFMVUVfUFJPRklMRVIKLSAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmls
ZTo6bV9tYXlTdG9yZVRvSG9sZVt0M10KKyAgICAgICAgbG9hZHAgMTZbUENdLCB0MQorICAgICAg
ICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX21heVN0b3JlVG9Ib2xlW3QxXQogICAgIGVuZAog
ICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJp
YiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5k
ZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRC
eVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAgICAgYWRkaSAxLCB0MiwgdDEKICAgICBzdG9y
ZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNM
ZW5ndGhbdDBdCi0gICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBqbXAgLm9wUHV0
QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6CiAgICAgY2Fs
bFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHV0X2J5X3ZhbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShy
ZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxOCw3ICsxMDE4LDcgQEAgX2xs
aW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVyZVt0
M10sIHQyCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MSwgdDApCiAgICAgYnRpeiB0MiwgSXNBcnJh
eSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93Ci0gICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAu
b3BHZXRBcnJheUxlbmd0aFNsb3cKKyAgICBidGl6IHQyLCAoSGFzQ29udGlndW91cyB8IEhhc0Fy
cmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpLCAub3BHZXRBcnJheUxlbmd0aFNs
b3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MQogICAgIGxvYWRwIDY0W1BCLCBQQywgOF0s
IHQyCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKQEAgLTExNDcsMTQg
KzExNDcsMjUgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4
XSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MSkKICAgICBsb2FkaXMgMjRbUEIsIFBD
LCA4XSwgdDMKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdwog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5vcEdldEJ5VmFsU2xvdykK
ICAgICBzeGkycCB0MSwgdDEKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0
MworICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcEdldEJ5VmFsTm90Q29udGlndW91cwor
CisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6
bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaXMgOFtQQiwgUEMs
IDhdLCB0MAorICAgIGxvYWRwIFt0MywgdDEsIDhdLCB0MgorICAgIGJ0cHogdDIsIC5vcEdldEJ5
VmFsU2xvdworICAgIGptcCAub3BHZXRCeVZhbERvbmUKKworLm9wR2V0QnlWYWxOb3RDb250aWd1
b3VzOgorICAgIGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3Jh
Z2UsIC5vcEdldEJ5VmFsU2xvdwogICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CiAg
ICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkcCBBcnJheVN0b3JhZ2U6Om1fdmVj
dG9yW3QzLCB0MSwgOF0sIHQyCiAgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CisKKy5vcEdl
dEJ5VmFsRG9uZToKICAgICBzdG9yZXAgdDIsIFtjZnIsIHQwLCA4XQogICAgIGxvYWRwIDQwW1BC
LCBQQywgOF0sIHQwCiAgICAgdmFsdWVQcm9maWxlKHQyLCB0MCkKQEAgLTEyMjksMjkgKzEyNDAs
NTEgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVy
ZVt0MV0sIHQyCiAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDMKICAgICBhcnJheVByb2ZpbGUo
dDIsIHQzLCB0MCkKLSAgICBidGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xv
dwogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVJbnQzMih0MCwgdDIsIC5vcFB1dEJ5VmFsU2xvdykKLSAgICBzeGkycCB0MiwgdDIKKyAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQzLCAub3BQdXRCeVZhbFNsb3cpCisgICAg
c3hpMnAgdDMsIHQzCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKLSAg
ICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3Zl
Y3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJ0cHogQXJyYXlTdG9yYWdlOjpt
X3ZlY3Rvclt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVz
dWx0OgotICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwotICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUodDMsIHQxKQorICAgIGJ0aXogdDIsIEhhc0NvbnRpZ3VvdXMsIC5vcFB1dEJ5VmFsTm90
Q29udGlndW91cworICAgIAorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxDb250aWd1b3Vz
T3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3JlUmVzdWx0OgorICAgIGxvYWRp
cyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQor
ICAgIHdyaXRlQmFycmllcih0MSkKKyAgICBzdG9yZXAgdDEsIFt0MCwgdDMsIDhdCisgICAgZGlz
cGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgYmlhZXEg
dDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5n
dGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBpZiBWQUxVRV9QUk9GSUxFUgorICAgICAgICBs
b2FkcCAzMltQQiwgUEMsIDhdLCB0MgorICAgICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjpt
X21heVN0b3JlVG9Ib2xlW3QyXQorICAgIGVuZAorICAgIGFkZGkgMSwgdDMsIHQyCisgICAgc3Rv
cmVpIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGlj
TGVuZ3RoW3QwXQorICAgIGptcCAub3BQdXRCeVZhbENvbnRpZ3VvdXNTdG9yZVJlc3VsdAorCisu
b3BQdXRCeVZhbE5vdENvbnRpZ3VvdXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlLCAu
b3BQdXRCeVZhbFNsb3cKKyAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdworICAgIGJ0
cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDMsIDhdLCAub3BQdXRCeVZhbEFycmF5U3Rv
cmFnZUVtcHR5Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0OgorICAgIGxvYWRp
cyAyNFtQQiwgUEMsIDhdLCB0MgorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDIsIHQxKQog
ICAgIHdyaXRlQmFycmllcih0MSkKLSAgICBzdG9yZXAgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0
b3JbdDAsIHQyLCA4XQorICAgIHN0b3JlcCB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwg
dDMsIDhdCiAgICAgZGlzcGF0Y2goNSkKIAotLm9wUHV0QnlWYWxFbXB0eToKKy5vcFB1dEJ5VmFs
QXJyYXlTdG9yYWdlRW1wdHk6CiAgICAgaWYgVkFMVUVfUFJPRklMRVIKLSAgICAgICAgc3RvcmVi
IDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0M10KKyAgICAgICAgbG9hZHAgMzJb
UEIsIFBDLCA4XSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9y
ZVRvSG9sZVt0MV0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1
ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Ci0g
ICAgYWRkaSAxLCB0MiwgdDEKKyAgICBiaWIgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJ
bmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFn
ZVN0b3JlUmVzdWx0CisgICAgYWRkaSAxLCB0MywgdDEKICAgICBzdG9yZWkgdDEsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCi0gICAg
am1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBqbXAgLm9wUHV0QnlWYWxBcnJheVN0b3Jh
Z2VTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfcHV0X2J5X3ZhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEzMDY4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29y
a2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOSBAQCBlbmQKIAogIyBDb25zdGFudCBmb3IgcmVhc29u
aW5nIGFib3V0IGJ1dHRlcmZsaWVzLgogY29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0NvbnRp
Z3VvdXMgPSAyCiBjb25zdCBIYXNBcnJheVN0b3JhZ2UgPSA4Ci1jb25zdCBBbGxBcnJheVR5cGVz
ID0gMTUKK2NvbnN0IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgPSAxNgogCiAjIFR5cGUgY29uc3Rh
bnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11
bHRpcGxpCiAKIGlubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCiB7Ci0gICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZh
bHVlczsKKyAgICByZXR1cm4gbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFs
dWVzOwogfQogCiBpbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEz
MDY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBhcmd1
bWVudENsYW1wZWRJbmRleEZyb20KIC8vIGN1cnJlbnRDb3VudCkgd2lsbCBiZSBzaGlmdGVkIHRv
IHRoZSBsZWZ0IG9yIHJpZ2h0IGFzIGFwcHJvcHJpYXRlOyBpbiB0aGUKIC8vIGNhc2Ugb2Ygc2hp
ZnQgdGhpcyBtdXN0IGJlIHJlbW92aW5nIHZhbHVlcywgaW4gdGhlIGNhc2Ugb2YgdW5zaGlmdCB0
aGlzCiAvLyBtdXN0IGJlIGludHJvZHVjaW5nIG5ldyB2YWx1ZXMuCi1zdGF0aWMgaW5saW5lIHZv
aWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVh
ZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25l
ZCBsZW5ndGgpCit0ZW1wbGF0ZTxKU0FycmF5OjpTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9k
ZT4KK3ZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWdu
ZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRDb3VudCA+IHJlc3VsdENvdW50
KTsKICAgICB1bnNpZ25lZCBjb3VudCA9IGN1cnJlbnRDb3VudCAtIHJlc3VsdENvdW50OwpAQCAt
MjA0LDcgKzIwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzaGlmdChFeGVjU3RhdGUqIGV4ZWMK
IAogICAgIGlmIChpc0pTQXJyYXkodGhpc09iaikpIHsKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBhc0FycmF5KHRoaXNPYmopOwotICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0
aCAmJiBhc0FycmF5KHRoaXNPYmopLT5zaGlmdENvdW50KGV4ZWMsIGhlYWRlciwgY291bnQpKQor
ICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCAmJiBhc0FycmF5KHRoaXNPYmop
LT5zaGlmdENvdW50PHNoaWZ0Q291bnRNb2RlPihleGVjLCBoZWFkZXIsIGNvdW50KSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIzMSw3ICsyMzIsOCBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIH0KICAgICB9CiB9Ci1zdGF0aWMg
aW5saW5lIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1
bnNpZ25lZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291
bnQsIHVuc2lnbmVkIGxlbmd0aCkKK3RlbXBsYXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRNb2RlIHNo
aWZ0Q291bnRNb2RlPgordm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1bnNpZ25lZCBy
ZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VSVChyZXN1bHRDb3VudCA+
IGN1cnJlbnRDb3VudCk7CiAgICAgdW5zaWduZWQgY291bnQgPSByZXN1bHRDb3VudCAtIGN1cnJl
bnRDb3VudDsKQEAgLTI0NywxMCArMjQ5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnNoaWZ0
KEV4ZWNTdGF0ZSogZXgKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc09iaikpIHsKICAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwotICAgICAgICBpZiAoYXJyYXktPmxl
bmd0aCgpID09IGxlbmd0aCAmJiBhcnJheS0+dW5zaGlmdENvdW50KGV4ZWMsIGhlYWRlciwgY291
bnQpKQorICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCAmJiBhcnJheS0+dW5z
aGlmdENvdW50PHNoaWZ0Q291bnRNb2RlPihleGVjLCBoZWFkZXIsIGNvdW50KSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0KKyAgICAKICAgICBmb3IgKHVuc2lnbmVkIGsgPSBsZW5ndGgg
LSBjdXJyZW50Q291bnQ7IGsgPiBoZWFkZXI7IC0taykgewogICAgICAgICB1bnNpZ25lZCBmcm9t
ID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAgICAgIHVuc2lnbmVkIHRvID0gayArIHJlc3Vs
dENvdW50IC0gMTsKQEAgLTUyNiw3ICs1MjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGFycmF5LT5wdXNoKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhcnJheS0+bGVu
Z3RoKCkpKTsKICAgICB9Ci0KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1
ZS50b09iamVjdChleGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQpAQCAtNTQ0LDYgKzU0Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICB9CisgICAgCiAgICAgSlNWYWx1ZSBuZXdMZW5ndGgoc3RhdGljX2Nhc3Q8aW50NjRfdD4o
bGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkpOwog
ICAgIHB1dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIG5ld0xlbmd0aCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXdMZW5ndGgpOwpA
QCAtNjAwLDcgKzYwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewogICAgICAg
ICByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywgMCk7Ci0gICAgICAgIHNoaWZ0KGV4ZWMsIHRo
aXNPYmosIDAsIDEsIDAsIGxlbmd0aCk7CisgICAgICAgIHNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291
bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMSwgMCwgbGVuZ3RoKTsKICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgcHV0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwpAQCAtNzMw
LDcgKzczMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCisgICAg
CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY29uc3RydWN0RW1wdHlBcnJheShleGVjKSk7CiAKQEAgLTc2MiwxMSArNzY1LDEx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIHVuc2ln
bmVkIGFkZGl0aW9uYWxBcmdzID0gc3RkOjptYXg8aW50PihleGVjLT5hcmd1bWVudENvdW50KCkg
LSAyLCAwKTsKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxldGVDb3VudCkgewotICAgICAg
ICBzaGlmdChleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdz
LCBsZW5ndGgpOworICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihl
eGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgp
OwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0gZWxzZSBpZiAoYWRkaXRpb25h
bEFyZ3MgPiBkZWxldGVDb3VudCkgewotICAgICAgICB1bnNoaWZ0KGV4ZWMsIHRoaXNPYmosIGJl
Z2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxlbmd0aCk7CisgICAgICAgIHVuc2hp
ZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRl
bGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CkBAIC03OTEsNyArNzk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgdW5zaWduZWQgbnJBcmdzID0gZXhlYy0+YXJndW1l
bnRDb3VudCgpOwogICAgIGlmIChuckFyZ3MpIHsKLSAgICAgICAgdW5zaGlmdChleGVjLCB0aGlz
T2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7CisgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hp
ZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2
ICs1NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRl
cmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSAr
IHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKICAgICB9CiAgICAgCisgICAgLy8gVGhpcyBtZXRob2Qg
aXMgaGVyZSBub3QganVzdCBiZWNhdXNlIGl0J3MgaGFuZHksIGJ1dCB0byByZW1pbmQgeW91IHRo
YXQKKyAgICAvLyB0aGUgd2hvbGUgcG9pbnQgb2YgYnV0dGVyZmxpZXMgaXMgdG8gZG8gZXZpbCBw
b2ludGVyIGFyaXRobWV0aWMuCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbVBvaW50ZXIoY2hh
ciogcHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5
Kj4ocHRyKTsKKyAgICB9CisgICAgCisgICAgY2hhciogcG9pbnRlcigpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyB9CisgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRl
cjo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRl
eGluZ0hlYWRlcjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQpAQCAtNzAsOSArNzksMjEgQEAg
cHVibGljOgogICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0
IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgUHJvcGVydHlTdG9y
YWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CiAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkg
Y29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAg
ICAKKyAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigp
LT5wdWJsaWNMZW5ndGgoKTsgfQorICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJu
IGluZGV4aW5nSGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRQdWJsaWNM
ZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3Ro
KHZhbHVlKTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGlu
ZGV4aW5nSGVhZGVyKCktPnNldFZlY3Rvckxlbmd0aCh2YWx1ZSk7IH0KKyAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2Uo
KSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjb250aWd1b3VzKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPFdy
aXRlQmFycmllcjxVbmtub3duPiA+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBm
cm9tQ29udGlndW91cyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnRpZ3VvdXMpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihjb250aWd1b3VzKTsK
KyAgICB9CiAgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFn
ZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRl
cikpOyB9CiAgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzLmgJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0
NCw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkKIAogaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXpl
X3QgbnVtYmVyT2ZTbG90cykKIHsKLSAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgIEFTU0VSVChudW1iZXJPZlNsb3RzIDw9IGluZGV4
aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOwogICAgIHVuc2lnbmVkIHByb3Bl
cnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgLy8gRklY
TUU6IEl0IHdvdWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFzIGEgbG9vcCBz
aW5jZSAoMSkgd2Uga25vdyBpbiB3aGljaApAQCAtMTYzLDcgKzE2Myw3IEBAIGlubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHIKIAogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7
Ci0gICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3Zl
LgogICAgIG1lbW1vdmUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMw
Njg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxNyBAQCBpbmxpbmUgc2l6
ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0CiAKIGlubGluZSBzaXplX3QgSW5kZXhpbmdI
ZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewotICAgIGlmIChMSUtFTFkoIWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkpCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIHZlY3Rvckxl
bmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJu
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKworI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBjaGFyKiBpbmRleGlu
Z1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN0YXRpYyBj
aGFyIHJlc3VsdFsxMjhdOworICAgIGNvbnN0IGNoYXIqIGJhc2ljTmFtZTsKKyAgICBzd2l0Y2gg
KGluZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXMpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAg
ICAgICBiYXNpY05hbWUgPSAiTm9uQXJyYXkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5v
bkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhD
b250aWd1b3VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UiOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6
CisgICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBiYXNpY05hbWUg
PSAiQXJyYXlDbGFzcyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czoKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNO
YW1lID0gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIkFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBiYXNpY05hbWUgPSAiVW5rbm93biEiOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgc25wcmludGYoCisgICAgICAgIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCksICIlcyVz
IiwgYmFzaWNOYW1lLAorICAgICAgICAoaW5kZXhpbmdUeXBlICYgTWF5SGF2ZUluZGV4ZWRBY2Nl
c3NvcnMpID8gInxNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyIgOiAiIik7CisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAxMzA2ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMjUgKzI2LDI5IEBACiAjaWZuZGVmIEluZGV4aW5nVHlwZV9oCiAjZGVmaW5l
IEluZGV4aW5nVHlwZV9oCiAKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKIG5hbWVz
cGFjZSBKU0MgewogCiB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogCiAvLyBGbGFncyBm
b3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBIYXNDb250aWd1b3VzICAgICAgICAgICAgPSAyOwogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4Owogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBIYXNTbG93UHV0QXJyYXlTdG9yYWdlICAgPSAxNjsKIAogLy8gQWRkaXRpb25h
bCBmbGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1
c3VhbGx5CiAvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgot
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAzMjsg
Ly8gTWVhbnMgdGhhdCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBw
YXN0Lgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAg
PSA2NDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMg
ID0gMzI7CiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgPSBI
YXNDb250aWd1b3VzOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2UgICAgICAgID0gSGFzQXJyYXlTdG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlDbGFzcyAgICAgICAgICAgICAg
ICAgICAgICA9IElzQXJyYXk7IC8vIEknZCB3YW50IHRvIGNhbGwgdGhpcyAiQXJyYXkiIGJ1dCB0
aGlzIHdvdWxkIGxlYWQgdG8gZGlzYXN0cm91cyBuYW1lc3BhY2UgcG9sbHV0aW9uLgorc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhDb250aWd1b3VzICAgICAgICAgICAgID0gSXNB
cnJheSB8IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0
aEFycmF5U3RvcmFnZSAgICAgICAgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwogc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlICAgID0g
SXNBcnJheSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAKQEAgLTUyLDYgKzU2LDEwIEBAIHN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoU2xvd1AKICAgICBOb25BcnJheTogICAg
ICAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5Q2xhc3MKIAorI2RlZmluZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUyBcCisgICAgTm9uQXJyYXlXaXRoQ29udGlndW91czogICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXMKKwogI2RlZmluZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMgXAogICAgIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZQpAQCAtNzYsNiArODQsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0luZGV4
aW5nSGVhZGVyKEluZAogICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyh0eXBlKTsKIH0K
IAorc3RhdGljIGlubGluZSBib29sIGhhc0NvbnRpZ3VvdXMoSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSkKK3sKKyAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgSGFzQ29udGlndW91cyk7Cit9
CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNBcnJheVN0b3JhZ2UoSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkKIHsKICAgICByZXR1cm4gISEoaW5kZXhpbmdUeXBlICYgKEhhc0FycmF5U3RvcmFn
ZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKQEAgLTg2LDYgKzk5LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNob3VsZFVzZVNsb3dQdXQoSW5kZQogICAgIHJldHVybiAhIShpbmRleGluZ1R5
cGUgJiBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKTsKIH0KIAorY29uc3QgY2hhciogaW5kZXhpbmdU
eXBlVG9TdHJpbmcoSW5kZXhpbmdUeXBlKTsKKwogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlw
ZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9
IDMxOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
cmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw5ICszMzcsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNB
cnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29s
IHRocm93RXhjZXB0aW9uKQorYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9u
LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQg
b25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxv
d2luZyAnaWYnLgpAQCAtNDAyLDEyICs0MDEsNzEgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4
Y2VwdGlvbikKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgaWYgKCFuZXdMZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKSB7CisgICAgICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgK
KyAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAorICAgICAg
ICAgICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0
YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBpZiAobmV3TGVuZ3RoID09
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5z
dXJlcyB0aGF0IHdlIGNhbiBkbyBmYXN0IHB1c2guCisgICAgICAgICAgICB8fCAobmV3TGVuZ3Ro
ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKKyAgICAgICAgICAgICAgICAmJiAhaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihuZXdMZW5ndGgsIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMobV9idXR0
ZXJmbHkpKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisgICAg
ICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxE
YXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbmV3TGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3RoOykKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChuZXdMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOgorICAgICAgICByZXR1cm4gc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBuZXdM
ZW5ndGgsIHRocm93RXhjZXB0aW9uLCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
Q29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aC0tKQorICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobGVuZ3Ro
IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgaWYgKHZh
bHVlKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uY2xl
YXIoKTsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKICAgICAKQEAgLTQzMSwyNiArNDg5LDI4IEBAIEpTVmFsdWUgSlNBcnJh
eTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRo
IGFyZ3VtZW50IGluZHguCi0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRl
eCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAgICAgIGlmICgh
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7Ci0gICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBDYWxs
IHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgi
LCBpbmR4LCBhbmQgdHJ1ZS4KLSAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsK
LSAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQuCi0gICAgICAgIHJldHVybiBlbGVtZW50OworICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IGdldEFycmF5TGVuZ3RoKCkg
LSAxOworICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tH
ZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgSlNWYWx1
ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIC8vIENhbGwgdGhlIFtbRGVs
ZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4K
KyAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAvLyBDYWxsIHRoZSBb
W1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4
LCBhbmQgdHJ1ZS4KKyAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgIC8vIFJl
dHVybiBlbGVtZW50LgorICAgIHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5k
ZXggYXJlIGFsbW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAt
NDY0LDYgKzUyNCwyNiBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1Zh
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250
aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgewor
ICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgs
IHZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJ
bnZhbGlkIGFycmF5IGxlbmd0aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNX
aXRob3V0QXR0cmlidXRlcyhleGVjLCBsZW5ndGgsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7
CiAgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogICAgICAgICBpZiAoYXR0
ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShleGVjLCBvbGRMZW5ndGgsIHZhbHVlLCB0
cnVlKSkgewpAQCAtNTA1LDE4ICs1ODUsMTQgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYQogICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCitib29sIEpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQVNTRVJUKGNvdW50
ID4gMCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
c3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAg
CiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBh
biBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFy
cmF5UHJvdG90eXBlLgotICAgIGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciB8fCBpblNwYXJzZUluZGV4aW5nTW9kZSgpKQorICAgIGlmIChvbGRMZW5ndGggIT0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZUluZGV4aW5nTW9kZSgpIHx8
IHNob3VsZFVzZVNsb3dQdXQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFvbGRMZW5ndGgpCkBAIC01NjUsMTcgKzY0MSw2OSBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKK3sKKyAg
ICBBU1NFUlQoY291bnQgPiAwKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNp
Z25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFT
U0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbWF5IGhh
dmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGlu
ZyB0byBkbworICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCisg
ICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCArIGNvdW50KSA+PSBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYKQorICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4
ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZW5kID0gb2xk
TGVuZ3RoIC0gY291bnQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkg
PCBlbmQ7ICsraSkgeworICAgICAgICAgICAgLy8gU3RvcmluZyB0byBhIGhvbGUgaXMgZmluZSBz
aW5jZSB3ZSdyZSBzdGlsbCBoYXZpbmcgYSBnb29kIHRpbWUuIEJ1dCByZWFkaW5nCisgICAgICAg
ICAgICAvLyBmcm9tIGEgaG9sZSBpcyB0b3RhbGx5IG5vdCBmaW5lLCBzaW5jZSB3ZSBtaWdodCBo
YXZlIHRvIHJlYWQgZnJvbSB0aGUgcHJvdG8KKyAgICAgICAgICAgIC8vIGNoYWluLgorICAgICAg
ICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdl
dCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0aCBpcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBtYWtl
IHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gbWlzdGFrZSBpbiB0aGUgZnV0dXJlOiBzaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZSgpIGNhbid0IGRvIGFueXRoaW5nCisgICAgICAgICAgICAg
ICAgLy8gYWJvdXQgaG9sZXMgKGF0IGxlYXN0IGZvciBub3cpLCBidXQgaXQgY2FuIGRldGVjdCB0
aGVtIHF1aWNrbHkuIFNvCisgICAgICAgICAgICAgICAgLy8gd2UgY29udmVydCB0byBhcnJheSBz
dG9yYWdlIGFuZCB0aGVuIGFsbG93IHRoZSBhcnJheSBzdG9yYWdlIHBhdGggdG8KKyAgICAgICAg
ICAgICAgICAvLyBmaWd1cmUgaXQgb3V0LgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENv
dW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNU
b0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBk
YXRhIGFyb3VuZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCisgICAgICAgICAgICAvLyBUaGlzIGlzIGlu
IGxpbmUgd2l0aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBk
ZWxldGlvbgorICAgICAgICAgICAgLy8gYmFycmllci4KKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgfQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgCisg
ICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAg
ICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50
LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNI
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgdW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAotYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCkKK2Jvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICBBU1NFUlQoc3RhcnRJbmRleCA8PSBs
ZW5ndGgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVy
d2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3Jp
dGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3Ro
ICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2Rl
KCkgfHwgc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIG1vdmVGcm9udCA9ICFzdGFydEluZGV4IHx8
IHN0YXJ0SW5kZXggPCBsZW5ndGggLyAyOwpAQCAtNjEwLDYgKzczOCw0OCBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQoreworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAg
ICAgICAvLyBXZSBjb3VsZCBoYW5kbGUgdGhpcy4gQnV0IGl0IHNob3VsZG4ndCBldmVyIGNvbWUg
dXAsIHNvIHdlIHdvbid0LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNh
c2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBtYXkg
aGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHVuc2hpZnQuIFdlJ3JlIHdp
bGxpbmcgdG8gZG8gc28KKyAgICAgICAgLy8gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93
LgorICAgICAgICBpZiAob2xkTGVuZ3RoIC0gc3RhcnRJbmRleCA+PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKQorICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIAorICAgICAgICBlbnN1cmVDb250aWd1b3Vz
TGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkTGVuZ3RoICsgY291bnQpOworICAgICAgICAK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4Oykg
eworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQs
IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7Cisg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91
dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTk9URTog
d2UncmUgbGVhdmluZyBiZWluZyBnYXJiYWdlIGluIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0
IHdlIHNoaWZ0ZWQgb3V0CisgICAgICAgIC8vIG9mLiBUaGlzIGlzIGZpbmUgYmVjYXVzZSB0aGUg
Y2FsbGVyIGlzIHJlcXVpcmVkIHRvIHN0b3JlIG92ZXIgdGhhdCBhcmVhLCBhbmQKKyAgICAgICAg
Ly8gaW4gY29udGlndW91cyBtb2RlIHN0b3JpbmcgaW50byBhIGhvbGUgaXMgZ3VhcmFudGVlZCB0
byBiZWhhdmUgZXhhY3RseSB0aGUgc2FtZQorICAgICAgICAvLyBhcyBzdG9yaW5nIG92ZXIgYW4g
ZXhpc3RpbmcgZWxlbWVudC4KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCiBzdGF0aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29u
c3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2Fz
dDxjb25zdCBKU1ZhbHVlKj4oYSktPmFzTnVtYmVyKCk7CkBAIC02MjQsNiArNzk0LDQ1IEBAIHN0
YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KGMKICAgICByZXR1cm4gY29kZVBv
aW50Q29tcGFyZSh2YS0+c2Vjb25kLCB2Yi0+c2Vjb25kKTsKIH0KIAordGVtcGxhdGU8SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6c29ydE51bWVyaWNWZWN0b3IoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUs
IGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09
IEFycmF5V2l0aENvbnRpZ3VvdXMgfHwgaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aEFycmF5U3Rv
cmFnZSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwor
ICAgIHVuc2lnbmVkIG5ld1JlbGV2YW50TGVuZ3RoOworICAgIGNvbXBhY3RGb3JTb3J0aW5nPGlu
ZGV4aW5nVHlwZT4oCisgICAgICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCwKKyAgICAg
ICAgbmV3UmVsZXZhbnRMZW5ndGgpOworICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
ZGF0YSA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KCk7CisgICAgCisgICAgaWYgKGluZGV4
aW5nVHlwZSA9PSBBcnJheVdpdGhBcnJheVN0b3JhZ2UgJiYgYXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwLmdldCgpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVt
YmVycyA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdSZWxldmFudExlbmd0
aDsgKytpKSB7CisgICAgICAgIGlmICghZGF0YVtpXS5pc051bWJlcigpKSB7CisgICAgICAgICAg
ICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAg
IHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsK
KyAgICAKKyAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29y
dCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgLy8gYWxzbyBkb24ndCByZXF1aXJl
IG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAg
ICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRp
dmUgdmFsdWVzLgorICAgIHFzb3J0KGRhdGEsIG5ld1JlbGV2YW50TGVuZ3RoLCBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgcmV0dXJu
OworfQorCiB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2Fs
bERhdGEpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKQEAgLTYzMiwx
MTcgKzg0MSwxMjkgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQog
ICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZygpOwotICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJh
eVdpdGhDb250aWd1b3VzOgorICAgICAgICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdpdGhDb250
aWd1b3VzPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJz
ID0gdHJ1ZTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAg
ICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWFsbFZh
bHVlc0FyZU51bWJlcnMpCi0gICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgbnVt
ZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJn
ZXNvcnQuIFdlCi0gICAgICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFi
aWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgICAgIC8vIHNpZGUtZWZm
ZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0g
ICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7Ci0gICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBzb3J0TnVtZXJpY1ZlY3RvcjxBcnJheVdp
dGhBcnJheVN0b3JhZ2U+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
KTsKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiB9CiAKLXZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCit0ZW1w
bGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0Q29tcGFj
dGVkVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwg
dW5zaWduZWQgcmVsZXZhbnRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5n
TW9kZSgpKTsKLSAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewotICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICBpZiAoIXJlbGV2YW50TGVuZ3RoKQogICAgICAg
ICByZXR1cm47CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworCisgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJp
bmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQg
YmFzZWQgb24gdGhhdC4KKyAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50
IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBh
IGxhcmdlIHRlbXBvcmFyeQorICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1
cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRo
b2RzIHRoYXQgcmV0dXJuCisgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1
bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCiAg
ICAgICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7Ci0g
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKLSAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8g
c3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBz
b3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1w
cm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJl
cXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhp
cyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0
b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndp
c2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24g
aW5jb25zaXN0ZW50LgotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4g
dmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgICAgIGlmICghdmFsdWVz
LmJlZ2luKCkpIHsKLSAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+
IHZhbHVlcyhyZWxldmFudExlbmd0aCk7CisgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7CisgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0
cnVlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkp
OwotICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgICAgICBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUu
aXNQcmltaXRpdmUoKTsKLSAgICAgICAgfQorICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFs
dWVzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbGV2YW50TGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJlZ2luW2ldLmdldCgpOworICAgICAgICBB
U1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2
YWx1ZTsKKyAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgfQogICAgICAgICAKLSAgICAg
ICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmlu
ZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAgICAgIC8vIGEgdG9TdHJpbmcg
Y2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxv
b3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBh
ZnRlcgorICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAg
ICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQ7IGkrKykKLSAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmly
c3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZWxldmFudExlbmd0aDsgaSsrKQorICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ld
LmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOwogICAgICAgICAKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BU
ZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBIZWFwOjpoZWFwKHRoaXMp
LT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwg
YSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxk
IGJlIE8oTikgcmF0aGVyCi0gICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAvLyBGSVhN
RTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQg
YmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgIC8v
IHRoYW4gTyhOIGxvZyBOKS4KICAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgICAg
IGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgICAgICBxc29ydCh2YWx1ZXMu
YmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVC
eVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lcmdlc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0jZWxzZQotICAgICAgICAvLyBGSVhNRTog
VGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBz
b3J0LgotICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxl
IHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0Lgor
ICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCiAgICAgICAgIHFzb3J0KHZhbHVlcy5i
ZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICBlbHNlCisgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMu
YmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVC
eVN0cmluZ1BhaXJGb3JRU29ydCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGli
cmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCisgICAgLy8g
RUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJh
Y3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICBxc29ydCh2YWx1ZXMu
YmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVC
eVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJZiB0aGUgdG9TdHJp
bmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3Rv
cmFnZSwKKyAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBu
dW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgeworICAg
IGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgZW5zdXJlQ29udGlndW91c0xlbmd0
aChnbG9iYWxEYXRhLCByZWxldmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAK
LSAgICAgICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBv
ZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCi0gICAgICAgIC8vIGluY3JlYXNlIHRoZSBs
ZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAg
ICAgICBpZiAoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpIHsKLSAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgPCByZWxl
dmFudExlbmd0aCkgeworICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xv
YmFsRGF0YSgpLCByZWxldmFudExlbmd0aCk7CisgICAgICAgICAgICBiZWdpbiA9IGFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcjsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3Ro
KCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKGFycmF5
U3RvcmFnZSgpLT5sZW5ndGgoKSA8IHJlbGV2YW50TGVuZ3RoKQorICAgICAgICAgICAgYXJyYXlT
dG9yYWdlKCktPnNldExlbmd0aChyZWxldmFudExlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7IGkrKykKKyAgICAgICAgYmVnaW5baV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgCisgICAgSGVhcDo6
aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Cit9CisKK3ZvaWQgSlNBcnJh
eTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5n
TW9kZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQXJyYXlDbGFzczoKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsr
KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlc1tpXS5maXJzdCk7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWdu
ZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0
aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLCBu
ZXdSZWxldmFudExlbmd0aCk7CiAgICAgICAgIAotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5w
b3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxB
cnJheVdpdGhDb250aWd1b3VzPigKKyAgICAgICAgICAgIGV4ZWMsIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKKyAgICAgICAgdW5zaWdu
ZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgICAgIGNvbXBhY3RGb3JTb3J0aW5nPEFycmF5V2l0
aEFycmF5U3RvcmFnZT4oCisgICAgICAgICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQs
IG5ld1JlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKTsKICAgICAgICAgCisgICAgICAgIHNvcnRDb21wYWN0ZWRWZWN0b3I8QXJyYXlXaXRo
QXJyYXlTdG9yYWdlPigKKyAgICAgICAgICAgIGV4ZWMsIHN0b3JhZ2UtPm1fdmVjdG9yLCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAg
ICAKQEAgLTgyOCwxMDggKzEwNDksMTE2IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFy
cmF5Q29tcGFyZSAKICAgICBzdGF0aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAweDdGRkZGRkZG
OyB9CiB9OwogCi12b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNv
bXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0
YSkKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNv
cnRWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWlu
U3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIEFTU0VSVChpbmRleGluZ1R5cGUgPT0gc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICAvLyBG
SVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG9yIGluIHRvTnVtYmVyLgorICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9u
cyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCiAgICAgICAg
IAotICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0
IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCi0gICAgICAgIC8vIGlmIGEgbGFy
Z2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICAgICAgQVNTRVJUKGFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpOwotICAgICAgICBpZiAoYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4g
LSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAvLyBpZiBhIGxh
cmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpOworICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpLCBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkp
OwotICAgICAgICBBU1NFUlQoIWFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7Ci0gICAgICAg
IHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKKyAgICB1bnNp
Z25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFub2RlQ291bnQpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCFub2RlQ291bnQpCisg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0
b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJe
MzEgaXRlbXMKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247
Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7
Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRh
OwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAg
ICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8g
RGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCisgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9leGVjID0gZXhlYzsKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9
IGNvbXBhcmVGdW5jdGlvbjsKKyAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlw
ZSA9IGNhbGxUeXBlOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0g
JmNhbGxEYXRhOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQp
OwogICAgICAgICAKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVk
Q2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAg
ICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVu
Y3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIXRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
aWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKKyAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAK
LSAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBh
cnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgICAgIC8v
IHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhl
cmUuCisgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBh
cnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCisgICAgLy8gcmln
aHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4K
ICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgICAgICB1bnNp
Z25lZCBudW1VbmRlZmluZWQgPSAwOworICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAg
IHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CiAgICAgICAgIAotICAgICAgICAvLyBJdGVyYXRl
IG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZp
bmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAg
ICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQp
IHsKLSAgICAgICAgICAgIGlmIChudW1EZWZpbmVkID4gYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICAgICAg
aWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2Owot
ICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgaWYgKGkgPiBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAodikgewotICAgICAgICAg
ICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICsrbnVtVW5k
ZWZpbmVkOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAg
ICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgICAgICsr
bnVtRGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9CisgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBh
cnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBh
bmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgZm9yICg7IG51
bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgaWYg
KG51bURlZmluZWQgPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtu
dW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURl
ZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAg
fQorICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgaWYgKGkgPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5kZXhpbmdEYXRhPGluZGV4
aW5nVHlwZT4oKVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgIGlmICh2
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251
bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZp
bmVkKTsKKyAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKyAgICB9CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVu
Z3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLSAgICAgICAgCi0gICAgICAgIEFTU0VS
VCghYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICB1bnNpZ25lZCBuZXdVc2VkVmVj
dG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKICAgICAgICAgCi0gICAgICAg
IC8vIFRoZSBhcnJheSBzaXplIG1heSBoYXZlIGNoYW5nZWQuICBGaWd1cmUgb3V0IHRoZSBuZXcg
Ym91bmRzLgotICAgICAgICB1bnNpZ25lZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gbWluKGFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwgYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAvLyBUaGUgYXJyYXkgc2l6ZSBtYXkgaGF2ZSBjaGFuZ2VkLiAgRmlndXJlIG91dCB0aGUg
bmV3IGJvdW5kcy4KKyAgICB1bnNpZ25lZCBuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoID0gcmVsZXZh
bnRMZW5ndGg8aW5kZXhpbmdUeXBlPigpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgZWxl
bWVudHNUb0V4dHJhY3RUaHJlc2hvbGQgPSBtaW4obWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgs
IG51bURlZmluZWQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlcy5zaXplKCkpKTsKLSAgICAgICAgdW5zaWduZWQgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hv
bGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgbmV3VXNlZFZlY3Rvckxlbmd0aCk7Ci0g
ICAgICAgIHVuc2lnbmVkIGNsZWFyRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZl
Y3Rvckxlbmd0aCwgdXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIAotICAgICAgICAvLyBDb3B5
IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KLSAgICAgICAgQVZMVHJlZTxBVkxUcmVl
QWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgICAgICBp
dGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkOyArK2kpIHsKLSAgICAgICAgICAgIGFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOwotICAgICAgICAgICAgKytpdGVyOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgaSA8
IHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkOyArK2kpCi0gICAgICAgICAgICBhcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgLy8gRW5zdXJlIHRo
YXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgaSA8IGNsZWFyRWxl
bWVudHNUaHJlc2hvbGQ7ICsraSkKLSAgICAgICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltpXS5jbGVhcigpOworICAgIHVuc2lnbmVkIGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkID0g
bWluKG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCBudW1EZWZpbmVkKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpKSk7CisgICAgdW5zaWdu
ZWQgdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0
aCwgbmV3VXNlZFZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWduZWQgY2xlYXJFbGVtZW50c1RocmVz
aG9sZCA9IG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3RoLCB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAg
ICAgICAgCisgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAg
QVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBp
dGVyOworICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkOyArK2kpIHsKKyAgICAgICAgaW5kZXhp
bmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICArK2l0ZXI7CisgICAgfQor
ICAgIC8vIFB1dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7IGkgPCB1bmRlZmluZWRFbGVtZW50c1RocmVz
aG9sZDsgKytpKQorICAgICAgICBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLnNldFVu
ZGVmaW5lZCgpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVj
dG9yIGFyZSB6ZXJvZWQgb3V0LgorICAgIGZvciAodW5zaWduZWQgaSA9IHVuZGVmaW5lZEVsZW1l
bnRzVGhyZXNob2xkOyBpIDwgY2xlYXJFbGVtZW50c1RocmVzaG9sZDsgKytpKQorICAgICAgICBp
bmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLmNsZWFyKCk7CisgICAgCisgICAgaWYgKGhh
c0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKQorICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Cit9CisKK3ZvaWQgSlNBcnJh
eTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlw
ZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VSVCghaW5T
cGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgICAgIGFycmF5U3RvcmFnZSgpLT5tX251bVZhbHVlc0luVmVjdG9yID0gdW5k
ZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7CisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgor
ICAgICAgICBzb3J0VmVjdG9yPEFycmF5V2l0aENvbnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHNvcnRWZWN0b3I8QXJyYXlXaXRoQXJyYXlT
dG9yYWdlPihleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTM4LDExMyArMTE2NywxMjcgQEAgdm9pZCBKU0FycmF5Ojpz
b3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4
ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7CisgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgdW5zaWduZWQgdmVjdG9yRW5kOworICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yOworICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogeworICAgICAgICB2ZWN0b3JFbmQgPSBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZ
X1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwot
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIGZv
ciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICghdikKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPmxlbmd0aCgpOyArK2kpCi0gICAg
ICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB2ZWN0b3JFbmQgPSBtaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgdmVjdG9yID0gMDsKKyAgICAgICAg
dmVjdG9yRW5kID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGZvciAoOyBp
IDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0g
dmVjdG9yW2ldOworICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
YXJncy5hcHBlbmQodi5nZXQoKSk7CiAgICAgfQorICAgIAorICAgIGZvciAoOyBpIDwgbGVuZ3Ro
KCk7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdWludDMyX3QgbGVuZ3RoKQogeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yOworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICAK
ICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAg
ICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgdmVjdG9yRW5k
ID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgICAgIHVuc2lnbmVkIHZl
Y3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAg
Zm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAg
ICAgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOworICAgICAgICB2ZWN0b3IgPSAwOwor
ICAgICAgICB2ZWN0b3JFbmQgPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
Zm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgIGlmICghdikKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwogICAgIH0KKyAgICAK
KyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3Vt
ZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKLXVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JT
b3J0aW5nKCkKK3RlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJy
YXk6OmNvbXBhY3RGb3JTb3J0aW5nKHVuc2lnbmVkJiBudW1EZWZpbmVkLCB1bnNpZ25lZCYgbmV3
UmVsZXZhbnRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsK
KyAgICBBU1NFUlQoaW5kZXhpbmdUeXBlID09IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7
CiAKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2Ug
QXJyYXlDbGFzczoKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVu
Z3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgdW5zaWduZWQgbXlSZWxldmFudExlbmd0aCA9IHJlbGV2YW50TGVuZ3RoPGluZGV4aW5nVHlw
ZT4oKTsKKyAgICAKKyAgICBudW1EZWZpbmVkID0gMDsKKyAgICB1bnNpZ25lZCBudW1VbmRlZmlu
ZWQgPSAwOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAg
ICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgZm9yICg7IG51bURlZmluZWQgPCBt
eVJlbGV2YW50TGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gaW5k
ZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgaWYg
KCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1E
ZWZpbmVkKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0
aG91dFdyaXRlQmFycmllcih2KTsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1EZWZpbmVkOyBpIDwgbXlSZWxldmFudExlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFs
dWUgdiA9IGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uZ2V0KCk7CisgICAgICAgIGlm
ICh2KSB7CisgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAg
ICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4
aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHYpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVj
dG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLSAgICAgICAgCi0gICAgICAg
IEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOwotICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLSAgICAg
ICAgCi0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9y
TGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bURlZmluZWQ7CiAgICAgfQogICAg
ICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfQorICAgIG5ld1JlbGV2YW50TGVuZ3RoID0gbnVtRGVmaW5l
ZCArIG51bVVuZGVmaW5lZDsKKyAgICAKKyAgICBpZiAoaGFzQXJyYXlTdG9yYWdlKGluZGV4aW5n
VHlwZSkpCisgICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3UmVsZXZhbnRMZW5n
dGg7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5zZXRVbmRl
ZmluZWQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdSZWxldmFudExlbmd0aDsgaSA8IG15
UmVsZXZhbnRMZW5ndGg7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4o
KVtpXS5jbGVhcigpOwogCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKQor
ICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1JlbGV2YW50
TGVuZ3RoOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCArNzEsNjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaChFeGVjU3RhdGUqLCBKU1ZhbHVl
KTsKICAgICAgICAgSlNWYWx1ZSBwb3AoRXhlY1N0YXRlKik7CiAKLSAgICAgICAgYm9vbCBzaGlm
dENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsK
LSAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpOworICAgICAgICBlbnVtIFNoaWZ0Q291bnRNb2RlIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgZm9ybSBvZiBzaGlmdCBoaW50cyB0aGF0IHdlJ3JlIGRvaW5nIHF1ZXVl
aW5nLiBXaXRoIHRoaXMgYXNzdW1wdGlvbiBpbiBoYW5kLAorICAgICAgICAgICAgLy8gd2UgY29u
dmVydCB0byBBcnJheVN0b3JhZ2UsIHdoaWNoIGhhcyBxdWV1ZSBvcHRpbWl6YXRpb25zLgorICAg
ICAgICAgICAgU2hpZnRDb3VudEZvclNoaWZ0LAorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBUaGlzIGZvcm0gb2Ygc2hpZnQgaGludHMgdGhhdCB3ZSdyZSBqdXN0IGRvaW5nIGNhcmUgYW5k
IGZlZWRpbmcgb24gYW4gYXJyYXkgdGhhdAorICAgICAgICAgICAgLy8gaXMgcHJvYmFibHkgdHlw
aWNhbGx5IHVzZWQgZm9yIG9yZGluYXJ5IGFjY2Vzc2VzLiBXaXRoIHRoaXMgYXNzdW1wdGlvbiBp
biBoYW5kLAorICAgICAgICAgICAgLy8gd2UgdHJ5IHRvIHByZXNlcnZlIHdoYXRldmVyIGluZGV4
aW5nIHR5cGUgaXQgaGFzIGFscmVhZHkuCisgICAgICAgICAgICBTaGlmdENvdW50Rm9yU3BsaWNl
CisgICAgICAgIH07CisKKyAgICAgICAgYm9vbCBzaGlmdENvdW50Rm9yU2hpZnQoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgs
IGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAg
IH0KKyAgICAgICAgYm9vbCBzaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShleGVjLCBzdGFydEluZGV4LCBj
b3VudCk7CisgICAgICAgIH0KKyAgICAgICAgdGVtcGxhdGU8U2hpZnRDb3VudE1vZGUgc2hpZnRD
b3VudE1vZGU+CisgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHNoaWZ0Q291bnRNb2RlKSB7CisgICAgICAgICAgICBjYXNlIFNoaWZ0Q291bnRGb3JT
aGlmdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNoaWZ0KGV4ZWMsIHN0
YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGNhc2UgU2hpZnRDb3VudEZvclNwbGljZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudEZvclNwbGljZShleGVjLCBzdGFydElu
ZGV4LCBjb3VudCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIHVuc2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0
YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTcGxpY2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoZXhlYywg
c3RhcnRJbmRleCwgY291bnQpOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlPFNoaWZ0Q291
bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgorICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKHNoaWZ0Q291bnRNb2RlKSB7CisgICAgICAgICAgICBjYXNl
IFNoaWZ0Q291bnRGb3JTaGlmdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50
Rm9yU2hpZnQoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgY2FzZSBTaGlm
dENvdW50Rm9yU3BsaWNlOgorICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRGb3JT
cGxpY2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0
YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVu
dHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKQEAgLTk0LDE4ICsx
NDYsNDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yTnVsbCgpOwogICAgICAgICAgICAgaWYgKCFz
dG9yYWdlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwLmdldCgpOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5k
ZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAgICAgICAgYm9vbCBzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZSh1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKik7
CiAKLSAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRh
YmxlKTsKLQorICAgICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAg
ICAgIGJvb2wgdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Up
OwogICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIGJvb2ws
IHVuc2lnbmVkKTsKKworICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
PgorICAgICAgICB2b2lkIHNvcnROdW1lcmljVmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29t
cGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRh
KTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+
CisgICAgICAgIHZvaWQgc29ydENvbXBhY3RlZFZlY3RvcihFeGVjU3RhdGUqLCBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGJlZ2luLCB1bnNpZ25lZCByZWxldmFudExlbmd0aCk7CiAgICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZygpOworICAgICAgICB0ZW1wbGF0ZTxJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRWZWN0b3IoRXhlY1N0
YXRlKiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYp
OworCisgICAgICAgIGJvb2wgc2V0TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1
bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24sIEFycmF5U3RvcmFnZSopOwor
ICAgICAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUp
OworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4K
KyAgICAgICAgdm9pZCBjb21wYWN0Rm9yU29ydGluZyh1bnNpZ25lZCYgbnVtRGVmaW5lZCwgdW5z
aWduZWQmIG5ld1JlbGV2YW50TGVuZ3RoKTsKICAgICB9OwogCisgICAgaW5saW5lIEJ1dHRlcmZs
eSogY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgSW5kZXhpbmdIZWFkZXIgaGVhZGVy
OworICAgICAgICBoZWFkZXIuc2V0VmVjdG9yTGVuZ3RoKHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9W
RUNUT1JfTEVOKSk7CisgICAgICAgIGhlYWRlci5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAg
ICAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAg
IGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIGhlYWRlciwgaGVhZGVyLnZlY3Rvckxlbmd0aCgpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CiAgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKICAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKQEAgLTEyMSw3ICsxOTksMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNy
ZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpID09IEFycmF5V2l0aENvbnRpZ3VvdXMpKSB7CisgICAgICAgICAgICBidXR0ZXJm
bHkgPSBjcmVhdGVDb250aWd1b3VzQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExl
bmd0aCk7CisgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbExlbmd0aCA8IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZQorICAgICAg
ICAgICAgICAgICAgIHx8IChpbml0aWFsTGVuZ3RoICYmIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkgPT0gQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBj
cmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAg
fQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
QXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBi
dXR0ZXJmbHkpOwogICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAg
ICAgICAgIHJldHVybiBhcnJheTsKQEAgLTEzMywxNSArMjE5LDI2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgdm9pZCogdGVtcDsKLSAg
ICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgp
KSwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKLSAgICAgICAgKmJ1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExl
bmd0aCwgdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAw
OwotICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOwotICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICB2
b2lkKiB0ZW1wOworICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDAp
OworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1w
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICAgICAqYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0g
MDsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMx
LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fY2Fs
bGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxs
YmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX2Fy
cmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBl
OjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1f
YXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5n
ZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2FycmF5UHJvdG90eXBlLmdldCgpLCBBcnJheVdpdGhDb250
aWd1b3VzKSk7CisgICAgbV9hcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSk7CiAgICAgbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSkpOwogICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCkBAIC0zNTcsNyAr
MzU4LDcgQEAgT2JqZWN0c1dpdGhCcm9rZW5JbmRleGluZ0ZpbmRlcjo6T2JqZWN0cwogaW5saW5l
IGJvb2wgaGFzQnJva2VuSW5kZXhpbmcoSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICAvLyBUaGlz
IHdpbGwgY2hhbmdlIGlmIHdlIGhhdmUgbW9yZSBpbmRleGluZyB0eXBlcy4KLSAgICByZXR1cm4g
ISEob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2Up
OworICAgIHJldHVybiAhIShvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSAmIChI
YXNBcnJheVN0b3JhZ2UgfCBIYXNDb250aWd1b3VzKSk7CiB9CiAKIHZvaWQgT2JqZWN0c1dpdGhC
cm9rZW5JbmRleGluZ0ZpbmRlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCkBAIC00MTAsNiAr
NDExLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aGF2ZUFCYWRUaW1lKEpTR2xvYgogICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IGFsbCBKU0FycmF5IGFsbG9jYXRpb25zIHRoYXQgbG9hZCB0aGUgYXBw
cm9wcmlhdGUgc3RydWN0dXJlIGZyb20KICAgICAvLyB0aGlzIG9iamVjdCBub3cgbG9hZCBhIHN0
cnVjdHVyZSB0aGF0IHVzZXMgU2xvd1B1dC4KICAgICBtX2FycmF5U3RydWN0dXJlLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dC5nZXQoKSk7CisgICAgbV9h
cnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fYXJy
YXlTdHJ1Y3R1cmVGb3JTbG93UHV0LmdldCgpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhbGwgb2JqZWN0cyB0aGF0IGhhdmUgaW5kZXhlZCBzdG9yYWdlIHN3aXRjaCB0byB0aGUgc2xv
dyBraW5kIG9mCiAgICAgLy8gaW5kZXhlZCBzdG9yYWdlLgpAQCAtNDg1LDYgKzQ4Nyw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9uYW1lU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2FyZ3VtZW50c1N0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0KTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9ib29sZWFuT2JqZWN0U3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25hbWVTY29wZVN0
cnVjdHVyZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcmd1bWVudHNTdHJ1
Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlTdHJ1Y3R1cmU7
IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVyZUZvclNsb3dQdXQgYXMgc29vbiBh
cyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2FycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZTsgLy8gVGhpcyBnZXRzIHNl
dCB0byBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCBhcyBzb29uIGFzIHdlIGRlY2lkZSB0byBo
YXZlIGEgYmFkIHRpbWUuCiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlT
dHJ1Y3R1cmVGb3JTbG93UHV0OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Jv
b2xlYW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZTsKQEAgLTI2Nyw3ICsyNjgsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBuYW1lU2NvcGVTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX25hbWVTY29wZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBTdHJ1Y3R1cmUq
IGFyZ3VtZW50c1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzU3RydWN0dXJl
LmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX2FycmF5U3RydWN0dXJlLmdldCgpOyB9CisgICAgICAgIFN0cnVjdHVyZSogYXJyYXlT
dHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVy
ZVdpdGhBcnJheVN0b3JhZ2UuZ2V0KCk7IH0KICAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlT
dHJ1Y3R1cmUoKSB7IHJldHVybiAmbV9hcnJheVN0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiBh
ZGRyZXNzT2ZBcnJheVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2UoKSB7IHJldHVybiAmbV9hcnJh
eVN0cnVjdHVyZVdpdGhBcnJheVN0b3JhZ2U7IH0KICAgICAgICAgU3RydWN0dXJlKiBib29sZWFu
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJl
LmdldCgpOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5nZXQoKTsg
fQogICAgICAgICBTdHJ1Y3R1cmUqIGNhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAgLTQ3OSw3ICs0
ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RF
bXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4gSlNBcnJh
eTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVj
LT5nbG9iYWxEYXRhKCksIGluaXRpYWxMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA/
IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkgOiBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgpOwogICAgIH0KIAogICAgIGlu
bGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCA9IDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwyNCArMTMxLDQz
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgICAg
ICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBh
cnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjdXJyZW50U291cmNlOworICAgICAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAg
ICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChuZXdCdXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDw9IG5l
d0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpKTsKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRU
YXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBj
b3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3Vu
dC0tOykgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3Vy
Y2UrKyktPmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodmFsdWUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VGFy
Z2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAg
ICAgICAgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
OworICAgICAgICAgICAgICAgIGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwKQogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSAwOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSAwOworICAgICAgICAgICAgICAgIGNvdW50
ID0gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1
cnJlbnRTb3VyY2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
dmFsdWUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKQEAgLTE1OCw2ICsxNzcsOSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgIAogICAgICAgICAvLyBNYXJrIHRo
ZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBp
ZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCkBAIC0yMzQsNiArMjU2
LDIwIEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0g
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVl
KHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCkBAIC0zNTEsNiArMzg3LDE2IEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlz
T2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW3Byb3BlcnR5TmFtZV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
c09iamVjdCwgdmFsdWUpOworICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGJ1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChw
cm9wZXJ0eU5hbWUgKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCiAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwpAQCAtNDQzLDYgKzQ4OSwxMSBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgLy8gTk9URTogdGhpcyBpcyBob3JyaWJseSBpbmVm
ZmljaWVudCwgYXMgaXQgd2lsbCBwZXJmb3JtIHR3byBjb252ZXJzaW9ucy4gV2UgY291bGQgb3B0
aW1pemUKKyAgICAgICAgLy8gdGhpcyBjYXNlIGlmIHdlIGV2ZXIgY2FyZWQuCisgICAgICAgIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGds
b2JhbERhdGEsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOwor
ICAgICAgICBicmVhazsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAg
ICAgICBicmVhazsKQEAgLTQ2NSw2ICs1MTYsMjQgQEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJl
c2VuY2VPZkluZGV4ZWRBYwogICAgIGdsb2JhbE9iamVjdCgpLT5oYXZlQUJhZFRpbWUoZ2xvYmFs
RGF0YSk7CiB9CiAKK1dyaXRlQmFycmllcjxVbmtub3duPiogSlNPYmplY3Q6OmNyZWF0ZUluaXRp
YWxDb250aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAgIEluZGV4aW5nVHlw
ZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVT
RUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKKyAgICBBU1NFUlQo
IXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICBBU1NFUlQoIWluZGV4
aW5nU2hvdWxkQmVTcGFyc2UoKSk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjpt
YXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAg
ICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwg
QWxsb2NhdGVDb250aWd1b3VzKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0
dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKTsKK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgpCiB7CiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCk7CkBAIC00ODAsNyArNTQ5LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3Jl
YXRlQXJyYXlTdG9yYQogICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKICAgICByZXN1
bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogICAgIHJlc3VsdC0+bV9pbmRleEJpYXMgPSAw
OwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRJ
bmRleGluZ1RyYW5zaXRpb24oKSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7CiAgICAgc2V0QnV0
dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpAQCAtNDkwLDE2ICs1NTksOTYgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycgogICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKIH0KIAorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgp
Cit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgCisgICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOworICAgIAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCAw
LCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmVlZGVkTGVu
Z3RoKSk7CisgICAgCisgICAgbWVtY3B5KAorICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOworICAgIAorICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVu
Z3RoKG5lZWRlZExlbmd0aCk7CisgICAgbmV3U3RvcmFnZS0+c2V0TGVuZ3RoKHB1YmxpY0xlbmd0
aCk7CisgICAgbmV3U3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBuZXdTdG9yYWdl
LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gcHVibGljTGVuZ3RoOyBpLS07KSB7CisgICAgICAg
IEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAg
IGlmICghdikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBuZXdTdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBuZXdTdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKys7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHRyYW5zaXRpb24pOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdC
dXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ld1N0b3JhZ2U7Cit9CisKK0Fy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikK
K3sKKyAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCitBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJh
bnNpdGlvbigpKTsKK30KKworV3JpdGVCYXJyaWVyPFVua25vd24+KiBKU09iamVjdDo6ZW5zdXJl
Q29udGlndW91c1Nsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkg
fHwgc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQ29udGlndW91cyhnbG9iYWxEYXRh
LCAwKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxk
QmVTcGFyc2UoKSk7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dElu
ZGV4aW5nKCkpOworICAgICAgICByZXR1cm4gY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShnbG9iYWxEYXRhKTsKKyAgICAgICAgCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IENSQVNIKCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK0J1dHRlcmZseSogSlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRTdG9yYWdl
U2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgaWYgKFVOTElLRUxZKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygp
KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGluZGV4aW5nU2hvdWxkQmVT
cGFyc2UoKSkpCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpLT5idXR0ZXJmbHkoKTsKKyAg
ICAgICAgcmV0dXJuIEJ1dHRlcmZseTo6ZnJvbUNvbnRpZ3VvdXMoY3JlYXRlSW5pdGlhbENvbnRp
Z3VvdXMoZ2xvYmFsRGF0YSwgMCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQpAQCAtNTA3
LDYgKzY1NiwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFk
ZSB3YXkgbW9yZSBlZmZpY2llbnQsIGlmIHdlIGNhcmVkLgorICAgICAgICByZXR1cm4gZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFs
RGF0YSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAg
ICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
IHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFk
eUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAg
ICAKQEAgLTUyNiw2ICs2NzksMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJy
YXlTdG9yYQogdm9pZCBKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0
ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIFN3aXRjaFRv
U2xvd1B1dEFycmF5U3RvcmFnZSk7CkBAIC01NjksOCArNzI3LDcgQEAgdm9pZCBKU09iamVjdDo6
c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YQogICAgIGlmIChzaG91bGRVc2VTbG93UHV0KHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBu
ZXdTdHJ1Y3R1cmUsIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgc2V0U3RydWN0
dXJlKGdsb2JhbERhdGEsIG5ld1N0cnVjdHVyZSk7CisgICAgc3dpdGNoVG9TbG93UHV0QXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEpOwogfQogCiBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRo
Q3ljbGVDaGVjayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpA
QCAtNzA0LDYgKzg2MSwxNCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7
CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAg
CkBAIC04NzcsNiArMTA0MiwxNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5tX2J1dHRlcmZseTsKKyAgICAg
ICAgdW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICghYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgICAgIApAQCAtMTEwMiw5ICsxMjc4LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5k
ZXhlZFByb3BlcnR5KAogewogICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwog
ICAgIAotICAgIGlmIChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vz
c29yKSkKLSAgICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+Z2xv
YmFsRGF0YSgpKTsKLQogICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAg
ICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVn
dWxhciBhcnJheQogICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBh
c3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0
IHRvIGZhbHNlCkBAIC0xMTE0LDEwICsxMjg3LDEzIEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93
bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCAwLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVj
dEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAg
ICAgfQotCisgICAgICAgIAogICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB9CiAKKyAg
ICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCisg
ICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPmdsb2JhbERhdGEo
KSk7CisKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgIEFTU0VSVChtYXApOwogCkBAIC0xMjY2
LDYgKzE0NDIsMzUgQEAgYm9vbCBKU09iamVjdDo6YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbgog
ICAgIHJldHVybiBhc09iamVjdChwcm90b3R5cGVWYWx1ZSktPmF0dGVtcHRUb0ludGVyY2VwdFB1
dEJ5SW5kZXhPbkhvbGVGb3JQcm90b3R5cGUoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKIH0KIAordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENv
bnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOwor
ICAgIAorICAgIC8vIEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVh
dGVyIHRoYW4gdGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIG9yIGVx
dWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3RoLgorICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEK
KyAgICAgICAgfHwgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgJiYg
IWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgY291bnRFbGVtZW50c0luQ29udGlndW91cyhtX2J1
dHRlcmZseSkpKSkgeworICAgICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAg
ICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIEFsbG9jYXRl
QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5wdXRFbnRyeShleGVj
LCB0aGlzLCBpLCB2YWx1ZSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoaSA+PSBhcnJheVN0b3Jh
Z2UoKS0+bGVuZ3RoKCkpOworICAgICAgICBhcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGkgKyAx
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgo
Z2xvYmFsRGF0YSwgaSArIDEpOworCisgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKK30KKwogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCiB7
CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAt
MTM0OCwxNyArMTU1MywyOSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuCiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpKSB7Ci0gICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7Cisg
ICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgK
KyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csCisgICAgICAgICAg
ICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGdsb2JhbERhdGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpIHsKLSAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIHNob3VsZFRo
cm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJ
bmRleGluZygpKSB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBp
ICsgMSkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ir
KzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCi0gICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0gICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENv
bnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhleGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCkBAIC0xMzg0LDggKzE2MDEsMTAgQEAgdm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhN
b2RlIG1vZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KKyAgICAKICAgICAvLyBpIHNob3VsZCBi
ZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0
b3IuCisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpKTsKKyAgICBBU1NFUlQoYXJyYXlTdG9yYWdlKCkgPT0gc3RvcmFnZSk7CiAgICAgQVNTRVJU
KGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CiAgICAgQVNTRVJU
KGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKIApAQCAtMTQ2NywxNCArMTY4NiwzMiBAQCBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgCiAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzogewotICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0
ZXMpCi0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0
YSkpOwotICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKLSAg
ICAgICAgCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Ci0g
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
Ci0gICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBpZiAo
aW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgIHJl
dHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisg
ICAgICAgICAgICAgICAgZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsCisgICAgICAg
ICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA+PSBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
MCwgMCkpOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0
SW5kZXhpbmcoKSkgeworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwg
aSArIDEpKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
Kys7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgaSArIDEpW2ldLnNldChnbG9i
YWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkgeworICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSgKKyAg
ICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgIH0KKyAgICAgICAg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhl
eGVjLCBpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ5OSwx
MiArMTczNiw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAg
ICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKICAgICAgICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5j
cmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgot
ICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAq
IDEuNSkpOwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92
ZXJmbG93LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2ly
ZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgICAgICBpbmNyZWFzZWRM
ZW5ndGggPSB0aW1lc1RocmVlUGx1c09uZURpdmlkZWRCeVR3byhkZXNpcmVkTGVuZ3RoKTsKICAg
ICB9CiAKICAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwpAQCAt
MTUyNCw5ICsxNzU2LDEwIEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5l
d1YKICAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2ZWN0b3JMZW5n
dGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwotICAgICAg
ICBsZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAg
ICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxl
bmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1MzUsNiArMTc2OCwxNiBAQCBBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgcmV0dXJuIGdldE5ld1ZlY3Rv
ckxlbmd0aCh2ZWN0b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7CiB9CiAKK3Vuc2ln
bmVkIEpTT2JqZWN0Ojpjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0dGVy
Zmx5KQoreworICAgIHVuc2lnbmVkIG51bVZhbHVlcyA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBpZiAoYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICBudW1WYWx1ZXMrKzsKKyAgICB9Cisg
ICAgcmV0dXJuIG51bVZhbHVlczsKK30KKwogYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JM
ZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5j
b25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9t
IHNwYXJzZSB2YWx1ZSBtYXAKQEAgLTE1NDMsNiArMTc4NiwxMCBAQCBib29sIEpTT2JqZWN0Ojpp
bmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIAorICAgIGlmIChuZXdM
ZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAmJiAhaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihuZXdMZW5ndGgsIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5t
X2luZGV4QmlhczsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKTsKQEAgLTE1NzQsNiArMTgyMSwyMiBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmVu
c3VyZUNvbnRpZ3VvdXNMZW5ndGhTbG93KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOworICAg
IEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAg
IEFTU0VSVChsZW5ndGggPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIAorICAg
IHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKAorICAgICAgICBsZW5ndGggPDwg
MSwKKyAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisgICAgbV9idXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKKyAgICAgICAg
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKKyAg
ICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9i
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworfQorCiBCdXR0ZXJm
bHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOwpAQCAtMTYwMiw2ICsxODY1LDE3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigKICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0
LT5tX2J1dHRlcmZseTsKKyAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
dmFsdWUsIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTE2
MSw4ICsxNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjA3LDYgKzIwOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjE4LDYgKzIy
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1
bnNpZ25lZCBpKQogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjMxLDEyICsy
MzcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2KQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMjY3LDkgKzI3NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCkBAIC0yODUsOCArMjkzLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yOTYsMTUgKzMwNSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJ
bmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBKU1Zh
bHVlIG9sZCA9IHguZ2V0KCk7CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdik7CisgICAgICAgICAgICAgICAgaWYgKCFvbGQpIHsKICAgICAgICAgICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChpICsgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHgu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTMxNSw2ICszMzIsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEFTU0VSVChp
IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
aSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwpAQCAtMzMxLDYgKzM1NCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CkBAIC0zNDQsNiArMzY4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKQEAgLTU0MSw2ICs1NjYsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGZvby0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRl
eE9uSG9sZSguLi4pOwogICAgICAgICBib29sIGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhP
bkhvbGVGb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSB0aGlzVmFsdWUsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIAorICAg
ICAgICAvLyBSZXR1cm5zIDAgaWYgY29udGlndW91cyBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVk
IC0gZWl0aGVyIGJlY2F1c2UKKyAgICAgICAgLy8gaW5kZXhpbmcgc2hvdWxkIGJlIHNwYXJzZSBv
ciBiZWNhdXNlIHdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLgorICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBlbnN1cmVDb250
aWd1b3VzU2xvdyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0
b3JhZ2UuIFVzZQogICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFj
dGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQogICAgICAgICAvLyBvYmplY3QgdG8g
YmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQK
QEAgLTU1Myw2ICs1ODgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhnbG9iYWxEYXRhKTsKICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgQnV0dGVyZmx5KiBlbnN1cmVJbmRleGVkU3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoaGFzSW5kZXhlZFBy
b3BlcnRpZXMoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5z
dXJlSW5kZXhlZFN0b3JhZ2VTbG93KGdsb2JhbERhdGEpOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAK
ICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQpAQCAtNjE1LDExICs2
NTgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVB
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpOwogICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3JlYXRl
SW5pdGlhbENvbnRpZ3VvdXMoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7CisgICAgICAgIEFycmF5U3RvcmFnZSog
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAg
CiAgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKKyAgICAgICAgdm9p
ZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91c1dpdGhvdXRBdHRyaWJ1dGVz
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAgICAgICAgIHZv
aWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqKTsKIAogICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CkBAIC02MzAsNiArNjc4LDU2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKEpT
R2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQ
dXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2Fu
dCBzZXRJbmRleFF1aWNrbHkgdG8gc3VjY2VlZCBhbmQgeW91J3JlIHN1cmUgdGhhdAorICAgICAg
ICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4KKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1
b3VzTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKKyAg
ICAgICAgICAgIEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGhT
bG93KGdsb2JhbERhdGEsIGxlbmd0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICht
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBjb3VudEVsZW1lbnRzSW5Db250aWd1b3VzKEJ1dHRlcmZseSogYnV0
dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGU+CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogaW5kZXhpbmdEYXRhKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAg
ICAgICB1bnNpZ25lZCByZWxldmFudExlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1pbigK
KyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC02NjQsNyArNzYyLDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xv
dyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAg
ICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVuZ3RoU2xvdyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBB
cnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIEJ1dHRlcmZseSogZW5zdXJlSW5kZXhlZFN0b3JhZ2VTbG93KEpTR2xvYmFsRGF0YSYpOwog
ICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNp
b24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJp
bWl0aXZlQnlJbmRleChFeGVjCiAKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QK
IHsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBzaXplID0gMjU2OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwog
CiAgICAgaWYgKCEqdGhpcykKQEAgLTIxMyw5ICsyMTMsMTIgQEAgY2hhciogSlNWYWx1ZTo6ZGVz
Y3JpcHRpb24oKSBjb25zdAogICAgICAgICB1LmFzRG91YmxlID0gYXNEb3VibGUoKTsKICAgICAg
ICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICUwOHg6JTA4eCwgJWxmIiwg
dS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5kaWYK
LSAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKQotICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwg
c2l6ZSwgIkNlbGw6ICVwIiwgYXNDZWxsKCkpOwotICAgIGVsc2UgaWYgKGlzVHJ1ZSgpKQorICAg
IH0gZWxzZSBpZiAoaXNDZWxsKCkpIHsKKyAgICAgICAgc25wcmludGYoCisgICAgICAgICAgICBk
ZXNjcmlwdGlvbiwgc2l6ZSwgIkNlbGw6ICVwICglcDogJXMsICVzKSIsCisgICAgICAgICAgICBh
c0NlbGwoKSwgYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBhc0NlbGwoKS0+c3RydWN0dXJlKCktPmNs
YXNzSW5mbygpLT5jbGFzc05hbWUsCisgICAgICAgICAgICBpbmRleGluZ1R5cGVUb1N0cmluZyhh
c0NlbGwoKS0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOwor
ICAgIH0gZWxzZSBpZiAoaXNUcnVlKCkpCiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBz
aXplLCAiVHJ1ZSIpOwogICAgIGVsc2UgaWYgKGlzRmFsc2UoKSkKICAgICAgICAgc25wcmludGYo
ZGVzY3JpcHRpb24sIHNpemUsICJGYWxzZSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4
LDcgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICNpZiAhRU5BQkxFKFlBUlJfSklUKQog
ICAgIHVzZVJlZ0V4cEpJVCgpID0gZmFsc2U7CiAjZW5kaWYKLQorICAgIAogICAgIC8vIERvIHJh
bmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9wdGlv
bnM6CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0g
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICBBU1NFUlQodGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTMwNjg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDExICszMjYsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6
OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0KIH0KIAotTm9uUHJvcGVydHlUcmFuc2l0
aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkgY29uc3QKK2Jvb2wg
U3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFo
YXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGlmIChhbnlP
YmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgfHwgZ2xvYmFsT2JqZWN0
KCktPmlzSGF2aW5nQUJhZFRpbWUoKSkKKyAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUlu
dGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpCisgICAgICAgIHx8IGdsb2JhbE9iamVjdCgpLT5pc0hh
dmluZ0FCYWRUaW1lKCk7Cit9CisKK05vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1
Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdAoreworICAgIGlmIChuZWVkc1Ns
b3dQdXRJbmRleGluZygpKQogICAgICAgICByZXR1cm4gQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9y
YWdlOwogICAgIAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5U3RvcmFnZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMzA2ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU0LDcgKzE1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
Ym9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7
CiAgICAgICAgIAotICAgICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gc3VnZ2VzdGVkSW5kZXhp
bmdUcmFuc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgbmVlZHNTbG93UHV0SW5kZXhpbmco
KSBjb25zdDsKKyAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3Rv
cmFnZVRyYW5zaXRpb24oKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQog
ICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERh
dGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lv
biAxMzA2ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBzdGF0aWMgY29u
c3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpCiAvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVz
IHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4K
IC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBr
ZXkgc2hvdWxkIGJlIDAuCiBlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2Nh
dGVDb250aWd1b3VzLAogICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlLAogICAgIEFsbG9jYXRlU2xv
d1B1dEFycmF5U3RvcmFnZSwKICAgICBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UsCkBAIC01
NywxMiArNTgsMTYgQEAgaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eQog
aW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUs
IE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQogewogICAgIHN3aXRjaCAodHJhbnNp
dGlvbikgeworICAgIGNhc2UgQWxsb2NhdGVDb250aWd1b3VzOgorICAgICAgICBBU1NFUlQoIShv
bGRUeXBlICYgKEhhc0FycmF5U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKSk7Cisg
ICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQ29udGlndW91czsKICAgICBjYXNlIEFsbG9jYXRl
QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsK
KyAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0NvbnRpZ3VvdXMpIHwgSGFzQXJyYXlTdG9y
YWdlOwogICAgIGNhc2UgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1
cm4gb2xkVHlwZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xk
VHlwZSAmIH5IYXNDb250aWd1b3VzKSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgY2Fz
ZSBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVChvbGRUeXBlICYg
SGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIEhhc0NvbnRpZ3Vv
dXMpKTsKICAgICAgICAgcmV0dXJuIChvbGRUeXBlICYgfkhhc0FycmF5U3RvcmFnZSkgfCBIYXNT
bG93UHV0QXJyYXlTdG9yYWdlOwogICAgIGNhc2UgQWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAg
ICAgcmV0dXJuIG9sZFR5cGUgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRo
RXh0cmFzLmgJKHJldmlzaW9uIDEzMDY4OCkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgYm9vbCBoYXNUd29PCiAgICAgcmV0dXJuICFoYXNaZXJvT3JPbmVCaXRzU2V0KHZh
bHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNP
bmVEaXZpZGVkQnlUd28oVCB2YWx1ZSkKK3sKKyAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFs
ZW50IHRvOgorICAgIC8vICAgKHZhbHVlICogMyArIDEpIC8gMjsKKyAgICAvLyBvcjoKKyAgICAv
LyAgICh1bnNpZ25lZCljZWlsKHZhbHVlICogMS41KSk7CisgICAgLy8gVGhpcyBmb3JtIGlzIG5v
dCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUg
Pj4gMSkgKyAodmFsdWUgJiAxKTsKK30KKwogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhQ09NUElM
RVIoUlZDVCkgJiYgIU9TKFNPTEFSSVMpCiB1c2luZyBzdGQ6OmlzZmluaXRlOwogI2lmICFDT01Q
SUxFUl9RVUlSSyhHQ0MxMV9HTE9CQUxfSVNJTkZfSVNOQU4pCg==
</data>
<flag name="review"
          id="180378"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
    <flag name="commit-queue"
          id="180416"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167844</attachid>
            <date>2012-10-09 14:08:28 -0700</date>
            <delta_ts>2012-10-09 14:08:28 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>holycontiguous_15.patch</filename>
            <type>text/plain</type>
            <size>320313</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOCBA
QAorMjAxMi0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVkIHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5k
IG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIEhhaG5lbmJlcmcuCisK
KyAgICAgICAgVGhpcyBpbnRyb2R1Y2VzIGEgbmV3IGtpbmQgb2YgaW5kZXhlZCBwcm9wZXJ0eSBz
dG9yYWdlIGNhbGxlZCBDb250aWd1b3VzLAorICAgICAgICB3aGljaCBoYXMgdGhlIGZvbGxvd2lu
ZyBwcm9wZXJ0aWVzOgorICAgICAgICAKKyAgICAgICAgLSBObyBoZWFkZXIgYml0cyBiZXlvbmQg
SW5kZXhlZEhlYWRlci4gVGhpcyByZXN1bHRzIGluIGEgMTYgYnl0ZSByZWR1Y3Rpb24KKyAgICAg
ICAgICBpbiBtZW1vcnkgdXNhZ2UgcGVyIGFycmF5IHZlcnN1cyBhbiBBcnJheVN0b3JhZ2UgYXJy
YXkuIEl0IGFsc28gbWVhbnMKKyAgICAgICAgICB0aGF0IHRoZSB0b3RhbCBtZW1vcnkgdXNhZ2Ug
Zm9yIGFuIGVtcHR5IGFycmF5IGlzIG5vdyBqdXN0IDMgKiA4IG9uIGJvdGgKKyAgICAgICAgICAz
Mi1iaXQgYW5kIDY0LWJpdC4gT2YgdGhhdCwgb25seSA4IGJ5dGVzIGFyZSBhcnJheS1zcGVjaWZp
YzsgdGhlIHJlc3QgaXMKKyAgICAgICAgICBvdXIgc3RhbmRhcmQgb2JqZWN0IGhlYWRlciBvdmVy
aGVhZC4KKyAgICAgICAgCisgICAgICAgIC0gTm8gbmVlZCBmb3IgaG9sZSBjaGVja3Mgb24gc3Rv
cmUuIFRoaXMgcmVzdWx0cyBpbiBhIH40JSBzcGVlZC11cCBvbgorICAgICAgICAgIEtyYWtlbiBh
bmQgYSB+MSUgc3BlZWQtdXAgb24gVjh2Ny4KKyAgICAgICAgCisgICAgICAgIC0gcHVibGljTGVu
Z3RoIDw9IHZlY3Rvckxlbmd0aC4gVGhpcyBtZWFucyB0aGF0IGRvaW5nIG5ldyBBcnJheShibGFo
KQorICAgICAgICAgIGltbWVkaWF0ZWx5IGFsbG9jYXRlcyByb29tIGZvciBibGFoIGVsZW1lbnRz
LgorICAgICAgICAKKyAgICAgICAgLSBObyBzcGFyc2UgbWFwIG9yIGluZGV4IGJpYXMuCisgICAg
ICAgIAorICAgICAgICBJZiB5b3UgZXZlciBkbyB0aGluZ3MgdG8gYW4gYXJyYXkgdGhhdCB3b3Vs
ZCByZXF1aXJlIHB1YmxpY0xlbmd0aCA+CisgICAgICAgIHZlY3Rvckxlbmd0aCwgYSBzcGFyc2Ug
bWFwLCBvciBpbmRleCBiaWFzLCB0aGVuIHdlIHN3aXRjaCB0byBBcnJheVN0b3JhZ2UKKyAgICAg
ICAgbW9kZS4gVGhpcyBzZWVtcyB0byBuZXZlciBoYXBwZW4gaW4gYW55IGJlbmNobWFyayB3ZSB0
cmFjaywgYW5kIGlzIHVubGlrZWx5CisgICAgICAgIHRvIGhhcHBlbiB2ZXJ5IGZyZXF1ZW50bHkg
b24gYW55IHdlYnNpdGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6
OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OjphcHBlbmQpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoTWFjcm9Bc3NlbWJsZXIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hhYmxlQnJhbmNoVGVzdDMyKToKKyAgICAg
ICAgKiBieXRlY29kZS9CeVZhbEluZm8uaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjppc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6aml0QXJy
YXlNb2RlRm9ySW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6QnlWYWxJbmZvOjpCeVZhbElu
Zm8pOgorICAgICAgICAoQnlWYWxJbmZvKToKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWxJbmZvQnl0
ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldEJ5VmFsSW5mbyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtYmVyT2ZCeVZhbEluZm9zKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpudW1iZXJPZkJ5VmFsSW5mb3MpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmJ5VmFsSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmg6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmZyb21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFs
cmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAg
ICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6bW9kZVVzZXNCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVJc0pTQXJyYXkp
OgorICAgICAgICAoSlNDOjpERkc6OmlzSW5Cb3VuZHNBY2Nlc3MpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1heVN0b3JlVG9UYWlsKToKKyAgICAgICAgKEpTQzo6REZHOjptYXlTdG9yZVRvSG9sZSk6
CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzUG9seW1vcnBoaWMpOgorICAgICAgICAoSlNDOjpE
Rkc6OnBvbHltb3JwaGljSW5jbHVkZXNDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6REZHOjpw
b2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5D
U0VTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlU3VwcG9ydHNMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpERkc6OmJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpT
Qzo6REZHOjppc0VmZmVjdGZ1bCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToK
KyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6Ymxlc3NBcnJheU9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZH
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKFNwZWN1
bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cHV0QnlWYWxX
aWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcnJheVN0b3JhZ2VQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChE
RkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9y
YWdlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgorICAgICAgICAoU2FtcGxpbmdTY29wZSk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nU2NvcGU6
OlNhbXBsaW5nU2NvcGUpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Njb3BlOjp+U2FtcGxpbmdT
Y29wZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkJ5VmFsQ29tcGlsYXRpb25JbmZvOjpC
eVZhbENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChCeVZhbENvbXBpbGF0aW9uSW5mbyk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSklUKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAg
ICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QWxsb2Nh
dGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hv
bGVTcGVjaWFsQ2FzZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjphcnJheVByb2Zp
bGVTYXcpOgorICAgICAgICAoSlNDOjpKSVQ6OmNob29zZUFycmF5TW9kZSk6CisgICAgICAgICog
aml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9h
cmd1bWVudF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfYXJyYXkpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9hcmd1bWVudF9ieV92YWwpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6Z2V0QnlWYWwpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpwdXRCeVZhbCk6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlD
b252ZW50aW9ucy5oOgorICAgICAgICAoSlNDOjppc0RlbnNlRW5vdWdoRm9yVmVjdG9yKToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jUHVzaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2hpZnQp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jVW5TaGlmdCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAg
ICAgICAgKEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbVBvaW50ZXIp
OgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnBvaW50ZXIpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dmVjdG9yTGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzZXRQdWJsaWNMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6Y29udGlndW91cyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUNvbnRpZ3Vv
dXMpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNo
aWZ0KToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOgor
ICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjppbmRleGluZ1R5cGVUb1N0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc0Nv
bnRpZ3VvdXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1
bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5z
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNv
cnROdW1lcmljVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0Q29tcGFjdGVkVmVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnRWZWN0b3IpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RGb3JT
b3J0aW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c2hpZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRD
b3VudEZvclNwbGljZSk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudEZvclNo
aWZ0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50Rm9yU3BsaWNlKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6aXNMZW5ndGhXcml0YWJsZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUNvbnRpZ3VvdXNBcnJh
eUJ1dHRlcmZseSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpoYXZlQUJhZFRpbWUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAg
ICAoSlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6YXJyYXlT
dHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OmFkZHJlc3NPZkFycmF5U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdEVtcHR5QXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29u
dGlndW91cyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3Vz
VG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91
c1Nsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVJbmRleGVkU3RvcmFnZVNsb3cpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN3aXRjaFRvU2xv
d1B1dEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGUp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0
ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0TmV3
VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvdW50RWxlbWVudHNJbkNv
bnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91c0xlbmd0aFNsb3cpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRBcnJh
eUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlH
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlj
a2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1dERp
cmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6Omhhc1NwYXJzZU1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUluZGV4ZWRT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5kZXhpbmdEYXRhKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnJlbGV2YW50TGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3Bw
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlwdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5l
ZWRzU2xvd1B1dEluZGV4aW5nKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQzo6bmV3SW5kZXhpbmdUeXBl
KToKKwogMjAxMi0xMC0wOSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZnRlciByMTMwMzQ0LCBPcGFxdWVKU1N0cmluZzo6aWRlbnRpZmllcigpIGFkZHMg
d3JhcHBlZCBTdHJpbmcgdG8gaWRlbnRpZmllciB0YWJsZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAgU0VU
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5j
cHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKICAgICBydW50aW1lL0lkZW50aWZpZXIu
Y3BwCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKICAgICBydW50
aW1lL0pTQWN0aXZhdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQ
cm9maWxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmls
ZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmggXApAQCAtNTIxLDYgKzUyMiw3
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0lkZW50aWZpZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
VHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMzA4MDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAt
MjAwLDYgKzIwMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNw
cCBcCiAgICAgcnVudGltZS9PcHRpb25zLmNwcCBcCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmNw
cCBcCisgICAgcnVudGltZS9JbmRleGluZ1R5cGUuY3BwIFwKICAgICBydW50aW1lL0luaXRpYWxp
emVUaHJlYWRpbmcuY3BwIFwKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwIFwKICAg
ICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMDgw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjIsNiAr
NTIyLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5cGUuaCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CkBAIC0xNTc0LDYgKzE1NzgsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5
dGVjb2RlXENhbGxMaW5rSW5mby5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw2ICs3Niw3IEBACiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQ
dXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBD
RDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1MDAz
MkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRCRDE1
RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50
Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzRTA0QzE2MTY0
QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYxNUYxNUYxNEI3QTcz
RTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNs
b3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCAqLzsgfTsKIAkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTYwMTVCMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTE2NSw2ICsxNjYsNyBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEg
LyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5
NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAv
KiBERkdCeXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5
RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODAy
M0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyog
SlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRh
YmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3
RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRB
NEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTg1MCw2ICs4
NTIsNyBAQAogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAg
LyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRl
eGluZ1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5kZXhp
bmdUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYxNUQxNEI3QTcz
QTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVCMTU2
MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDAsNiArOTQzLDcgQEAKIAkJMEY3NzAwOEUxNDAy
RkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZH
Q0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NDYWxs
SGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMEEx
NTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIxMTQsNyArMjExOCw2IEBACiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0
aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NB
Y3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyog
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJQkMwMkU5QjgwRTE4NDU0NTAwMEY5Mjk3
IC8qIEdldHRlclNldHRlci5jcHAgKi8sCiAJCQkJQkMzMzdCREUwRTFBRjBCODAwNzY5MThBIC8q
IEdldHRlclNldHRlci5oICovLApAQCAtMjEyMiw2ICsyMTI1LDcgQEAKIAkJCQk5MzNBMzQ5QTAz
OEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovLAogCQkJCTBGQjdGMzhEMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAogCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYx
NjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRjEzRTA0QzE2
MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1RUQ4
RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVDMzAw
RDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5QkVD
MDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCkBAIC0yMjgwLDYgKzIyODQs
NyBAQAogCQkJCTE0QkZDRTY4MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCAqLywKIAkJ
CQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENC
Nzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKKwkJCQlDMkQ1OEMzMzE1
OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDg2LDYgKzI0
OTEsNyBAQAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3Bw
ICovLAogCQkJCTBGNjM5NDUyMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCAqLywK
IAkJCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICov
LAorCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKIAkJCQkw
RjBCODNBRTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJCQkwRjBC
ODNBRjE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEY5MzMyOTMx
NENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTI5NjYsNiArMjk3
Miw3IEBACiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXRE
aXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEw
QkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEw
MDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZC
MDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTM1
NzIsNiArMzU3OSw3IEBACiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNs
b3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdE
MCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTNFMDRFMTYxNjRBMUYwMERD
OERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEz
QzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
NEQzMUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTMwODA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2NCw3ICs1NjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2p1
bXBzLmFwcGVuZChqdW1wKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBhcHBl
bmQoSnVtcExpc3QmIG90aGVyKQorICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBKdW1wTGlzdCYg
b3RoZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fanVtcHMuYXBwZW5kKG90aGVyLm1fanVt
cHMuYmVnaW4oKSwgb3RoZXIubV9qdW1wcy5zaXplKCkpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksMTEgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIFBhdGNoYWJsZUp1bXAoanVtcCgpKTsKICAgICB9CisKKyAgICBQ
YXRjaGFibGVKdW1wIHBhdGNoYWJsZUJyYW5jaFRlc3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBQYXRjaGFibGVKdW1wKGJyYW5jaFRlc3QzMihjb25kLCByZWcs
IG1hc2spKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHZvaWQganVtcChMYWJlbCB0YXJnZXQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQnlWYWxJbmZvX2gKKyNkZWZpbmUgQnlWYWxJbmZvX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1
ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUg
IkpJVFN0dWJSb3V0aW5lLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEpJVEFycmF5TW9k
ZSB7IEpJVENvbnRpZ3VvdXMsIEpJVEFycmF5U3RvcmFnZSB9OworCitpbmxpbmUgYm9vbCBpc09w
dGltaXphYmxlSW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAg
c3dpdGNoIChpbmRleGluZ1R5cGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckluZGV4
aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQoreworICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3JhZ2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7
CisgICAgfQorfQorCitzdHJ1Y3QgQnlWYWxJbmZvIHsKKyAgICBCeVZhbEluZm8oKSB7IH0KKyAg
ICAKKyAgICBCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZUxvY2F0aW9uSnVt
cCBiYWRUeXBlSnVtcCwgSklUQXJyYXlNb2RlIGFycmF5TW9kZSwgaW50MTZfdCBiYWRUeXBlSnVt
cFRvRG9uZSwgaW50MTZfdCByZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAgICAgICAgOiBieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1
bXApCisgICAgICAgICwgYXJyYXlNb2RlKGFycmF5TW9kZSkKKyAgICAgICAgLCBiYWRUeXBlSnVt
cFRvRG9uZShiYWRUeXBlSnVtcFRvRG9uZSkKKyAgICAgICAgLCByZXR1cm5BZGRyZXNzVG9TbG93
UGF0aChyZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXg7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBiYWRUeXBlSnVtcDsK
KyAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlOyAvLyBUaGUgYXJyYXkgbW9kZSB0aGF0IHdhcyBi
YWtlZCBpbnRvIHRoZSBpbmxpbmUgSklUIGNvZGUuCisgICAgaW50MTZfdCBiYWRUeXBlSnVtcFRv
RG9uZTsKKyAgICBpbnQxNl90IHJldHVybkFkZHJlc3NUb1Nsb3dQYXRoOworICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Cit9OworCitpbmxpbmUgdW5zaWduZWQgZ2V0QnlW
YWxJbmZvQnl0ZWNvZGVJbmRleChCeVZhbEluZm8qIGluZm8pCit7CisgICAgcmV0dXJuIGluZm8t
PmJ5dGVjb2RlSW5kZXg7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworI2VuZGlmIC8vIEJ5VmFsSW5mb19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2RlZmluZSBDb2RlQmxvY2tfaAogCiAjaW5jbHVkZSAiQXJyYXlQcm9m
aWxlLmgiCisjaW5jbHVkZSAiQnlWYWxJbmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50
aW9ucy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNhbGxSZXR1cm5P
ZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmgiCkBAIC0yMDksNiArMjEwLDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0U3R1YihTdHJ1Y3R1
cmVTdHViSW5mbyYpOworICAgICAgICAKKyAgICAgICAgQnlWYWxJbmZvJiBnZXRCeVZhbEluZm8o
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICoo
YmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5zaWduZWQsIGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5k
ZXg+KG1fYnlWYWxJbmZvcy5iZWdpbigpLCBtX2J5VmFsSW5mb3Muc2l6ZSgpLCBieXRlY29kZUlu
ZGV4KSk7CisgICAgICAgIH0KIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5m
byhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAgLTYxMCw2ICs2
MTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1
cmVTdHViSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXpl
KTsgfQogICAgICAgICBzaXplX3QgbnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7
IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCk7IH0KICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9zdHJ1Y3R1
cmVTdHViSW5mb3NbaW5kZXhdOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldE51bWJlck9m
QnlWYWxJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX2J5VmFsSW5mb3MuZ3JvdyhzaXplKTsgfQorICAg
ICAgICBzaXplX3QgbnVtYmVyT2ZCeVZhbEluZm9zKCkgY29uc3QgeyByZXR1cm4gbV9ieVZhbElu
Zm9zLnNpemUoKTsgfQorICAgICAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyhzaXplX3QgaW5kZXgp
IHsgcmV0dXJuIG1fYnlWYWxJbmZvc1tpbmRleF07IH0KIAogICAgICAgICB2b2lkIGFkZEdsb2Jh
bFJlc29sdmVJbmZvKHVuc2lnbmVkIGdsb2JhbFJlc29sdmVJbnN0cnVjdGlvbikKICAgICAgICAg
ewpAQCAtMTI4OSw2ICsxMjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBWZWN0b3I8U3RydWN0dXJlU3R1YkluZm8+IG1fc3RydWN0dXJlU3R1
YkluZm9zOworICAgICAgICBWZWN0b3I8QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7CiAgICAgICAg
IFZlY3RvcjxHbG9iYWxSZXNvbHZlSW5mbz4gbV9nbG9iYWxSZXNvbHZlSW5mb3M7CiAgICAgICAg
IFZlY3RvcjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgVmVjdG9yPE1l
dGhvZENhbGxMaW5rSW5mbz4gbV9tZXRob2RDYWxsTGlua0luZm9zOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMTMwODA2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1NwZWN0cnVtLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU5LDEyICs4NTks
MTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKICAgICAgICAgY2FzZSBJTl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFr
ZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19D
T05USUdVT1VTX01PREVTOgogICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTA4LDYgKzkxMyw5IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkxNSw2ICs5
MjMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2Fz
ZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
OwogICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsKQEAgLTky
NCwxMSArOTMzLDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBDT05USUdV
T1VTX1RPX1RBSUxfTU9ERVM6CiAgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6CisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgICAg
ICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBB
TExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgor
ICAgICAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgorICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzY3LDcgKzEzODMsOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAg
IGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6IC8vIFRoZXNlIG9ubHkgZ2V0IGEgQ2hlY2tBcnJheSBm
b3IgR2V0QXJyYXlMZW5ndGgKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55
dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAg
ICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9u
J3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7CkBAIC0xNDEwLDkgKzE0MjgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEVGRkVDVEZVTF9O
T05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X01PREVTOgogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5jbGVhcigpOwogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4
ICszOSwxNCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwCiAgICAg
ICAgIHJldHVybiBBcnJheTo6VW5wcm9maWxlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25B
cnJheSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5t
YXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6
QmxhbmtUb0FycmF5U3RvcmFnZTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBn
byB0byBzbG93IHB1dCBtb2RlLCBvciBub3QuIFRoaXMgaXMgYSBkZWNlbnQgZ3Vlc3MuCisgICAg
ICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U7IC8v
IEZJWE1FOiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdG8gZ28gdG8gc2xvdyBwdXQgbW9kZSBvciBu
b3QuIFdlJ3JlIGd1ZXNzaW5nIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbG93IHB1dC4KICAgICAgICAg
cmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlX
aXRoQ29udGlndW91cyk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1
b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250
aWd1b3VzVG9UYWlsIDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgIGNhc2UgYXNBcnJheU1vZGVz
KEFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xl
KCkgPyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzKTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3Vz
KSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKKyAgICAgICAgcmV0dXJuIG1h
a2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDog
KHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250
aWd1b3VzVG9UYWlsIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CiAgICAg
Y2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgcmV0
dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUt
Pm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlIDogQXJyYXk6OkFy
cmF5U3RvcmFnZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZSk6CkBAIC01Niw2ICs2MiwyMCBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQo
QXJyYXlQcm9maWxlKiBwCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpOgogICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250
aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICByZXR1cm4gQXJyYXk6OkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJy
YXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFy
cmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3Vz
KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVz
KEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSk6CisgICAgICAgIHJldHVybiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JB
cnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5
OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAg
ICAgICAgICByZXR1cm4gQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOworICAgICAgICByZXR1cm4g
QXJyYXk6OlVuZGVjaWRlZDsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0Fy
cmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYg
IXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0
dXJuIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1
cm4gQXJyYXk6OlVuZGVjaWRlZDsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKICAgICAgICAgaWYgKGFjdGlv
biA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nl
cygpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOwpAQCAt
MTQ0LDYgKzE2NCwyMiBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2
CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxh
dGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91c091dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91czoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1Rh
aWw6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5n
bGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0NvbnRpZ3VvdXMpOworICAgICAgICAKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91
c091dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNDb250aWd1b3VzKQorICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKQEAgLTE3MCw3ICsyMDYsOCBAQCBib29sIG1vZGVBbHJl
YWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgKEhhc0FycmF5
U3RvcmFnZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKQogICAgICAgICAgICAgJiYgKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElz
QXJyYXkpOwogICAgICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKKyAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgY2FzZSBQT0xZTU9SUEhJ
Q19NT0RFUzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBjYXNlIEFycmF5
OjpBcmd1bWVudHM6CkBAIC0yMjUsNiArMjYyLDI0IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmlu
ZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOworICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91c1RvVGFpbDoKKyAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9UYWlsIjsK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAi
Q29udGlndW91c091dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1
b3VzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOworICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRo
Q29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
cyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAg
ICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7CisgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgorICAgICAgICByZXR1cm4gIlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKICAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZVRvSG9sZToKQEAgLTI0OSwxMCArMzA0LDIwIEBAIGNvbnN0IGNoYXIqIG1vZGVU
b1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QmxhbmtUb0NvbnRp
Z3VvdXM6CisgICAgICAgIHJldHVybiAiQmxhbmtUb0NvbnRpZ3VvdXMiOwogICAgIGNhc2UgQXJy
YXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQmxhbmtUb0FycmF5U3Rv
cmFnZSI7CiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHJldHVybiAiQmxhbmtUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6
OkJsYW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQmxhbmtU
b0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91c09y
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7
CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAg
ICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAg
ICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2UiOwog
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwog
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTUgQEAg
ZW51bSBNb2RlIHsKICAgICBTdHJpbmcsCiAgICAgCiAgICAgLy8gTW9kZXMgb2YgY29udmVudGlv
bmFsIGluZGV4ZWQgc3RvcmFnZSB3aGVyZSB0aGUgY2hlY2sgaXMgbm9uIHNpZGUtZWZmZWN0aW5n
LgorICAgIENvbnRpZ3VvdXMsCisgICAgQ29udGlndW91c1RvVGFpbCwKKyAgICBDb250aWd1b3Vz
T3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQ29udGlndW91cywKKyAgICBBcnJheVdpdGhDb250
aWd1b3VzVG9UYWlsLAorICAgIEFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKKyAgICBQ
b3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMsCisgICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzVG9UYWlsLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzLAog
ICAgIEFycmF5U3RvcmFnZSwKICAgICBBcnJheVN0b3JhZ2VUb0hvbGUsCiAgICAgU2xvd1B1dEFy
cmF5U3RvcmFnZSwKQEAgLTY4LDggKzc3LDE2IEBAIGVudW0gTW9kZSB7CiAgICAgUG9zc2libHlB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICAKICAgICAvLyBNb2RlcyBvZiBj
b252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVj
dGluZy4KKyAgICBCbGFua1RvQ29udGlndW91cywKICAgICBCbGFua1RvQXJyYXlTdG9yYWdlLAog
ICAgIEJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlLAorICAgIEJsYW5rVG9Db250aWd1b3VzT3JB
cnJheVN0b3JhZ2UsCisgICAgCisgICAgLy8gTW9kZXMgdGhhdCBpbmRpY2F0ZSBwb2x5bW9ycGhp
YyBhcnJheSBzdG9yYWdlLiBUaGVzZSBkb24ndCBiZW5lZml0IGZyb20KKyAgICAvLyBhbnkgY2hl
Y2tpbmcgb3Igc3RvcmFnZSBDU0UuCisgICAgQ29udGlndW91c09yQXJyYXlTdG9yYWdlLAorICAg
IEFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNPckFycmF5U3RvcmFnZSwKICAgICAKICAgICBBcmd1bWVudHMsCiAgICAgSW50
OEFycmF5LApAQCAtODksNiArMTA2LDMyIEBAIGVudW0gTW9kZSB7CiAvLyBoYXZlIHRoZSB3b3Jk
ICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCiAKIC8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lk
ZS1lZmZlY3RpbmcgY2hlY2tzLgorI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
VG9UYWlsOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFy
cmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAorICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisjZGVmaW5l
IEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCisj
ZGVmaW5lIEFMTF9DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCisjZGVmaW5lIElO
X0JPVU5EU19DT05USUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBB
cnJheTo6Q29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCisjZGVmaW5l
IENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWls
CisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5k
czogICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzT3V0T2ZCb3VuZHMKICNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9I
b2xlOiAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwNiwzMyArMTQ5LDQ4IEBAIGVudW0g
TW9kZSB7CiAjZGVmaW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
CisjZGVmaW5lIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAg
ICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0
b3JhZ2UKICNkZWZpbmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9I
b2xlOiAgICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZVRvSG9sZQotI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKICNkZWZpbmUgU0xPV19QVVRfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEFycmF5OjpTbG93UHV0QXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgIFwKICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKICNkZWZpbmUgT1VUX09GX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAotICAgIFNMT1dfUFVU
X0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAg
ICAgICBcCiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcwogCiAvLyBOZXh0OiBoZWxwZXJzIGZvciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0j
ZGVmaW5lIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyBcCi0gICAgQXJy
YXk6OkJsYW5rVG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFMTF9F
RkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXMKKyNkZWZpbmUgRUZGRUNURlVMX05PTl9BUlJBWV9BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgICAgICAgXAorICAgIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdl
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheTo6QmxhbmtUb1Ns
b3dQdXRBcnJheVN0b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01P
REVTICAgICAgIFwKKyNkZWZpbmUgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAg
ICAgICAgICAgICAgICAgXAogICAgIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9N
T0RFUwotI2RlZmluZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgXAor
I2RlZmluZSBTTE9XX1BVVF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAg
ICBcCiAgICAgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlCisjZGVmaW5lIFBPTFlN
T1JQSElDX0VGRkVDVEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJh
eTo6QmxhbmtUb0NvbnRpZ3VvdXNPckFycmF5U3RvcmFnZQorI2RlZmluZSBBTExfRUZGRUNURlVM
X01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQUxMX0VGRkVDVEZV
TF9DT05USUdVT1VTX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgXAorICAgIGNh
c2UgUE9MWU1PUlBISUNfRUZGRUNURlVMX01PREVTCisKKy8vIEZpbmFsbHk6IGhlbHBlcnMgZm9y
IHBvbHltb3JwaGljIGFycmF5IGFjY2Vzc2VzLgorI2RlZmluZSBQT0xZTU9SUEhJQ19NT0RFUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkNvbnRpZ3VvdXNP
ckFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6ICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c09yQXJyYXlTdG9yYWdlCisjZGVmaW5lIEFM
TF9QT0xZTU9SUEhJQ19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQ
T0xZTU9SUEhJQ19FRkZFQ1RGVUxfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVMKIAogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFy
cmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCkBAIC0xNDUsOCAr
MjAzLDEwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUg
Ym9vbCBtb2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dp
dGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgogICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgorICAgIGNhc2Ug
UE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Niw3ICsyMTYsOSBAQCBpbmxpbmUgYm9vbCBtb2Rl
VXNlc0J1dHRlcmZseShBcnJheTo6TW9kCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5
OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2Ug
QVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTOgogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9T
VE9SQUdFX01PREVTOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPckFycmF5
U3RvcmFnZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTY2LDYgKzIyOCw5IEBAIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXko
QXJyYXk6Ok1vZGUgYXIKIGlubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VO
RFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoK
KyAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKICAgICBjYXNlIElOX0JPVU5E
U19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgpAQCAtMTg0LDE4ICsyNDksNTUgQEAgaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFycmF5
OjpNb2RlIAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBDT05U
SUdVT1VTX1RPX1RBSUxfTU9ERVM6CisgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNf
TU9ERVM6CisgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgY2Fz
ZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIGlubGluZSBib29sIG1heVN0
b3JlVG9Ib2xlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgewogICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgogICAgIGNhc2UgT1VU
X09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgU0xPV19QVVRfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5l
IGJvb2wgbW9kZUlzUG9seW1vcnBoaWMoQXJyYXk6Ok1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2gg
KG1vZGUpIHsKKyAgICBjYXNlIEFMTF9QT0xZTU9SUEhJQ19NT0RFUzoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAor
aW5saW5lIGJvb2wgcG9seW1vcnBoaWNJbmNsdWRlc0NvbnRpZ3VvdXMoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQoreworICAgIEFTU0VSVF9VTlVTRUQoYXJyYXlNb2RlLCBtb2RlSXNQb2x5bW9ycGhp
YyhhcnJheU1vZGUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgcG9seW1v
cnBoaWNJbmNsdWRlc0FycmF5U3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAg
QVNTRVJUX1VOVVNFRChhcnJheU1vZGUsIG1vZGVJc1BvbHltb3JwaGljKGFycmF5TW9kZSkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpN
b2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewpAQCAtMjA0LDYgKzMw
Niw3IEBAIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXIKICAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CisgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0
OSw3ICszNTIsMTEgQEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwog
ICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogog
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19N
T0RFUzoKICAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9NT0RFUzoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3JBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3JBcnJh
eVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTI1OSw3ICszNjYsOCBAQCBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNM
ZW5ndGgoQXJyYXk6Ok1vCiBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhB
cnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VG
RkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RF
UzoKKyAgICBjYXNlIFBPTFlNT1JQSElDX01PREVTOgogICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRl
ZDoKICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKQEAgLTI3Myw3ICszODEsNyBAQCBpbmxpbmUgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVD
aGVjayhBCiBpbmxpbmUgYm9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlKQogewogICAg
IHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMDgw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTc0LDYgKzE1NzQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZVRvSG9sZToKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5
UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdl
dChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CkBAIC0xNTk3LDYgKzE1
OTksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXNPdXRPZkJvdW5kczoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczog
ewogICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwg
T3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0
ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQdXJlKG5v
ZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ09OVElH
VU9VU19UT19UQUlMX01PREVTOgogICAgICAgICAgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9U
T19IT0xFX01PREVTOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0zNTksOSArMzYwLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAvLyBmb3IgYSBzdHJ1Y3R1cmUgY2hhbmdlIG9yIGEgcHV0IHRvIHByb3BlcnR5IHN0
b3JhZ2UgdG8gYWZmZWN0CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldEJ5VmFsLgogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgICAg
ICAgICAgLy8gQSBwdXNoIGNhbm5vdCBhZmZlY3QgcHJldmlvdXNseSBleGlzdGluZyBlbGVtZW50
cyBpbiB0aGUgYXJyYXkuCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtMTIyMiw5ICsxMjIwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbDogewogICAgICAgICAgICAgRWRnZSBjaGls
ZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwogICAgICAgICAgICAgRWRnZSBjaGls
ZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgaWYgKGlzQWN0
aW9uYWJsZU11dGFibGVBcnJheVNwZWN1bGF0aW9uKG1fZ3JhcGhbY2hpbGQxXS5wcmVkaWN0aW9u
KCkpCi0gICAgICAgICAgICAgICAgJiYgbV9ncmFwaFtjaGlsZDJdLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKQotICAgICAgICAgICAgICAgICYmICFtX2dyYXBoW2NoaWxkMV0uc2hvdWxkU3BlY3Vs
YXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdlKG5vZGUuYXJy
YXlNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGdldEJ5
VmFsTG9hZEVsaW1pbmF0aW9uKGNoaWxkMS5pbmRleCgpLCBjaGlsZDIuaW5kZXgoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
bm9kZVB0ci0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGVQdHItPmNv
ZGVPcmlnaW4sIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCksIGxlbmd0aE5lZWRzU3RvcmFnZSwg
bm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBub2RlUHRyLT5j
aGlsZDEoKS5pbmRleCgpLCBOb05vZGUsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZVB0ci0+c2hv
dWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEzNywxNyArMTM3LDE3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRp
Y3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUuY2hpbGQxKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKLSAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS5jaGlsZDEoKSwgMik7CisgICAgICAgICAgICBibGVz
c0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIDIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUuY2hpbGQxKCksIDEp
OworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNo
aWxkMigpLCAxKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFsdWVU
b0ludDMyOiB7CkBAIC0zMjcsNyArMzI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtjaGlsZDFdLnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaFtjaGlsZDJdLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgMyk7CisgICAgICAgICAgICBibGVzc0FycmF5T3Bl
cmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgICAgIApAQCAt
Mzc1LDE0ICszNzUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAg
ICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2Rl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VD
aGVjaykoQXJyYXk6Ok1vZGUpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9
IHRydWUpCisgICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwgTm9kZUluZGV4IGluZGV4LCBi
b29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNo
b3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtb2RlSXNTcGVjaWZp
YyhhcnJheU1vZGUpKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKIAog
ICAgICAgICBpZiAoaXNFZmZlY3RmdWwoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgTm9kZSBh
cnJheWlmeShBcnJheWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsK
KyAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBOb05vZGUpOworICAgICAgICAgICAgbV9ncmFw
aC5yZWYoaW5kZXgpOworICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29kZU9y
aWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBpbmRleCk7CiAgICAgICAgICAgICBhcnJh
eWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNlZCBhcyBhIGJ1dHRlcmZseS4KICAg
ICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdpY2UgYmVjYXVzZSBpdCdzIG11c3Qt
Z2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXggYXJyYXlpZnlJbmRleCA9IG1fZ3JhcGgu
c2l6ZSgpOwpAQCAtNDE1LDE0ICs0MTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGFk
ZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8o
YXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElk
eCkKKyAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCB1
bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCiAgICAgewogICAgICAgICBpZiAobV9ncmFwaC5tX2Zp
eHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
OwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHItPmFycmF5TW9kZSgpID09IEFycmF5OjpG
b3JjZUV4aXQpIHsKKyAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAgICAgICAgIE5vZGUgZm9yY2VFeGl0
KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICBmb3JjZUV4
aXQucmVmKCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggZm9yY2VFeGl0SW5kZXggPSBtX2dyYXBo
LnNpemUoKTsKQEAgLTQzMCwxNSArNDMzLDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGZvcmNlRXhpdEluZGV4KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFtb2RlSXNT
cGVjaWZpYyhub2RlUHRyLT5hcnJheU1vZGUoKSkpCisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4IHN0b3JhZ2UgPSBjaGVja0FycmF5KG5vZGVQdHIt
PmFycmF5TW9kZSgpLCBub2RlUHRyLT5jb2RlT3JpZ2luLCBiYXNlLmluZGV4KCkpOwotICAgICAg
ICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0sIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICBkZWZhdWx0OiB7
CisgICAgICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGNoZWNrQXJyYXkobm9kZVB0ci0+YXJy
YXlNb2RlKCksIG5vZGVQdHItPmNvZGVPcmlnaW4sIGJhc2UuaW5kZXgoKSwgaW5kZXguaW5kZXhV
bmNoZWNrZWQoKSk7CisgICAgICAgICAgICBpZiAoc3RvcmFnZSA9PSBOb05vZGUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLmNoaWxk
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB9CiAgICAgfQogICAgIAogICAgIHZv
aWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDEyIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFy
cmF5OjpHZW5lcmljOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RF
UzoKKyAgICAgICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6CiAgICAgICAgIGNh
c2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAg
ICAgIGNhc2UgUE9MWU1PUlBISUNfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkg
PT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Niw5ICs1NTYsNyBAQCB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0g
MCkgewotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRz
aWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldElu
ZGV4UXVpY2tseShpbmRleCkpOwotICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0
cnVlKTsKKyAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTU3Myw5ICs1NzEsNyBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBl
eGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0g
ICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4UXVpY2tseShpbmRleCkpOwotICAgICAg
ICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIGFycmF5LT5wdXRC
eUluZGV4SW5saW5lKGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
ZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNjAxLDYgKzU5NywxNiBA
QCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKIH0KICAgICAgICAgCitFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcihnbG9iYWxEYXRhLCBleGVjKTsKKyAgICAKKyAgICBhcnJheS0+YnV0dGVyZmx5KCktPnNl
dFB1YmxpY0xlbmd0aChhcnJheS0+YnV0dGVyZmx5KCktPnB1YmxpY0xlbmd0aCgpICsgMSk7Cisg
ICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMpKTsKK30KKyAg
ICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCiB7CiAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpAQCAtMTMwOSw2
ICsxMzE1LDE0IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAorY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0
YSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9iamVj
dC0+ZW5zdXJlQ29udGlndW91cyhnbG9iYWxEYXRhKSk7Cit9CisKIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iamVjdCkKIHsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CkBAIC0xMzE3LDYgKzEzMzEsMTYgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25FbnN1cmVBcnJheQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3Qt
PmVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CiB9CiAKK2NoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgaW50MzJfdCBpbmRleCkKK3sKKyAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0LT5lbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihvYmplY3QtPmVuc3Vy
ZUluZGV4ZWRTdG9yYWdlKGdsb2JhbERhdGEpKTsKK30KKwogZG91YmxlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4g
Zm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3Qp
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RVNTKShFeGVjU3RhdGUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRp
b25fRVN0SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiAoKkpfREZHT3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lk
Kiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VaSWNmWikoRXhlY1N0YXRlKiwgaW50
MzJfdCwgSW5saW5lQ2FsbEZyYW1lKiwgaW50MzJfdCk7CkBAIC0xMTAsNiArMTEwLDcgQEAgdHlw
ZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPUykoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9O
ICgqUF9ERkdPcGVyYXRpb25fRU9aKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QpOwog
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3Rh
dGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCkBAIC0xNDgsNiArMTQ5LDcgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSop
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJy
YXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKEV4ZWNTdGF0
ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0NlbGwqIGJhc2UsIElkZW50aWZp
ZXIqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCog
YmFzZSwgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTE5Miw3ICsxOTQsOSBAQCBjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiBjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBuZXdT
aXplKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGlndW91cyhFeGVjU3RhdGUqLCBKU09iamVjdCopOwog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgSlNPYmplY3QqKTsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQ29udGln
dW91c09yQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCk7CiAKIC8v
IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVk
IGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20g
b25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92
ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNp
b24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0
QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsgCiAgICAgICAgIHN0dWJKaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJy
YXkpKSk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMg
fCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNDUsNiArMjA0NSwxMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJy
YW5jaChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJl
ZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkUmVnKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIAor
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcpOworICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZ1JlZywgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsK
K30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJy
YXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJS
ZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFRhZ1JlZywgR1BSUmVnIHJlc3VsdFBheWxvYWRS
ZWcpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcpOworICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0UGF5bG9hZFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnUmVnLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3Vz
UHV0QnlWYWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcpCit7
CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGlmICghbWF5
U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAg
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhh
cnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgIG1faml0LnN0b3Jl
MzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKworICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2pp
dCk7CisgICAgfQorCisgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAg
bV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAKKyAgICBpZiAo
aXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlWYWwo
Tm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdlUmVn
LCBHUFJSZWcgdmFsdWVUYWdSZWcsIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcpCit7CisgICAgQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBpZiAoaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKKyAgICBlbHNl
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOworCisgICAgLy8g
Q2hlY2sgaWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZh
bHVlc0luVmVjdG9yLgorICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgeworICAg
ICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQs
IHRoZW4gdGhlIGJhc2VsaW5lIEpJVAorICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50
IHRoZSBob2xlIHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0CisgICAgICAgIC8v
IHByb2ZpbGluZy4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworICAg
ICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2Rl
IHBhdGgsIHdlIHdvdWxkIGludmVydAorICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4g
QnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3
ZSdyZQorICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgp
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRv
IGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOworICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CisgICAg
ICAgIH0KKyAgICAgICAgbm90SG9sZVZhbHVlLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisg
ICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KKyAgICBtX2ppdC5zdG9yZTMyKHZh
bHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpKTsKKyAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgIAorICAgIHJldHVy
biBzbG93Q2FzZXM7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3AoKTsKQEAgLTI1NjUsNiArMjY3Miw1NSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBJ
Tl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIo
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Cisg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgorICAgICAgICBjYXNl
IEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAgICAgICAg
ICAgICAgICBjb21waWxlQ29udGlndW91c0dldEJ5VmFsKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5
UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFs
QXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywg
cmVzdWx0UGF5bG9hZFJlZyksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVn
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpA
QCAtMjU4Nyw2ICsyNzQzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPVVRfT0Zf
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKICAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0yNjI0LDYgKzI3ODEsNTYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElD
X01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxv
YWQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbGxUaHJvdWdoOworICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0VGFnUmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRUYWdSZWcsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCByZXN1bHRUYWdSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXND
b250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxU
aHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRUYWdSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQ29udGlndW91cykpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNHZXRCeVZhbChub2RlLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVn
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocG9seW1vcnBoaWNJbmNsdWRlc0Fy
cmF5U3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxs
VGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9q
aXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0VGFnUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUsIGJh
c2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxv
YWRSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChmYWxsVGhyb3VnaC5p
c1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcp
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbV9jb21waWxlSW5kZXgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTI3MTQsNiArMjkyMSw1NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VT
X01PREVTOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMp
OworCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1ZS50YWdHUFIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRSZWcgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
KyAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdSZWcsIGNoaWxk
MywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxk
NCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAg
ICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgeworICAgICAgICAgICAg
ICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
Mih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3Vz
UHV0QnlWYWwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVn
LCBzdG9yYWdlUmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKTsKKworICAgICAgICAg
ICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAgICAgICAgICAg
dmFsdWUudXNlKCk7CisgICAgICAgICAgICBzdG9yYWdlLnVzZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIXNsb3dDYXNlcy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnLCB2YWx1ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICBj
YXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKQEAgLTI3NDMsNjAgKzI5OTksNzkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAo
aXNJbkJvdW5kc0FjY2Vzcyhub2RlLmFycmF5TW9kZSgpKSkKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFy
cmF5Qm91bmRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUg
d3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNIb2xlVmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhl
IGJhc2VsaW5lIEpJVAotICAgICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQg
dGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKLSAgICAgICAgICAg
ICAgICAvLyBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpOwotICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2Rl
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYg
d2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5v
dCB3b3J0aCBpdCBzaW5jZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQotICAgICAgICAgICAg
ICAgICAgICAvLyBhbHJlYWR5IGhhdmluZyBhIGJhZCB0aW1lLgotICAgICAgICAgICAgICAgICAg
ICBpc0hvbGVWYWx1ZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93
aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRl
LmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm90SG9s
ZVZhbHVlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJh
eVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJv
cGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpOwogCiAg
ICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAgcHJvcGVydHkudXNlKCk7CiAgICAg
ICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7Ci0KLSAgICAg
ICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2Fk
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9k
ZSkpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwot
ICAgICAgICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghc2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAog
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBOb1Jlc3VsdCwgYmFz
ZVJlZywgcHJvcGVydHlSZWcsIHZhbHVlVGFnUmVnLCB2YWx1ZVBheWxvYWRSZWcpKTsKICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAg
ICAgICBBU1NFUlQobm9kZS5vcCgpID09IFB1dEJ5VmFsKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkUmVnID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0
aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVP
ZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVk
ZXNDb250aWd1b3VzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZh
bGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0g
bV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3Jh
Z2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2gu
aXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zywgc3RvcmFnZVJlZywgdmFsdWVUYWdSZWcsIHZhbHVlUGF5bG9hZFJlZykpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKGZhbGxUaHJvdWdoLmlzU2V0KCkpOworICAgICAgICAg
ICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
ZmFsbFRocm91Z2gpOworCisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgcHJv
cGVydHkudXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKworICAgICAgICAgICAgLy8g
RklYTUU6IHRoZSBkZWNpc2lvbiBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiBzdHJpY3QgbW9k
ZSBzaG91bGQgYmUgbWFkZQorICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIGlubGluZSBjYWxs
IGZyYW1lLCBub3QgdGhlIG1hY2hpbmUgY29kZSBibG9jay4KKyAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwK
KyAgICAgICAgICAgICAgICAgICAgTm9SZXN1bHQsIGJhc2VSZWcsIHByb3BlcnR5UmVnLCB2YWx1
ZVRhZ1JlZywgdmFsdWVQYXlsb2FkUmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yOTE5LDI1ICszMTk0LDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgCi0gICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5n
dGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxl
bmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
OgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsCisg
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIpLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBi
YXNlR1BSKSk7CisgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgIAorICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXph
cnJlIGxlbmd0aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAg
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3Jl
MzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7
CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJh
eVB1c2gsIEpTVmFsdWVSZWdzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpLCB2YWx1ZVRh
Z0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVz
aCwgSlNWYWx1ZVJlZ3Moc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiksIHZhbHVlVGFnR1BS
LCB2YWx1ZVBheWxvYWRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVS
ZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI5NDgs
NDYgKzMyNTMsODggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgdmFsdWVUYWcodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2
YWx1ZVBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRo
aXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZVRhZy5ncHIoKTsKICAgICAgICAgR1BSUmVn
IHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlUGF5bG9hZC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQ
UiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVU
YWdHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9
CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IHZhbHVlVGFnR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoCisgICAgICAgICAgICAg
ICAgdmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMy
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLAorICAgICAgICAgICAgICAgIHZhbHVlUGF5bG9h
ZEdQUik7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCB2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwK
KyAgICAgICAgICAgICAgICB2YWx1ZVRhZ0dQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisKKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRo
TW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywKKyAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRh
ZygpKSwgdmFsdWVUYWdHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5wYXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFy
cmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOworCisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwotICAgICAgICBzZXRV
bmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CisgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3Ro
R1BSKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAg
IAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1ZVRhZ0dQUik7Ci0gICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpLCB2YWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgdmFsdWVUYWdH
UFIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlUGF5bG9hZEdQUik7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwog
Ci0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgdmFs
dWVUYWdHUFIpKTsKKyAgICAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CiAKLSAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0gICAgICAgICAgICAgICAgc2V0
VW5kZWZpbmVkQ2FzZXMsIHRoaXMsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVUYWdHUFIsCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnBheWxvYWQo
KSksIHZhbHVlUGF5bG9hZEdQUikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAgICAgICAgICBzZXRV
bmRlZmluZWRDYXNlcywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgdmFsdWVUYWdHUFIsCisgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS5w
YXlsb2FkKCkpLCB2YWx1ZVBheWxvYWRHUFIpKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAg
IHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcCwKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgYmFzZUdQUikpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3As
CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIpLCBiYXNlR1BSKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwg
dmFsdWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEwOSwxMCArMjEwOSwxMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5j
aChOb2RlJiBubwogICAgIH0KIH0KIAorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcsIEdQUlJlZyBw
cm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRSZWcpCit7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKSk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIpLCByZXN1bHRSZWcpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKSk7CisgICAgCisgICAgcmV0dXJu
IHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwoTm9kZSYsIEdQUlJlZywgR1BSUmVnIHByb3Bl
cnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZykKK3sKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgCisg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJl
c3VsdFJlZyk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGhvbGUpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiBub2Rl
LCBHUFJSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2
YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpCit7CisgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0g
bm9kZS5hcnJheU1vZGUoKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIAorICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZywgdGVtcFJlZyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodGVtcFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CisKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworICAgIH0KKworICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAKKyAgICBp
ZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0KCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlUHV0QnlW
YWwoTm9kZSYgbm9kZSwgR1BSUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyBzdG9yYWdl
UmVnLCBHUFJSZWcgdmFsdWVSZWcsIEdQUlJlZyB0ZW1wUmVnKQoreworICAgIEFycmF5OjpNb2Rl
IGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlv
bmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgaWYgKGlzSW5Cb3VuZHNBY2Nl
c3MoYXJyYXlNb2RlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CisgICAgZWxzZQorICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKKworICAgIC8vIENoZWNrIGlm
IHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZl
Y3Rvci4KKyAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgLy8g
VGhpcyBpcyB1bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRo
ZSBiYXNlbGluZSBKSVQKKyAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9s
ZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAorICAgICAgICAvLyBwcm9maWxp
bmcuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2Vz
cyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4g
SWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQK
KyAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29y
dGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKKyAgICAgICAgICAgIC8vIGFs
cmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jv
d2luZyB0aGUgYXJyYXk7IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3Ro
RG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIodGVtcFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGVu
Z3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIG5v
dEhvbGVWYWx1ZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZSB0byB0aGUgYXJyYXkuCisgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcCgpOwotCisg
ICAgCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgaW5p
dENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7CkBAIC0yNTk1LDYgKzI2OTYsNTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAgICAgICBjYXNlIE9V
VF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVM
X0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQorICAgICAgICAgICAgICAgIGNvbXBpbGVD
b250aWd1b3VzR2V0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcs
IHJlc3VsdFJlZyk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI2MTUsNiArMjc2MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIGNhc2UgQUxM
X0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAt
MjYyNywyMSArMjc3NCw2NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRP
ZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlcyA9CisgICAgICAgICAgICAgICAgY29tcGlsZUFycmF5U3RvcmFnZUdldEJ5VmFsKG5vZGUs
IGJhc2VSZWcsIHByb3BlcnR5UmVnLCBzdG9yYWdlUmVnLCByZXN1bHRSZWcpOworICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAor
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJy
YXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgcmVzdWx0LmdwcigpKTsKLQorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlczsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwotICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdFJlZyk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgICAgICAgICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGlmIChwb2x5
bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5TW9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRv
bmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmFsbFRo
cm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBm
YWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVz
dWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwo
bm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHJlc3VsdFJlZykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbHltb3JwaGljSW5jbHVkZXNBcnJheVN0b3Jh
Z2Uobm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFsbFRocm91Z2gu
aXNTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIGZhbGxUaHJvdWdoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmFsbFRocm91Z2ggPSBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChub2RlLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZywgc3RvcmFnZVJlZywgcmVzdWx0UmVnKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBBU1NFUlQoZmFsbFRocm91Z2guaXNTZXQoKSk7CisgICAgICAgICAgICBkb25lQ2FzZXMu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChmYWxsVGhyb3VnaCk7
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxBcnJheUludCwKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKQEAgLTI3MzUsOCArMjkyNiw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgY2FzZSBBTExf
Q09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNf
TU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7
CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjc1Niw1
OSArMjk0Nyw3NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQotICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5
b25kQXJyYXlCb3VuZHMpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5n
IHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0hvbGVWYWx1ZTsKLSAgICAgICAgICAgIGlmICgh
bWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUgYmFzZWxp
bmUgSklUCi0gICAgICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9s
ZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAotICAgICAgICAgICAgICAgIC8v
IHByb2ZpbGluZy4KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNz
KGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0
cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQg
aW52ZXJ0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdz
IHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KLSAgICAgICAg
ICAgICAgICAgICAgaXNIb2xlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBi
ZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wb3Jhcnk7CisgICAgICAgICAgICBHUFJSZWcgdGVt
cG9yYXJ5UmVnID0gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUp
OworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KKyAg
ICAgICAgICAgICAgICBjb21waWxlQ29udGlndW91c1B1dEJ5VmFsKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgc3RvcmFnZVJlZywgdmFsdWVSZWcsIHRl
bXBvcmFyeVJlZyk7CisKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBwcm9w
ZXJ0eS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgc3RvcmFn
ZS51c2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFzbG93Q2FzZXMuZW1wdHko
KSkgeworICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJp
Y3RNb2RlKCkgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0IDogb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAg
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworCisgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgICAgIHdyaXRlQmFycmll
cihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcywgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQ
dXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRo
ZSBhcnJheS4KKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGlu
aygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub3RIb2xlVmFs
dWUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAor
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyB0
ZW1wb3JhcnlSZWcgPSB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9k
ZSk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXMgPQor
ICAgICAgICAgICAgICAgIGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbCgKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VSZWcsIHZhbHVlUmVn
LCB0ZW1wb3JhcnlSZWcpOworCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAgICAg
cHJvcGVydHkudXNlKCk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0
b3JhZ2UudXNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJy
YXkuCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLQotICAg
ICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYmV5b25kQXJyYXlCb3VuZHMpOwotICAgICAgICAgICAgICAgIGlm
IChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChpc0hvbGVWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
c2xvd0Nhc2VzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLApAQCAtMjgyMCw2ICszMDI4LDYzIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBTExfUE9MWU1PUlBISUNfTU9ERVM6IHsK
KyAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gUHV0QnlWYWwpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2Uo
dGhpcyk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcG9yYXJ5KHRoaXMpOworICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHRlbXBvcmFyeVJlZyA9IHRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWxsVGhyb3VnaDsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRl
bXBvcmFyeVJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VSZWcp
OworICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcG9y
YXJ5UmVnLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcG9yYXJ5UmVnKTsK
KyAgICAgICAgICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGlndW91cyhub2RlLmFycmF5
TW9kZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChmYWxsVGhyb3VnaC5pc1NldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmFsbFRocm91Z2gubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBmYWxsVGhyb3VnaCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgdGVtcG9yYXJ5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEhhc0NvbnRpZ3VvdXMpKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGNv
bXBpbGVDb250aWd1b3VzUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3Jh
Z2VSZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZhbGxUaHJvdWdoLmlzU2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAg
ICAgICAgICBmYWxsVGhyb3VnaC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZhbGxUaHJvdWdoID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB0ZW1wb3JhcnlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFz
QXJyYXlTdG9yYWdlKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChjb21waWxl
QXJyYXlTdG9yYWdlUHV0QnlWYWwobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcsIHN0b3JhZ2VS
ZWcsIHZhbHVlUmVnLCB0ZW1wb3JhcnlSZWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEFTU0VSVChmYWxsVGhyb3VnaC5pc1NldCgpKTsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKKwor
ICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIHByb3BlcnR5LnVzZSgpOworICAg
ICAgICAgICAgdmFsdWUudXNlKCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgZGVjaXNp
b24gb2Ygd2hldGhlciBvciBub3Qgd2UncmUgaW4gc3RyaWN0IG1vZGUgc2hvdWxkIGJlIG1hZGUK
KyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSwgbm90IHRoZSBt
YWNoaW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdCA6IG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAgICAgICAgICAg
ICAgIE5vUmVzdWx0LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZywgdmFsdWVSZWcpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2Fs
bGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czogewogICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwpAQCAtMjk3MywyNiArMzIzOCw1NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5n
cHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAg
ICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFycmF5UHVzaCwgTm9SZXN1bHQsIHN0b3JhZ2VMZW5n
dGhHUFIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAg
IAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICAv
LyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdm
ZmZmZmZlKSkpOworICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0
aHMuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFn
ZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKLSAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9q
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9y
KSkpOworICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0LCBzdG9yYWdlTGVuZ3RoR1BS
LAotICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBiYXNlR1BSKSk7CisgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2gsIE5vUmVzdWx0
LCBzdG9yYWdlTGVuZ3RoR1BSLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgYmFzZUdQ
UikpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzdG9yYWdlTGVuZ3RoR1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhH
UFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApA
QCAtMzAwMiw0MSArMzI5NSw3NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0b3JhZ2VMZW5ndGgodGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZC
b3VuZHM6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB1
bmRlZmluZWRDYXNlID0KKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigKKyAgICAg
ICAgICAgICAgICB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksCisgICAgICAgICAgICAg
ICAgdmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQ
YXRoTW92ZSgKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywKKyAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwg
dmFsdWVHUFIsIGJhc2VHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJl
c3VsdCh2YWx1ZUdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7
Ci0gICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQorICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAg
IAotICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZh
bHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BS
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0
b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgIHNldFVuZGVmaW5l
ZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2
YWx1ZUdQUikpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICBtX2ppdC5zdWIzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSk7CiAgICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAg
IHNsb3dQYXRoTW92ZSgKLSAgICAgICAgICAgICAgICBzZXRVbmRlZmluZWRDYXNlcywgdGhpcywK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAorICAgICAgICAgICAg
ICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2
YWx1ZUdQUikpOwogICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAg
ICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwgYmFzZUdQUikpOworICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkFycmF5UG9wLCB2YWx1ZUdQUiwg
YmFzZUdQUikpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodmFsdWVHUFIsIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTMyMTAsOCArMzUzOSwxNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzaXpl
R1BSID0gc2l6ZS5ncHIoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BS
UmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplLCByZXN1bHQuZ3ByKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUo
KSwgc2l6ZUdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzZWxlY3RTY3JhdGNoR1BSKHNpemVHUFIpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiaWdMZW5ndGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzaXplR1BSLCBUcnVzdGVkSW1tMzIoTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgYmlnTGVuZ3RoLmxpbmso
Jm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlKCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplLCByZXN1bHRHUFIsIHN0cnVjdHVyZUdQUiwgc2l6ZUdQUik7CisgICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2
ICszMTUsNDEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJp
bmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOT05fQVJSQVlfQ09OVElHVU9V
U19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9q
aXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7Cisg
ICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVt
cC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BS
KTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwg
U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICAvLyBG
SVhNRTogVGhpcyBjYW4gYmUgdHVybmVkIGludG8gYSBzaW5nbGUgYnJhbmNoLiBCdXQgd2UgY3Vy
cmVudGx5IGhhdmUgbm8gZXZpZGVuY2UKKyAgICAgICAgLy8gdGhhdCBkb2luZyBzbyB3b3VsZCBi
ZSBwcm9maXRhYmxlLCBub3IgZG8gSSBmZWVsIGNvbWZvcnRhYmxlIHdpdGggdGhlIHByZXNlbnQg
dGVzdAorICAgICAgICAvLyBjb3ZlcmFnZSBmb3IgdGhpcyBjb2RlIHBhdGguCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKElzQXJyYXkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0NvbnRpZ3VvdXMpKSk7CisgICAgICAg
IAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTM1Miw2
ICszODcsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgY2FzZSBQT0xZTU9SUEhJQ19NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
OChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB0dXJu
ZWQgaW50byBhIHNpbmdsZSBicmFuY2guIEJ1dCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBldmlkZW5j
ZQorICAgICAgICAvLyB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHByb2ZpdGFibGUsIG5vciBkbyBJ
IGZlZWwgY29tZm9ydGFibGUgd2l0aCB0aGUgcHJlc2VudCB0ZXN0CisgICAgICAgIC8vIGNvdmVy
YWdlIGZvciB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAgIChwb2x5bW9ycGhpY0luY2x1ZGVzQ29udGln
dW91cyhub2RlLmFycmF5TW9kZSgpKSA/IEhhc0NvbnRpZ3VvdXMgOiAwKQorICAgICAgICAgICAg
ICAgICAgICB8IChwb2x5bW9ycGhpY0luY2x1ZGVzQXJyYXlTdG9yYWdlKG5vZGUuYXJyYXlNb2Rl
KCkpID8gSGFzQXJyYXlTdG9yYWdlIDogMCkpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNf
aW5mbzsKICAgICAgICAgYnJlYWs7CkBAIC0zOTAsNzIgKzQ0OCwxMDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAgIEFTU0VSVCghbW9kZUFscmVhZHlDaGVj
a2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOwog
ICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgIAorICAgIEluZGV4aW5nVHlwZSBkZXNpcmVkSW5k
ZXhpbmdUeXBlTWFzazsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAg
ICBjYXNlIEVGRkVDVEZVTF9OT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewotICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsK
LSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICAKLSAgICAgICAg
bV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAgIGNhc2Ug
QXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBkZXNpcmVkSW5kZXhpbmdUeXBlTWFz
ayA9IEhhc0NvbnRpZ3VvdXM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkJsYW5r
VG9BcnJheVN0b3JhZ2U6CisgICAgICAgIGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrID0gSGFzQXJy
YXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvU2xvd1B1
dEFycmF5U3RvcmFnZToKKyAgICAgICAgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPSBIYXNBcnJh
eVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFycmF5OjpCbGFua1RvQ29udGlndW91c09yQXJyYXlTdG9yYWdlOgorICAgICAgICBkZXNp
cmVkSW5kZXhpbmdUeXBlTWFzayA9IEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGRl
c2lyZWRJbmRleGluZ1R5cGVNYXNrID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICAvLyBXZSBjYW4g
c2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdlIGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdl
LgotICAgICAgICBJbmRleGluZ1R5cGUgZGVzaXJlZEluZGV4aW5nVHlwZU1hc2sgPQotICAgICAg
ICAgICAgaXNTbG93UHV0QWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpID8gKEhhc0FycmF5U3RvcmFn
ZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpIDogSGFzQXJyYXlTdG9yYWdlOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdU
eXBlTWFzaykpOworICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRl
bXBHUFIpOworICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYgd2UgYWxy
ZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nh
c2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoZGVzaXJlZEluZGV4aW5nVHlwZU1hc2spKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgbV9qaXQubG9hZFB0cigKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIAotICAgICAgICBzbG93Q2FzZS5saW5rKCZt
X2ppdCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAg
ICAgICAgCi0gICAgICAgIC8vIE5leHQgY2hlY2sgdGhhdCB0aGUgb2JqZWN0IGRvZXMgbm90IGlu
dGVyY2VwdCBpbmRleGVkIGFjY2Vzc2VzLiBJZiBpdCBkb2VzLAotICAgICAgICAvLyB0aGVuIHRo
aXMgbW9kZSB3b24ndCB3b3JrLgorICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKKyAgICAKKyAg
ICAvLyBJZiB3ZSdyZSBhbGxlZ2VkbHkgY3JlYXRpbmcgY29udGlndW91cyBzdG9yYWdlIGFuZCB0
aGUgaW5kZXggaXMgYm9ndXMsIHRoZW4KKyAgICAvLyBqdXN0IGRvbid0LgorICAgIGlmIChub2Rl
LmFycmF5TW9kZSgpID09IEFycmF5OjpCbGFua1RvQ29udGlndW91cykgewogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybykpKTsKKyAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBUcnVzdGVkSW1tMzIoTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gTmV4dCBjaGVjayB0aGF0IHRoZSBvYmplY3Qg
ZG9lcyBub3QgaW50ZXJjZXB0IGluZGV4ZWQgYWNjZXNzZXMuIElmIGl0IGRvZXMsCisgICAgLy8g
dGhlbiB0aGlzIG1vZGUgd29uJ3Qgd29yay4KKyAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8pKSk7CiAgICAgICAgIAotICAgICAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRo
ZSBhcnJheSBzdG9yYWdlLgotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BS
KTsKKyAgICAvLyBOb3cgY2FsbCBvdXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgorICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9Db250aWd1b3VzOgorICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VSZWcp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpCbGFua1RvQXJyYXlTdG9yYWdlOgor
ICAgIGNhc2UgQXJyYXk6OkJsYW5rVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZyk7
Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7Ci0KLSAgICAgICAgLy8g
QWxhcywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHN0cnVjdHVyZSBiZWNhdXNlIHNpbGVudCBzcGls
bGluZyBkb2VzIG5vdCBzYXZlCi0gICAgICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQg
YmUgdXNlZnVsIGZvciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCi0gICAg
ICAgIC8vIGFib3V0IGEgbG9hZC4KLSAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICAKLSAgICAgICAgLy8gRmluYWxseSwgY2hlY2sg
dGhhdCB3ZSBoYXZlIHRoZSBraW5kIG9mIGFycmF5IHN0b3JhZ2UgdGhhdCB3ZSB3YW50ZWQgdG8g
Z2V0LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlv
biBjaGVjaywgd2hpY2ggd2lsbCByZXN1bHQgaW4gdGhlIAotICAgICAgICAvLyBieXRlY29kZSBv
cGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhl
Y3V0ZWQuCi0gICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBu
b3QgdXNlci12aXNpYmxlLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihkZXNpcmVkSW5kZXhpbmdUeXBlTWFzaykpKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNhc2UgQXJyYXk6OkJs
YW5rVG9Db250aWd1b3VzT3JBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRW5zdXJlQ29udGlndW91c09yQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZyk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBDUkFTSCgpOwogICAgICAgICBicmVhazsKICAgICB9
CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKworICAgIC8vIEFsYXMsIHdl
IG5lZWQgdG8gcmVsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVjYXVzZSBzaWxlbnQgc3BpbGxpbmcgZG9l
cyBub3Qgc2F2ZQorICAgIC8vIHRlbXBvcmFyaWVzLiBOb3Igd291bGQgaXQgYmUgdXNlZnVsIGZv
ciBpdCB0byBkbyBzby4gRWl0aGVyIHdheSB3ZSdyZSB0YWxraW5nCisgICAgLy8gYWJvdXQgYSBs
b2FkLgorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOworICAg
ICAgICAKKyAgICAvLyBGaW5hbGx5LCBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIGtpbmQgb2YgYXJy
YXkgc3RvcmFnZSB0aGF0IHdlIHdhbnRlZCB0byBnZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMg
aXMgYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24gY2hlY2ssIHdoaWNoIHdpbGwgcmVzdWx0IGluIHRo
ZSAKKyAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCisgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFy
cmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCisgICAgc3BlY3VsYXRpb25DaGVjaygK
KyAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKGRlc2lyZWRJbmRleGluZ1R5cGVNYXNrKSkpOworICAgICAgICAKKyAgICBkb25lLmxp
bmsoJm1faml0KTsKKyAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIsIG1fY29tcGlsZUluZGV4KTsK
IH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9kZUlu
ZGV4KQpAQCAtMzIwNSwxMiArMzI5OSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01P
REVTOiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0Lmdw
cigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgCisg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoK
KyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3JBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKKyAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVz
dWx0LmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgcmVzdWx0UmVn
KTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAg
ICAgICAgICAKQEAgLTMzOTksNiArMzUwNCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxl
SW5kZXgpOwogfQogCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9y
UHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIEFycmF5OjpNb2RlIGFycmF5TW9kZSkK
K3sKKyAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkpCisg
ICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZWFs
VGVtcG9yYXJ5KHRoaXMpOworICAgIHRlbXBvcmFyeS5hZG9wdChyZWFsVGVtcG9yYXJ5KTsKKyAg
ICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR1BSVGVtcG9yYXJ5Owog
Y2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNw
ZWN1bGF0aXZlSklUOwpAQCAtMTE2Niw2ICsxMTY3LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXpl
KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgb2JqZWN0LCBpbnQzMl90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVf
dCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMjE4LDExICsxMjI0LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU3RJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VTdFBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZElt
bVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xNDY4LDYgKzE0NzksMTEg
QEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1ogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgaW50MzJfdCBhcmcyKQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIo
YXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTE1MzEsMTEg
KzE1NDcsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VTdEkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyKQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsK
KyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVN0UFMgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZElt
bVB0cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0yMTQ5LDYgKzIxNzAsNTIg
QEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUm
KTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAg
ICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21w
aWxlQ29udGlndW91c0dldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3Bl
cnR5UmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFJlZyk7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VHZXRCeVZhbChOb2RlJiwgR1BS
UmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyByZXN1bHRSZWcpOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGls
ZUNvbnRpZ3VvdXNHZXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0
eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyByZXN1bHRUYWdSZWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgY29tcGlsZUFycmF5
U3RvcmFnZUdldEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVn
LCBHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHJlc3VsdFRhZ1JlZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWRSZWcpOworI2VuZGlmCisgICAgCisgICAgYm9vbCBwdXRCeVZhbFdpbGxOZWVkRXh0cmFS
ZWdpc3RlcihBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFy
cmF5TW9kZSkgeworICAgICAgICAvLyBGb3IgQXJyYXlTdG9yYWdlLCB3ZSBuZWVkIGFuIGV4dHJh
IHJlZyBmb3Igc3RvcmVzIHRvIGhvbGVzIGV4Y2VwdCBpZgorICAgICAgICAvLyB3ZSdyZSBpbiBT
bG93UHV0IG1vZGUuCisgICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgor
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBGb3IgQ29udGlndW91cywgd2UgbmVl
ZCBhbiBleHRyYSByZWcgZm9yIGFueSBhY2Nlc3MgdGhhdCBtYXkgc3RvcmUKKyAgICAgICAgLy8g
dG8gdGhlIHRhaWwuCisgICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgorICAg
ICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgY2FzZSBB
TExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAvLyBBbGwgcG9seW1vcnBoaWMgbW9kZXMgbmVlZCBhbiBl
eHRyYSByZWcuCisgICAgICAgIGNhc2UgQUxMX1BPTFlNT1JQSElDX01PREVTOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHUFJSZWcgdGVtcG9yYXJ5
UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmLCBBcnJheTo6TW9kZSk7CisgICAgR1BS
UmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3Jhcnks
IE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQ
dXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUuYXJyYXlNb2RlKCkpOworICAgIH0KKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBjb21waWxlQ29udGlndW91c1B1
dEJ5VmFsKE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcg
c3RvcmFnZVJlZywgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgdGVtcFJlZyk7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiwgR1BS
UmVnIGJhc2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJl
ZyB2YWx1ZVJlZywgR1BSUmVnIHRlbXBSZWcpOworI2Vsc2UKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgY29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcs
IEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVRhZ1Jl
ZywgR1BSUmVnIHZhbHVlUGF5bG9hZFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGNvbXBpbGVBcnJheVN0b3JhZ2VQdXRCeVZhbChOb2RlJiwgR1BSUmVnIGJhc2VSZWcsIEdQUlJl
ZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyB2YWx1ZVRhZ1JlZywgR1BS
UmVnIHZhbHVlUGF5bG9hZFJlZyk7CisjZW5kaWYKKyAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRD
aGFyQ29kZUF0KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUm
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzgsOCArNzM4
LDI1IEBAIHN0YXRpYyBpbmxpbmUgSlNPYmplY3QqIGNoZWNrZWRSZXR1cm4oSlMKICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CiB9CiAKK2NsYXNzIFNhbXBsaW5nU2NvcGUgeworcHVibGljOgorICAg
IFNhbXBsaW5nU2NvcGUoSW50ZXJwcmV0ZXIqIGludGVycHJldGVyKQorICAgICAgICA6IG1faW50
ZXJwcmV0ZXIoaW50ZXJwcmV0ZXIpCisgICAgeworICAgICAgICBpbnRlcnByZXRlci0+c3RhcnRT
YW1wbGluZygpOworICAgIH0KKyAgICB+U2FtcGxpbmdTY29wZSgpCisgICAgeworICAgICAgICBt
X2ludGVycHJldGVyLT5zdG9wU2FtcGxpbmcoKTsKKyAgICB9Citwcml2YXRlOgorICAgIEludGVy
cHJldGVyKiBtX2ludGVycHJldGVyOworfTsKKwogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShQcm9ncmFtRXhlY3V0YWJsZSogcHJvZ3JhbSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2Jq
ZWN0KiB0aGlzT2JqKQogeworICAgIFNhbXBsaW5nU2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsK
KyAgICAKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKICAgICBBU1NF
UlQoaXNWYWxpZFRoaXNPYmplY3QodGhpc09iaiwgY2FsbEZyYW1lKSk7CiAgICAgQVNTRVJUKCFz
Y29wZS0+Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24pOwpAQCAtMTEzNyw2ICsxMTU0LDggQEAgQ2Fs
bEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogCiBKU1ZhbHVlIEludGVycHJl
dGVyOjpleGVjdXRlKENhbGxGcmFtZUNsb3N1cmUmIGNsb3N1cmUpIAogeworICAgIFNhbXBsaW5n
U2NvcGUgc2FtcGxpbmdTY29wZSh0aGlzKTsKKyAgICAKICAgICBBU1NFUlQoIWNsb3N1cmUub2xk
Q2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwogICAgIGlmIChjbG9z
dXJlLm9sZENhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CkBAIC0xMTcyLDYgKzExOTEsOCBAQCB2b2lkIEludGVycHJldGVy
OjplbmRSZXBlYXRDYWxsKENhbGxGcmFtCiAKIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUo
RXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgSlNTY29wZSogc2NvcGUsIGludCBnbG9iYWxSZWdpc3Rlck9mZnNldCkKIHsKKyAgICBT
YW1wbGluZ1Njb3BlIHNhbXBsaW5nU2NvcGUodGhpcyk7CisgICAgCiAgICAgQVNTRVJUKGlzVmFs
aWRUaGlzT2JqZWN0KHRoaXNWYWx1ZSwgY2FsbEZyYW1lKSk7CiAgICAgQVNTRVJUKCFzY29wZS0+
Z2xvYmFsRGF0YSgpLT5leGNlcHRpb24pOwogICAgIEFTU0VSVCghY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIAogICAgIG1fcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4ID0gMDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCA9IDA7CiAg
ICAgbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4ID0gMDsKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4
ID0gMDsKICAgICAKQEAgLTczOCw2ICs3MzksMjAgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bgogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0
dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6
ZSgpOyArK2kpCiAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0uY29w
eVRvU3R1YkluZm8obV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpLCBwYXRjaEJ1ZmZl
cik7CisgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQnlWYWxJbmZvcyhtX2J5VmFsQ29tcGls
YXRpb25JbmZvLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnlWYWxD
b21waWxhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBi
YWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW2ldLmJhZFR5cGVKdW1wKSk7CisgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYnlWYWxDb21waWxh
dGlvbkluZm9baV0uZG9uZVRhcmdldCk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQ
YXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W2ldLnNsb3dQYXRoVGFyZ2V0KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCByZXR1cm5BZGRy
ZXNzID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2J5VmFsQ29tcGlsYXRpb25JbmZvW2ldLnJl
dHVybkFkZHJlc3MpOworICAgICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2stPmJ5VmFsSW5mbyhp
KSA9IEJ5VmFsSW5mbygKKyAgICAgICAgICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9baV0uYnl0
ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIGJhZFR5cGVKdW1wLAorICAgICAgICAgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1tpXS5hcnJheU1vZGUsCisgICAgICAgICAgICBkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoYmFkVHlwZUp1bXAsIGRvbmVUYXJnZXQpLAorICAgICAgICAgICAgZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKHJldHVybkFkZHJlc3MsIHNsb3dQYXRoVGFyZ2V0KSk7CisgICAg
fQogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9jYWxsU3RydWN0
dXJlU3R1YkNvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewogICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNiArMjY0LDI1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvcHlUb1N0dWJJbmZvKFN0cnVjdHVyZVN0
dWJJbmZvJiBpbmZvLCBMaW5rQnVmZmVyICZwYXRjaEJ1ZmZlcik7CiAgICAgfTsKIAorICAgIHN0
cnVjdCBCeVZhbENvbXBpbGF0aW9uSW5mbyB7CisgICAgICAgIEJ5VmFsQ29tcGlsYXRpb25JbmZv
KCkgeyB9CisgICAgICAgIAorICAgICAgICBCeVZhbENvbXBpbGF0aW9uSW5mbyh1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcCwg
SklUQXJyYXlNb2RlIGFycmF5TW9kZSwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVUYXJnZXQp
CisgICAgICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAg
ICwgYmFkVHlwZUp1bXAoYmFkVHlwZUp1bXApCisgICAgICAgICAgICAsIGFycmF5TW9kZShhcnJh
eU1vZGUpCisgICAgICAgICAgICAsIGRvbmVUYXJnZXQoZG9uZVRhcmdldCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBiYWRUeXBlSnVtcDsKKyAgICAgICAg
SklUQXJyYXlNb2RlIGFycmF5TW9kZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmVUYXJnZXQ7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFRhcmdldDsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgcmV0dXJuQWRkcmVzczsKKyAgICB9OworCiAg
ICAgc3RydWN0IFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm8gewogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgaG90UGF0aE90aGVyOwpAQCAtMzQ4LDYgKzM2NywyMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXg7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihz
dHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4s
IHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVHZXRCeVZhbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAg
ICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9i
eXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZUdldEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlN
b2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIGNv
ZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGJ5
VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0
dXJlICp0cmFtcG9saW5lcykKICAgICAgICAgewpAQCAtMzk3LDYgKzQzMCw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1
Y3R1cmVTdHViSW5mbyosIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCosIGludCwgU3Ry
dWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxG
cmFtZSopOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVy
ZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIsIENhbGxGcmFtZSopOwogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1
cmUqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNo
YWluKiwgUmV0dXJuQWRkcmVzc1B0ciwgYm9vbCBkaXJlY3QpOworICAgICAgICAKKyAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIs
IEpJVEFycmF5TW9kZSk7CisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogCiAgICAgICAgIFBhc3NS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvbGluZXMoSlNHbG9iYWxEYXRhKiwgVHJhbXBvbGluZVN0cnVjdHVyZSopOwogICAgICAgICBM
YWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0Nv
bnN0cnVjdCA9IGZhbHNlKTsKQEAgLTQ1Miw2ICs0ODgsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFu
ZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBBcnJheVByb2ZpbGUqKTsKICAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChSZWdpc3RlcklE
IHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVT
cGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgCisgICAgICAgIEpJVEFycmF5TW9k
ZSBjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKik7CisgICAgICAgIAorICAgICAgICAvLyBQ
cm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5k
ZXhpbmcgdHlwZS4KKyAgICAgICAgLy8gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8g
ZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLgorICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMg
YWxyZWFkeSBwcm9maWxlZC4gUmV0dXJucyB0aGUgc2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCisg
ICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHll
dCBwcm9maWxlZC4KKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0
QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGlu
IHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgorICAgICAgICAvLyBUaGUgdmFs
dWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFu
ZAorICAgICAgICAvLyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0
dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuCisgICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2Fz
ZXMuCisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAKICAg
ICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07
CiAKQEAgLTg3MCw2ICs5MjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPENh
bGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgICAgIFZlY3RvcjxMYWJlbD4gbV9sYWJlbHM7CiAgICAg
ICAgIFZlY3RvcjxQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8+IG1fcHJvcGVydHlBY2Nlc3ND
b21waWxhdGlvbkluZm87CisgICAgICAgIFZlY3RvcjxCeVZhbENvbXBpbGF0aW9uSW5mbz4gbV9i
eVZhbENvbXBpbGF0aW9uSW5mbzsKICAgICAgICAgVmVjdG9yPFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm8+IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm87CiAgICAgICAgIFZl
Y3RvcjxNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvPiBtX21ldGhvZENhbGxDb21waWxhdGlvbklu
Zm87CiAgICAgICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fam1wVGFibGU7CkBAIC04NzksNiArOTMy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dp
dGNoZXM7CiAKICAgICAgICAgdW5zaWduZWQgbV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXg7CisgICAgICAgIHVuc2lnbmVkIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4OwogICAgICAgICB1
bnNpZ25lZCBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fY2Fs
bExpbmtJbmZvSW5kZXg7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDIzICs0NDcs
MjIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZwogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVu
c2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VS
ZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0ciwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewotICAg
IHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIDRVKTsKLSAgICBzaXpl
X3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IoaW5pdGlhbExlbmd0aCkpOworICAgIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CisgICAgc2l6ZV90IGlu
aXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgaW5pdGlhbExl
bmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworCisgICAgbG9hZFB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCksIHNjcmF0Y2gpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSkp
OwogCiAgICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJl
IHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBK
U0FycmF5IGluaXRpYWxpemF0aW9uLgogICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0
aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3VsdCk7CiAKICAg
ICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhlIGFycmF5LgotICAgIGxvYWRQdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZBcnJheVN0cnVjdHVyZSgpLCBzY3JhdGNo
KTsKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJyYXksIE1hcmtlZEJsb2NrOjpO
b25lPihzY3JhdGNoLCBjZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsKIAotICAgIC8vIFN0b3JlIGFs
bCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIEFycmF5U3RvcmFnZS4KLSAgICBzdG9yZTMyKElt
bTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVz
dWx0LCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKLSAgICBzdG9y
ZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigw
KSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OmluZGV4Qmlhc09mZnNldCgp
KSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0
LCBBcnJheVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNldCgpKSk7CisgICAgLy8gU3RvcmUgYWxsIHRo
ZSBuZWNlc3NhcnkgaW5mbyBpbiB0aGUgaW5kZXhpbmcgaGVhZGVyLgorICAgIHN0b3JlMzIoSW1t
MzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKTsKKyAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogCiAg
ICAgLy8gU3RvcmUgdGhlIG5ld2x5IGFsbG9jYXRlZCBBcnJheVN0b3JhZ2UuCiAgICAgc3RvcmVQ
dHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpKTsKQEAgLTQ3MiwxMiArNDcxLDEyIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFs
bG9jYXRlSlNBcnJheSh1bnMKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0
b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VS
ZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSAqIGkpKTsKKyAgICAgICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwgQWRkcmVzcyhz
dG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKICNlbHNl
CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0
ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAgc3RvcmUz
MihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKKyAgICAgICAg
c3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICogaSkpOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9m
KHVpbnQzMl90KSksIHN0b3JhZ2VQdHIpOwotICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFk
ZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKKyAgICAg
ICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKICNlbmRpZgogICAg
IH0KIH0KQEAgLTU2MSwxMCArNTYwLDI1IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZUYKIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hv
bGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKIHsKLSAgICBpZiAoIWNh
bkJlT3B0aW1pemVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyNpZiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpICAgIAogICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBi
b29sIGFycmF5UHJvZmlsZVNhdyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEluZGV4aW5nVHlwZSBj
YXBhYmlsaXR5KQoreworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICByZXR1cm4gISEo
cHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCkgJiAoYXNBcnJheU1vZGVzKE5vbkFycmF5IHwg
Y2FwYWJpbGl0eSkgfCBhc0FycmF5TW9kZXMoQXJyYXlDbGFzcyB8IGNhcGFiaWxpdHkpKSk7Cisj
ZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgSklUQXJyYXlNb2Rl
IEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKK3sKKyAgICBpZiAo
YXJyYXlQcm9maWxlU2F3KHByb2ZpbGUsIEhhc0FycmF5U3RvcmFnZSkpCisgICAgICAgIHJldHVy
biBKSVRBcnJheVN0b3JhZ2U7CisgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7CiB9CiAKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgwLDcgKzE2
ODAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgZW1p
dFN0b3JlKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHMpLCByZWdUMSwgcmVn
VDApOwogICAgIAogICAgIHNraXBBcmd1bWVudHNDcmVhdGlvbi5saW5rKHRoaXMpOwotICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKKyAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChhcmd1bWVudHMpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHBy
b3BlcnR5KTsKICAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGRzdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEzMDgw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NjUsNyArMTU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYXJn
dW1lbnRfYnlfdmEKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVubW9kaWZpZWRBcmd1bWVu
dHNSZWdpc3Rlcihhcmd1bWVudHMpKTsKICAgICAKICAgICBza2lwQXJndW1lbnRzQ3JlYXRpb24u
bGluayh0aGlzKTsKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfZ2V0X2J5
X3ZhbCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWxf
Z2VuZXJpYyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYXJndW1lbnRzLCByZWdUMik7CiAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKICAgICBzdHViQ2FsbC5j
YWxsV2l0aFZhbHVlUHJvZmlsaW5nKGRzdCk7CkBAIC0xNjYxLDcgKzE2NjEsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgbGVuZ3Ro
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGxlbmd0aCkpKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmlzSGF2aW5nQUJhZFRpbWUoKQorICAgICAgICB8fCBDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bGVuZ3RoKSkpKSB7CiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9u
ZXdfYXJyYXkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAt
MTY4MCw4ICsxNjgxLDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfYXJyYXkoSW5zdHJ1
Y3QKICAgICAvLyBJZiB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6ZSwgd2Ugd2lsbCBh
bHJlYWR5IG1ha2UgdGhlIHByb3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAgICAgLy8gZW1pdF9v
cF9uZXdfYXJyYXkuCiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpCisgICAgaWYg
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpCisgICAgICAg
IHx8IENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFdlJ3JlIGhhdmluZyBhIGJhZCB0aW1lLgogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRTcGFjZSBmb3Ig
c3RvcmFnZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4g
TWFya2VkU3BhY2UgZm9yIGNlbGwuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTMwODA2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA0LDI3ICsyMDQsNzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEs
IHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykp
KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZShyZWdUMSwgcmVnVDMsIHByb2ZpbGUpOworCisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAg
IGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3Rv
cmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KICAgICAKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRhZwotICAgIGxv
YWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkp
OworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
CiAgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgcmVz
dWx0T0subGluayh0aGlzKTsKKyNlbmRpZgorCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgbWFwKG1fYnl0ZWNvZGVP
ZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpLCBkc3QsIHJlZ1QxLCByZWdUMCk7
CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0z
MihIYXNDb250aWd1b3VzKSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgCisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVnVDEpOyAvLyB0YWcKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwg
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVnVDApOyAvLyBwYXlsb2FkCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgIAorICAg
IHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xv
d1B1dEFycmF5U3RvcmFnZSkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdU
MSk7IC8vIHRhZworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30K
KyAgICAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAg
LTI0OCwxMCArMjk5LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3Ry
dWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCisgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworICAgIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSk7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAg
IENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsKKworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0
dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIAogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKIH0KQEAgLTI2MCwyMCArMzE3LDgyIEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0
eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICAKICAgICBl
bWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKICAg
ICAKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QxLCBy
ZWdUMywgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3Jh
Z2UpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHJlZ1QxLCByZWdUMywgcHJvZmlsZSk7Cisg
ICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICAKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsK
KyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgYWRkU2xvd0Nhc2Uo
YmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBk
b25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25l
KSk7Cit9CiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c1B1dEJ5VmFsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7Cisg
ICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZTsKKyAgICAKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1c3RlZEltbTMyKEhhc0NvbnRp
Z3VvdXMpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7CisgICAgCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwor
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOworICAgIHN0b3JlMzIocmVnVDAsIEJh
c2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIAorICAgIG91dE9mQm91bmRzLmxp
bmsodGhpcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7
CisgICAgCisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmls
ZSk7CisgICAgCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDEpOworICAg
IHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOworICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIAor
ICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAKICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCBy
ZWdUMSwgcmVnVDEsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJp
ZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CiAgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwor
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHVuc2ln
bmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Cisg
ICAgCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2Up
KTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChy
ZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICAgICAKICAgICBMYWJlbCBzdG9y
ZVJlc3VsdCh0aGlzKTsKQEAgLTI4Myw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAgZW1w
dHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUpOworICAgIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwogICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3Mo
cmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOwogICAgIApAQCAtMjkyLDYgKzQxMSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uCiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7
CiAgICAgCiAgICAgZW5kLmxpbmsodGhpcyk7CisgICAgCisgICAgZW1pdFdyaXRlQmFycmllcihy
ZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC0zMDMsMTMgKzQyNiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAg
IGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbiB2ZWN0b3IgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIG91dCBvZiBib3VuZHMKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
CiAgICAgCiAgICAgSklUU3R1YkNhbGwgc3R1YlB1dEJ5VmFsQ2FsbCh0aGlzLCBjdGlfb3BfcHV0
X2J5X3ZhbCk7CiAgICAgc3R1YlB1dEJ5VmFsQ2FsbC5hZGRBcmd1bWVudChiYXNlKTsKICAgICBz
dHViUHV0QnlWYWxDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5KTsKICAgICBzdHViUHV0QnlWYWxD
YWxsLmFkZEFyZ3VtZW50KHZhbHVlKTsKLSAgICBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAg
ICBDYWxsIGNhbGwgPSBzdHViUHV0QnlWYWxDYWxsLmNhbGwoKTsKKyAgICAKKyAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9
IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4
Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICB1bnNp
Z25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVk
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIHVuc2lnbmVkIHBy
b3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKQEAgLTEx
MSwxNyArMTEyLDY0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
IAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGUpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlKHJlZ1QyLCByZWdUMywgcHJvZmlsZSk7CiAKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIFBhdGNoYWJsZUp1bXAgYmFk
VHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChy
ZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBy
ZWdUMCkpOworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUp
OworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2Fz
ZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOworICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBKdW1wIHJl
c3VsdE9LID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCk7CisgICAgYnJlYWtwb2ludCgp
OworICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7CisjZW5kaWYKIAogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRl
Y29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1
b3VzKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJl
Z1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsK
KyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSB8IEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgIGxvYWRQdHIoQmFzZUluZGV4
KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7
CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NiwxMCArMTk0LDE2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5
IHZhbHVlCiAgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAgIAogICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFsKTsKICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChiYXNlLCByZWdUMik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocHJv
cGVydHksIHJlZ1QyKTsKLSAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CisgICAgQ2FsbCBjYWxsID0g
c3R1YkNhbGwuY2FsbChkc3QpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0g
Y2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogCiAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSgpOwogfQpAQCAtMjI5LDcgKzI4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWwoSW5zdHJ1Y3Rpb24KIHsKICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwpAQCAtMjM3LDEwICsyOTEsNzIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIHplcm9FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShyZWdUMiwgcmVnVDMsIGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUocmVnVDIsIHJlZ1QzLCBwcm9maWxlKTsKKyAgICAK
KyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IAorICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBhZGRTbG93Q2FzZShiYWRU
eXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFs
Q29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsK
KworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QzLCByZWdUMSwgcmVnVDMsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKK30KKwor
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICB1bnNpZ25l
ZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAg
IAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CisgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJl
Z1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0cikpOworICAgIAorICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKyAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgIAorICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5n
dGgoKSkpKTsKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2Fz
ZShwcm9maWxlKTsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdU
Myk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7
CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7
Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAg
ICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlOworICAgIAorICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0g
cGF0Y2hhYmxlQnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlT
dG9yYWdlKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOwogCiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUlu
ZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpOwogCkBAIC0yNTAsOCArMzY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAg
IGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lh
bENhc2UoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlKTsKLSAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9I
b2xlU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRy
ZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKICAg
ICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7CkBAIC0yNjAsOCArMzc2LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOwogCiAgICAgZW5kLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKHJl
Z1QwLCByZWdUMywgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJh
cnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisgICAgCisgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTI3
MywxMyArMzg5LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawogICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKLSAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIGluIHZlY3RvciBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gb3V0IG9mIGJvdW5kcworICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKIAog
ICAgIEpJVFN0dWJDYWxsIHN0dWJQdXRCeVZhbENhbGwodGhpcywgY3RpX29wX3B1dF9ieV92YWwp
OwogICAgIHN0dWJQdXRCeVZhbENhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJQdXRC
eVZhbENhbGwuYWRkQXJndW1lbnQocHJvcGVydHksIHJlZ1QyKTsKICAgICBzdHViUHV0QnlWYWxD
YWxsLmFkZEFyZ3VtZW50KHZhbHVlLCByZWdUMik7Ci0gICAgc3R1YlB1dEJ5VmFsQ2FsbC5jYWxs
KCk7CisgICAgQ2FsbCBjYWxsID0gc3R1YlB1dEJ5VmFsQ2FsbC5jYWxsKCk7CisKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdl
dCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4Kys7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pbmRleChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjU5LDcgKzc4MSw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZUZvckJ5dGVjb2RlSW5kZXgocmVnVDIsIHJlZ1QxLCBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCk7
CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoSXNBcnJheSkpOwotICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpOworICAgIEp1bXAg
ZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEhh
c0FycmF5U3RvcmFnZSB8IEhhc0NvbnRpZ3VvdXMpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2th
eSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CkBAIC0xMjc3LDYg
KzEzOTksNzQgQEAgYm9vbCBKSVQ6OmlzRGlyZWN0UHV0QnlJZChTdHJ1Y3R1cmVTdHViSQogICAg
IH0KIH0KIAordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7Cisg
ICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSklUQ29udGlndW91czoK
KyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFn
ZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJh
ZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUoKSkubGFiZWxBdE9m
ZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKHJldHVybkFkZHJlc3MudmFsdWUo
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Cisg
ICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBw
YXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfdmFsIHN0dWIgZm9yIENvZGVC
bG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFs
dWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9j
ayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5i
ZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVC
bG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25M
YWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbChyZXR1cm5BZGRyZXNzLnZhbHVlKCkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVy
LmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAg
ICgiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2lu
dCAlcCIsIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1
dF9ieV92YWxfZ2VuZXJpYykpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAko
cmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5o
IgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIK
ICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0y
NDE0LDYgKzI0MTUsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAorc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwo
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQoreworICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgICAg
ICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9w
ZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoc3Vic2NyaXB0Lmlz
VUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwor
ICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmNhbkdldEluZGV4KGkpKSB7CisgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV92YWxfc3RyaW5nKSk7CisgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFz
ZVZhbHVlKS0+Z2V0SW5kZXgoY2FsbEZyYW1lLCBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOworICAgIH0KKworICAgIGlmIChpc05hbWUo
c3Vic2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZS5nZXQoY2FsbEZyYW1lLCBqc0Nh
c3Q8TmFtZUluc3RhbmNlKj4oc3Vic2NyaXB0LmFzQ2VsbCgpKS0+cHJpdmF0ZU5hbWUoKSk7CisK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNh
bGxGcmFtZSktPnZhbHVlKGNhbGxGcmFtZSkpOworICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGNh
bGxGcmFtZSwgcHJvcGVydHkpOworfQorCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfZ2V0X2J5X3ZhbCkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CkBAIC0yNDIzLDM1ICsyNDQ4LDQ0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
anNWYWx1ZSgpOwogICAgIAotICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1
YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNl
VmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1
YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKLSAgICAg
ICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU1N0
cmluZyhiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7
Ci0gICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV92
YWxfc3RyaW5nKSk7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VW
YWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7Ci0gICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAg
ICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyB0aGlzIGF0IGFsbC4KKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KTsKKyAgICAgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Cisg
ICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihTVFVCX1JFVFVSTl9B
RERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9nZW5lcmljKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0Rm9y
Tm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2V0
QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5n
VHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgICAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5TW9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgSklUOjpjb21waWxlR2V0QnlWYWwoJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVCX1JFVFVSTl9BRERSRVNT
LCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwotICAgICAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CisgICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChjYWxsRnJhbWUsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKKyAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorICAgIAor
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dldF9ieV92YWxfZ2VuZXJp
YykKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAo
aXNOYW1lKHN1YnNjcmlwdCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
Z2V0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwoKSkt
PnByaXZhdGVOYW1lKCkpOwotICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKIAotICAgIElkZW50aWZpZXIgcHJvcGVy
dHkoY2FsbEZyYW1lLCBzdWJzY3JpcHQudG9TdHJpbmcoY2FsbEZyYW1lKS0+dmFsdWUoY2FsbEZy
YW1lKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGNhbGxGcmFtZSwgcHJv
cGVydHkpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGdldEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIFNUVUJf
UkVUVVJOX0FERFJFU1MpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCkBAIC0yNTAyLDIzICsyNTM2LDE0IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3B1dF9ieV92YWwpCitzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotCi0gICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
c3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tG
cmFtZS5hcmdzWzJdLmpzVmFsdWUoKTsKLQogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUlu
dDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShpKSkKLSAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVp
Y2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0
SW5kZXhRdWlja2x5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI1MjgsMTEgKzI1NTMsNjEgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICBiYXNlVmFs
dWUucHV0KGNhbGxGcmFtZSwganNDYXN0PE5hbWVJbnN0YW5jZSo+KHN1YnNjcmlwdC5hc0NlbGwo
KSktPnByaXZhdGVOYW1lKCksIHZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UgewogICAgICAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5KGNhbGxGcmFtZSwgc3Vic2NyaXB0LnRvU3RyaW5nKGNhbGxGcmFt
ZSktPnZhbHVlKGNhbGxGcmFtZSkpOwotICAgICAgICBpZiAoIXN0YWNrRnJhbWUuZ2xvYmFsRGF0
YS0+ZXhjZXB0aW9uKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhy
ZXcgYW4gZXhjZXB0aW9uLgorICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmV4
Y2VwdGlvbikgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFu
IGV4Y2VwdGlvbi4KICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQo
Y2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgfQorfQor
CitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsKQoreworICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFy
Z3NbMl0uanNWYWx1ZSgpOworCisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNj
cmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemlu
ZyBhdCBhbGwuCisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUp
OworICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8oKSkgeworICAgICAgICAgICAgLy8gRG9udCBldmVyIHRyeSB0byBvcHRpbWl6ZS4K
KyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihTVFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5l
cmljKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGlt
aXplLgorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBjYWxsRnJhbWUtPmJ5
dGVjb2RlT2Zmc2V0Rm9yTm9uREZHQ29kZSgpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgICAgICAg
ICBBU1NFUlQoIWJ5VmFsSW5mby5zdHViUm91dGluZSk7CisgICAgICAgICAgICBpZiAoaXNPcHRp
bWl6YWJsZUluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvckluZGV4aW5nVHlwZShpbmRleGlu
Z1R5cGUpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFycmF5
TW9kZSkKKyAgICAgICAgICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJmNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBTVFVC
X1JFVFVSTl9BRERSRVNTLCBhcnJheU1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHB1dEJ5VmFsKGNhbGxGcmFtZSwgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IHZhbHVlKTsKKworICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Cit9CisKK0RFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWxfZ2VuZXJpYykKK3sKKyAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFj
a0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tG
cmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gc3RhY2tGcmFtZS5h
cmdzWzJdLmpzVmFsdWUoKTsKKyAgICAKKyAgICBwdXRCeVZhbChjYWxsRnJhbWUsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAKICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTMw
ODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzAsNiArMzcwLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRW5jb2RlZEpTVmFsdWUg
SklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KSBXVEZfSU5URVJOQUw7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9i
eV9pZF9zdHJpbmdfZmFpbChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAg
ICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X3ZhbChTVFVCX0FSR1NfREVD
TEFSQVRJT04pIFdURl9JTlRFUk5BTDsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlf
b3BfZ2V0X2J5X3ZhbF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFM
OwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfYnlfdmFsX3N0cmluZyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICBFbmNvZGVkSlNWYWx1ZSBK
SVRfU1RVQiBjdGlfb3BfaW4oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiAg
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2luc3RhbmNlb2YoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CkBAIC00NDYsNiArNDQ3LDcgQEAgZXh0ZXJuICJDIiB7
CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9nZW5lcmljKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV9pbmRleChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2
b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlfdmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOworICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYyhT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0
aV9vcF9wdXRfZ2V0dGVyX3NldHRlcihTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5B
TDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfZ2xvYmFsX3Zhcl9jaGVjayhTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90
ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcxLDcgKzExNzEsNyBAQCBfbGxpbnRfb3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBs
b2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDIKICAgICBhcnJheVByb2ZpbGUodDIsIHQx
LCB0MCkKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxlbmd0aFNsb3cKLSAgICBi
dGl6IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEFycmF5TGVuZ3RoU2xvdworICAgIGJ0aXog
dDIsIChIYXNDb250aWd1b3VzIHwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3Rv
cmFnZSksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpIDRbUENdLCB0MQogICAgIGxv
YWRwIDMyW1BDXSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApA
QCAtMTMwNiwxMCArMTMwNiwyMSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkaSAx
MltQQ10sIHQzCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQodDMsIEludDMyVGFn
LCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
MF0sIHQzCisgICAgYnRpeiB0MiwgSGFzQ29udGlndW91cywgLm9wR2V0QnlWYWxOb3RDb250aWd1
b3VzCisgICAgCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkaSBU
YWdPZmZzZXRbdDMsIHQxLCA4XSwgdDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QzLCB0MSwg
OF0sIHQxCisgICAgam1wIC5vcEdldEJ5VmFsRG9uZQorCisub3BHZXRCeVZhbE5vdENvbnRpZ3Vv
dXM6CisgICAgYnRpeiB0MiwgSGFzQXJyYXlTdG9yYWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFn
ZSwgLm9wR2V0QnlWYWxTbG93CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKLSAg
ICBsb2FkaSA0W1BDXSwgdDAKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFn
T2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciAr
IFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKKworLm9wR2V0QnlWYWxEb25lOgorICAgIGxv
YWRpIDRbUENdLCB0MAogICAgIGJpZXEgdDIsIEVtcHR5VmFsdWVUYWcsIC5vcEdldEJ5VmFsU2xv
dwogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDAsIDhdCiAgICAgc3RvcmVpIHQxLCBQ
YXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCkBAIC0xMzg2LDI5ICsxMzk3LDUyIEBAIF9sbGludF9v
cF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAg
IGxvYWRwIDE2W1BDXSwgdDMKICAgICBhcnJheVByb2ZpbGUodDIsIHQzLCB0MCkKLSAgICBidGl6
IHQyLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdwogICAgIGxvYWRpIDhbUENdLCB0
MAotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHQwLCBJbnQzMlRhZywgdDIsIC5v
cFB1dEJ5VmFsU2xvdykKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgSW50
MzJUYWcsIHQzLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QxXSwgdDAKLSAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJpZXEg
QXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDIsIDhdLCBFbXB0eVZhbHVl
VGFnLCAub3BQdXRCeVZhbEVtcHR5Ci0ub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgotICAgIGxvYWRp
IDEyW1BDXSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyh0MywgdDEsIHQzKQot
ICAgIHdyaXRlQmFycmllcih0MSwgdDMpCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1f
dmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0KLSAgICBzdG9yZWkgdDMsIEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MiwgOF0KKyAgICBidGl6IHQyLCBIYXND
b250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQzLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwg
Lm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZCb3VuZHMKKy5vcFB1dEJ5VmFsQ29udGlndW91c1N0
b3JlUmVzdWx0OgorICAgIGxvYWRpIDEyW1BDXSwgdDIKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyh0MiwgdDEsIHQyKQorICAgIHdyaXRlQmFycmllcih0MSwgdDIpCisgICAgc3RvcmVp
IHQxLCBUYWdPZmZzZXRbdDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0
MCwgdDMsIDhdCisgICAgZGlzcGF0Y2goNSkKKworLm9wUHV0QnlWYWxDb250aWd1b3VzT3V0T2ZC
b3VuZHM6CisgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBpZiBWQUxVRV9Q
Uk9GSUxFUgorICAgICAgICBsb2FkcCAxNltQQ10sIHQxCisgICAgICAgIHN0b3JlYiAxLCBBcnJh
eVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCisgICAgZW5kCisgICAgYWRkaSAxLCB0Mywg
dDIKKyAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV9wdWJsaWNMZW5ndGhbdDBdCisgICAgam1wIC5vcFB1dEJ5VmFsQ29udGlndW91c1N0b3Jl
UmVzdWx0CisKKy5vcFB1dEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJh
eVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
bG93CisgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0Mywg
OF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKKy5vcFB1dEJ5
VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6CisgICAgbG9hZGkgMTJbUENdLCB0MgorICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHQyLCB0MSwgdDIpCisgICAgd3JpdGVCYXJyaWVyKHQx
LCB0MikKKyAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRb
dDAsIHQzLCA4XQorICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxv
YWRPZmZzZXRbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5vcFB1dEJ5VmFsRW1wdHk6
Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0g
ICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDNdCisgICAg
ICAgIGxvYWRwIDE2W1BDXSwgdDEKKyAgICAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9t
YXlTdG9yZVRvSG9sZVt0MV0KICAgICBlbmQKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9u
dW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVz
dWx0CisgICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAog
ICAgIGFkZGkgMSwgdDIsIHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZh
bFN0b3JlUmVzdWx0CisgICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQK
IAogLm9wUHV0QnlWYWxTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1
dF9ieV92YWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTgsNyArMTAxOCw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAg
IGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgogICAgIGFycmF5UHJvZmlsZSh0Miwg
dDEsIHQwKQogICAgIGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CisgICAgYnRp
eiB0MiwgKEhhc0NvbnRpZ3VvdXMgfCBIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlKSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwg
dDEKICAgICBsb2FkcCA2NFtQQiwgUEMsIDhdLCB0MgogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVt0M10sIHQwCkBAIC0xMTQ3LDE0ICsxMTQ3LDI1IEBAIF9sbGludF9vcF9nZXRfYnlf
dmFsOgogICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0
MywgdDEpCiAgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCi0gICAgYnRpeiB0MiwgSGFzQXJy
YXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50
MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnAgdDEsIHQxCiAgICAgbG9hZHAg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBidGl6IHQyLCBIYXNDb250aWd1b3Vz
LCAub3BHZXRCeVZhbE5vdENvbnRpZ3VvdXMKKworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4
aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QzXSwgLm9wR2V0QnlW
YWxTbG93CisgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKKyAgICBsb2FkcCBbdDMsIHQxLCA4
XSwgdDIKKyAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKKyAgICBqbXAgLm9wR2V0QnlWYWxE
b25lCisKKy5vcEdldEJ5VmFsTm90Q29udGlndW91czoKKyAgICBidGl6IHQyLCBIYXNBcnJheVN0
b3JhZ2UgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlLCAub3BHZXRCeVZhbFNsb3cKICAgICBiaWFl
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAg
ICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHog
dDIsIC5vcEdldEJ5VmFsU2xvdworCisub3BHZXRCeVZhbERvbmU6CiAgICAgc3RvcmVwIHQyLCBb
Y2ZyLCB0MCwgOF0KICAgICBsb2FkcCA0MFtQQiwgUEMsIDhdLCB0MAogICAgIHZhbHVlUHJvZmls
ZSh0MiwgdDApCkBAIC0xMjI5LDI5ICsxMjQwLDUxIEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgog
ICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDFdLCB0MgogICAgIGxvYWRwIDMyW1BCLCBQ
QywgOF0sIHQzCiAgICAgYXJyYXlQcm9maWxlKHQyLCB0MywgdDApCi0gICAgYnRpeiB0MiwgSGFz
QXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKICAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwg
dDAKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQyLCAub3BQdXRCeVZhbFNs
b3cpCi0gICAgc3hpMnAgdDIsIHQyCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQw
LCB0MywgLm9wUHV0QnlWYWxTbG93KQorICAgIHN4aTJwIHQzLCB0MwogICAgIGxvYWRwIEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCi0gICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNs
b3cKLSAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlW
YWxFbXB0eQotLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4
XSwgdDMKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQzLCB0MSkKKyAgICBidGl6IHQyLCBI
YXNDb250aWd1b3VzLCAub3BQdXRCeVZhbE5vdENvbnRpZ3VvdXMKKyAgICAKKyAgICBiaWFlcSB0
MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0
aFt0MF0sIC5vcFB1dEJ5VmFsQ29udGlndW91c091dE9mQm91bmRzCisub3BQdXRCeVZhbENvbnRp
Z3VvdXNTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKKyAgICB3cml0ZUJhcnJpZXIodDEpCisgICAgc3Rv
cmVwIHQxLCBbdDAsIHQzLCA4XQorICAgIGRpc3BhdGNoKDUpCisKKy5vcFB1dEJ5VmFsQ29udGln
dW91c091dE9mQm91bmRzOgorICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CisgICAg
aWYgVkFMVUVfUFJPRklMRVIKKyAgICAgICAgbG9hZHAgMzJbUEIsIFBDLCA4XSwgdDIKKyAgICAg
ICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9tYXlTdG9yZVRvSG9sZVt0Ml0KKyAgICBlbmQK
KyAgICBhZGRpIDEsIHQzLCB0MgorICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KKyAgICBqbXAgLm9wUHV0QnlW
YWxDb250aWd1b3VzU3RvcmVSZXN1bHQKKworLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgorICAg
IGJ0aXogdDIsIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgYmlhZXEgdDMs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFNsb3cKKyAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAs
IHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQorLm9wUHV0QnlWYWxBcnJheVN0
b3JhZ2VTdG9yZVJlc3VsdDoKKyAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDIKKyAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHQyLCB0MSkKICAgICB3cml0ZUJhcnJpZXIodDEpCi0gICAgc3Rv
cmVwIHQxLCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0KKyAgICBzdG9yZXAgdDEs
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQogICAgIGRpc3BhdGNoKDUpCiAKLS5v
cFB1dEJ5VmFsRW1wdHk6Cisub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgogICAgIGlmIFZB
TFVFX1BST0ZJTEVSCi0gICAgICAgIHN0b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVU
b0hvbGVbdDNdCisgICAgICAgIGxvYWRwIDMyW1BCLCBQQywgOF0sIHQxCisgICAgICAgIHN0b3Jl
YiAxLCBBcnJheVByb2ZpbGU6Om1fbWF5U3RvcmVUb0hvbGVbdDFdCiAgICAgZW5kCiAgICAgYWRk
aSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3Qw
XSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAotICAgIGFkZGkgMSwgdDIsIHQxCisgICAgYmliIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAorICAgIGFkZGkgMSwgdDMs
IHQxCiAgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fcHVibGljTGVuZ3RoW3QwXQotICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Cisg
ICAgam1wIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxT
bG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3B1dF9ieV92YWwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDkgQEAg
ZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KIGNvbnN0
IElzQXJyYXkgPSAxCitjb25zdCBIYXNDb250aWd1b3VzID0gMgogY29uc3QgSGFzQXJyYXlTdG9y
YWdlID0gOAotY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlID0gMTYKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaQogCiBpbmxpbmUgYm9vbCBpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQogewot
ICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBt
aW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7CisgICAgcmV0dXJuIGxlbmd0aCAvIG1p
bkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKIH0KIAogaW5saW5lIEluZGV4aW5nSGVh
ZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsx
OTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tCiAvLyBjdXJy
ZW50Q291bnQpIHdpbGwgYmUgc2hpZnRlZCB0byB0aGUgbGVmdCBvciByaWdodCBhcyBhcHByb3By
aWF0ZTsgaW4gdGhlCiAvLyBjYXNlIG9mIHNoaWZ0IHRoaXMgbXVzdCBiZSByZW1vdmluZyB2YWx1
ZXMsIGluIHRoZSBjYXNlIG9mIHVuc2hpZnQgdGhpcwogLy8gbXVzdCBiZSBpbnRyb2R1Y2luZyBu
ZXcgdmFsdWVzLgotc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENvdW50LCB1
bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGU8SlNBcnJheTo6
U2hpZnRDb3VudE1vZGUgc2hpZnRDb3VudE1vZGU+Cit2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3VycmVudENv
dW50LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIEFTU0VS
VChjdXJyZW50Q291bnQgPiByZXN1bHRDb3VudCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjdXJy
ZW50Q291bnQgLSByZXN1bHRDb3VudDsKQEAgLTIwNCw3ICsyMDUsNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjCiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmop
KSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAg
aWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRD
b3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9
PSBsZW5ndGggJiYgYXNBcnJheSh0aGlzT2JqKS0+c2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4o
ZXhlYywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
MzEsNyArMjMyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNoaWZ0KEV4ZWNTdGF0ZSogZXhlYwog
ICAgICAgICB9CiAgICAgfQogfQotc3RhdGljIGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJy
ZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0
ZTxKU0FycmF5OjpTaGlmdENvdW50TW9kZSBzaGlmdENvdW50TW9kZT4KK3ZvaWQgdW5zaGlmdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25lZCBoZWFkZXIsIHVuc2ln
bmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBBU1NFUlQocmVzdWx0Q291bnQgPiBjdXJyZW50Q291bnQpOwogICAgIHVuc2lnbmVk
IGNvdW50ID0gcmVzdWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CkBAIC0yNDcsMTAgKzI0OSwxMCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUqIGV4CiAKICAgICBpZiAoaXNK
U0FycmF5KHRoaXNPYmopKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlz
T2JqKTsKLSAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVu
c2hpZnRDb3VudChleGVjLCBoZWFkZXIsIGNvdW50KSkKKyAgICAgICAgaWYgKGFycmF5LT5sZW5n
dGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnVuc2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZXhl
YywgaGVhZGVyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAt
LWspIHsKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOwogICAg
ICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CkBAIC01MjYsNyArNTI4LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBhcnJh
eS0+cHVzaChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiAgICAgfQotCisgICAgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTU0
NCw2ICs1NDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQorICAgIAogICAgIEpTVmFsdWUgbmV3
TGVuZ3RoKHN0YXRpY19jYXN0PGludDY0X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90
PihleGVjLT5hcmd1bWVudENvdW50KCkpKTsKICAgICBwdXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBuZXdMZW5ndGgpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUobmV3TGVuZ3RoKTsKQEAgLTYwMCw3ICs2MDMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMs
IDApOwotICAgICAgICBzaGlmdChleGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOworICAg
ICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU2hpZnQ+KGV4ZWMsIHRoaXNPYmosIDAs
IDEsIDAsIGxlbmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHB1
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKGxlbmd0aCAtIDEpKTsKQEAgLTczMCw3ICs3MzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLQorICAgIAogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYykpOwogCkBAIC03NjIsMTEgKzc2NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsQXJncyA9IHN0ZDo6bWF4
PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CiAgICAgaWYgKGFkZGl0aW9uYWxB
cmdzIDwgZGVsZXRlQ291bnQpIHsKLSAgICAgICAgc2hpZnQoZXhlYywgdGhpc09iaiwgYmVnaW4s
IGRlbGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKKyAgICAgICAgc2hpZnQ8SlNB
cnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0ZUNv
dW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKLSAgICAg
ICAgdW5zaGlmdChleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxB
cmdzLCBsZW5ndGgpOworICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxp
Y2U+KGV4ZWMsIHRoaXNPYmosIGJlZ2luLCBkZWxldGVDb3VudCwgYWRkaXRpb25hbEFyZ3MsIGxl
bmd0aCk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQpAQCAtNzkxLDcgKzc5
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIHVu
c2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7
Ci0gICAgICAgIHVuc2hpZnQoZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwor
ICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09i
aiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShy
ZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CiAgICAg
fQogICAgIAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUgbm90IGp1c3QgYmVjYXVzZSBpdCdz
IGhhbmR5LCBidXQgdG8gcmVtaW5kIHlvdSB0aGF0CisgICAgLy8gdGhlIHdob2xlIHBvaW50IG9m
IGJ1dHRlcmZsaWVzIGlzIHRvIGRvIGV2aWwgcG9pbnRlciBhcml0aG1ldGljLgorICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGZyb21Qb2ludGVyKGNoYXIqIHB0cikKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHB0cik7CisgICAgfQorICAgIAorICAgIGNo
YXIqIHBvaW50ZXIoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQor
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCk7IH0KQEAgLTcwLDkgKzc5LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQogICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KKyAgICB1aW50
MzJfdCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0b3JMZW5n
dGgoKTsgfQorICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4
aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFZlY3Rv
ckxlbmd0aCh1aW50MzJfdCB2YWx1ZSkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5n
dGgodmFsdWUpOyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBUKiBpbmRl
eGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQogICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFy
cmF5U3RvcmFnZT4oKTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29udGlndW91cygp
IHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPigpOyB9Cisg
ICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjb250aWd1b3VzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QnV0dGVyZmx5Kj4oY29udGlndW91cyk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQogICAgIHN0YXRpYyBpbnQgaW5kZXhP
ZlByb3BlcnR5U3RvcmFnZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA4MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnJlc2l6ZUFycmF5CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCiB7Ci0gICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBB
U1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICBB
U1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNl
IHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKQEAg
LTE2Myw3ICsxNjMsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3Ry
CiAKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQogewotICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFn
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBh
Y2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAvLyBGSVhNRTogU2Vl
IGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KICAgICBtZW1tb3ZlKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwxMCArNDIsMTcgQEAgaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNp
dAogCiBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0
b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKQorICAgIHN3aXRjaCAoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKCFo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdUeXBlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0
Zi9TdHJpbmdFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IGNoYXIqIGluZGV4
aW5nVHlwZVRvU3RyaW5nKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCit7CisgICAgc3RhdGlj
IGNoYXIgcmVzdWx0WzEyOF07CisgICAgY29uc3QgY2hhciogYmFzaWNOYW1lOworICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlICYgQWxsQXJyYXlUeXBlcykgeworICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgICAgIGJhc2ljTmFtZSA9ICJOb25BcnJheSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQ29udGlndW91czoKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5V2l0
aENvbnRpZ3VvdXMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZToKKyAgICAgICAgYmFzaWNOYW1lID0gIk5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Ui
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5Q2xhc3M6CisgICAgICAgIGJhc2ljTmFt
ZSA9ICJBcnJheUNsYXNzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhDb250
aWd1b3VzOgorICAgICAgICBiYXNpY05hbWUgPSAiQXJyYXlXaXRoQ29udGlndW91cyI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNp
Y05hbWUgPSAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICBiYXNpY05hbWUgPSAiQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJhc2ljTmFtZSA9ICJVbmtub3duISI7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBzbnByaW50ZigKKyAgICAgICAgcmVzdWx0LCBzaXplb2YocmVzdWx0KSwgIiVz
JXMiLCBiYXNpY05hbWUsCisgICAgICAgIChpbmRleGluZ1R5cGUgJiBNYXlIYXZlSW5kZXhlZEFj
Y2Vzc29ycykgPyAifE1heUhhdmVJbmRleGVkQWNjZXNzb3JzIiA6ICIiKTsKKyAgICAKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDEzMDgwNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwyNSArMjYsMjkgQEAKICNpZm5kZWYgSW5kZXhpbmdUeXBlX2gKICNkZWZp
bmUgSW5kZXhpbmdUeXBlX2gKIAorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CiAKIC8vIEZsYWdz
IGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEhhc0NvbnRpZ3VvdXMgICAgICAgICAgICA9IDI7CiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UgICA9IDE2OwogCiAvLyBBZGRpdGlv
bmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlwZS4gVGhlc2UgYXJl
IHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0bHku
Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFycmF5U3RvcmFnZSAgICAgICAgICA9IDMy
OyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBoYXZlIGFycmF5IHN0b3JhZ2UgaW4gdGhl
IHBhc3QuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3Jz
ICA9IDY0Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29y
cyAgPSAzMjsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgogc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKK3N0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQ29udGlndW91cyAgICAgICAgICA9
IEhhc0NvbnRpZ3VvdXM7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSAgICAgICAgPSBIYXNBcnJheVN0b3JhZ2U7CiBzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgPSBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheUNsYXNzICAgICAgICAgICAg
ICAgICAgICAgID0gSXNBcnJheTsgLy8gSSdkIHdhbnQgdG8gY2FsbCB0aGlzICJBcnJheSIgYnV0
IHRoaXMgd291bGQgbGVhZCB0byBkaXNhc3Ryb3VzIG5hbWVzcGFjZSBwb2xsdXRpb24uCitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aENvbnRpZ3VvdXMgICAgICAgICAgICAgPSBJ
c0FycmF5IHwgSGFzQ29udGlndW91czsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlICAgICAgICAgICA9IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7CiBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgICAg
PSBJc0FycmF5IHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKIApAQCAtNTIsNiArNTYsMTAgQEAg
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhTbG93UAogICAgIE5vbkFycmF5OiAg
ICAgICAgICAgICAgICAgICAgXAogICAgIGNhc2UgQXJyYXlDbGFzcwogCisjZGVmaW5lIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTIFwKKyAgICBOb25BcnJheVdpdGhDb250aWd1b3VzOiAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91cworCiAjZGVmaW5lIEFSUkFZ
X1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUyBcCiAgICAgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlCkBAIC03Niw2ICs4NCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIoSW5kCiAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHR5cGUpOwog
fQogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzQ29udGlndW91cyhJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKQoreworICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiBIYXNDb250aWd1b3VzKTsK
K30KKwogc3RhdGljIGlubGluZSBib29sIGhhc0FycmF5U3RvcmFnZShJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlKQogewogICAgIHJldHVybiAhIShpbmRleGluZ1R5cGUgJiAoSGFzQXJyYXlTdG9y
YWdlIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZSkpOwpAQCAtODYsNiArOTksOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkVXNlU2xvd1B1dChJbmRlCiAgICAgcmV0dXJuICEhKGluZGV4aW5n
VHlwZSAmIEhhc1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwogfQogCitjb25zdCBjaGFyKiBpbmRleGlu
Z1R5cGVUb1N0cmluZyhJbmRleGluZ1R5cGUpOworCiAvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0
eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlcyAgICAgICAgICAg
ID0gMzE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDkgKzMzNyw4IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBK
U0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJv
b2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTQXJyYXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRp
b24sIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBsZW5ndGggaXMgcmVh
ZCBvbmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3VsZCBlbnRlciB0aGUgZm9s
bG93aW5nICdpZicuCkBAIC00MDIsMTIgKzQwMSw3MSBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNBcnJheTo6
c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93
RXhjZXB0aW9uKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICBpZiAoIW5ld0xlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KAorICAgICAgICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCisgICAg
ICAgICAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxE
YXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVJbml0aWFsQ29udGlndW91cyhleGVj
LT5nbG9iYWxEYXRhKCksIG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIGlmIChuZXdMZW5ndGgg
PT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVYIC8vIFRoaXMgY2FzZSBl
bnN1cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KKyAgICAgICAgICAgIHx8IChuZXdMZW5n
dGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAorICAgICAgICAgICAgICAgICYmICFpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKG5ld0xlbmd0aCwgY291bnRFbGVtZW50c0luQ29udGlndW91cyhtX2J1
dHRlcmZseSkpKSkgeworICAgICAgICAgICAgcmV0dXJuIHNldExlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoCisgICAgICAgICAgICAgICAgZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKKyAg
ICAgICAgICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2Jh
bERhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIGlmIChuZXdMZW5ndGggPiBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGVuc3VyZUNvbnRpZ3VvdXNMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKG5ld0xlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6CisgICAgICAgIHJldHVybiBzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIG5l
d0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKwogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoLS0pCisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZW5n
dGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOworICAgICAgICBpZiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5j
bGVhcigpOworICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgp
OworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgIApAQCAtNDMxLDI2ICs0ODksMjggQEAgSlNWYWx1ZSBKU0Fy
cmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdp
dGggYXJndW1lbnQgaW5keC4KLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGlu
ZGV4KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICAgICAgaWYg
KCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIENh
bGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0
aCIsIGluZHgsIGFuZCB0cnVlLgotICAgICAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUp
OwotICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlMZW5ndGgo
KSAtIDE7CisgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBb
W0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICBKU1Zh
bHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgLy8gQ2FsbCB0aGUgW1tE
ZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVl
LgorICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewor
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4i
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIC8vIENhbGwgdGhl
IFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGlu
ZHgsIGFuZCB0cnVlLgorICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7CisgICAgLy8g
UmV0dXJuIGVsZW1lbnQuCisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJ
bmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBA
IC00NjQsNiArNTI0LDI2IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmEKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aENv
bnRpZ3VvdXM6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBtX2J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7
CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0
aCwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoQ29udGlndW91
c1dpdGhvdXRBdHRyaWJ1dGVzKGV4ZWMsIGxlbmd0aCwgdmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6
IHsKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgICAgIGlmIChh
dHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0aCwgdmFsdWUs
IHRydWUpKSB7CkBAIC01MDUsMTggKzU4NSwxNCBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKK2Jvb2wg
SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBU1NFUlQoY291
bnQgPiAwKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0
b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAKICAgICB1bnNpZ25lZCBvbGRMZW5ndGgg
PSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICBBU1NFUlQoY291bnQgPD0gb2xkTGVuZ3RoKTsKICAg
ICAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMgb3IgaXMgb3RoZXJ3aXNlIGlu
IGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gaW4g
QXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yIHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkpCisgICAgaWYgKG9sZExlbmd0aCAh
PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkg
fHwgc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW9sZExlbmd0aCkKQEAgLTU2NSwxNyArNjQxLDY5
IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorewor
ICAgIEFTU0VSVChjb3VudCA+IDApOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVu
c2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAg
QVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBtYXkg
aGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxs
aW5nIHRvIGRvCisgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4K
KyAgICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQpID49IE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBlbmQgPSBv
bGRMZW5ndGggLSBjb3VudDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsg
aSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICAvLyBTdG9yaW5nIHRvIGEgaG9sZSBpcyBmaW5l
IHNpbmNlIHdlJ3JlIHN0aWxsIGhhdmluZyBhIGdvb2QgdGltZS4gQnV0IHJlYWRpbmcKKyAgICAg
ICAgICAgIC8vIGZyb20gYSBob2xlIGlzIHRvdGFsbHkgbm90IGZpbmUsIHNpbmNlIHdlIG1pZ2h0
IGhhdmUgdG8gcmVhZCBmcm9tIHRoZSBwcm90bworICAgICAgICAgICAgLy8gY2hhaW4uCisgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0u
Z2V0KCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRoIGlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IG1h
a2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyBtaXN0YWtlIGluIHRoZSBmdXR1cmU6IHNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKCkgY2FuJ3QgZG8gYW55dGhpbmcKKyAgICAgICAgICAg
ICAgICAvLyBhYm91dCBob2xlcyAoYXQgbGVhc3QgZm9yIG5vdyksIGJ1dCBpdCBjYW4gZGV0ZWN0
IHRoZW0gcXVpY2tseS4gU28KKyAgICAgICAgICAgICAgICAvLyB3ZSBjb252ZXJ0IHRvIGFycmF5
IHN0b3JhZ2UgYW5kIHRoZW4gYWxsb3cgdGhlIGFycmF5IHN0b3JhZ2UgcGF0aCB0bworICAgICAg
ICAgICAgICAgIC8vIGZpZ3VyZSBpdCBvdXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdlJ3JlIGp1c3QgbW92aW5n
IGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
aW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQgd2Ugd29uJ3QgaGF2ZSBh
IGRlbGV0aW9uCisgICAgICAgICAgICAvLyBiYXJyaWVyLgorICAgICAgICAgICAgbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICB9
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZDsgaSA8IG9sZExlbmd0aDsgKytpKQorICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICAK
KyAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgor
ICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291
bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSB1bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4gICAgCi1i
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQg
Y291bnQsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIEFTU0VSVChzdGFydEluZGV4IDw9
IGxlbmd0aCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMgb3IgaXMgb3Ro
ZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2VuZXJpYyBhbGdv
cml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxlbmd0aCAhPSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yIHx8IHN0b3JhZ2UtPmluU3BhcnNlTW9kZSgpKQorICAgIGlmIChsZW5n
dGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJzZU1v
ZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgbW92ZUZyb250ID0gIXN0YXJ0SW5kZXgg
fHwgc3RhcnRJbmRleCA8IGxlbmd0aCAvIDI7CkBAIC02MTAsNiArNzM4LDQ4IEBAIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCit7CisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Q2xhc3M6Cisg
ICAgICAgIC8vIFdlIGNvdWxkIGhhbmRsZSB0aGlzLiBCdXQgaXQgc2hvdWxkbid0IGV2ZXIgY29t
ZSB1cCwgc28gd2Ugd29uJ3QuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIG1h
eSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUg
d2lsbGluZyB0byBkbyBzbworICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNs
b3cuCisgICAgICAgIGlmIChvbGRMZW5ndGggLSBzdGFydEluZGV4ID49IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpCisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgCisgICAgICAgIGVuc3VyZUNvbnRpZ3Vv
dXNMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0YXJ0SW5kZXg7
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmdldCgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3Vu
dCwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsK
KyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOT1RF
OiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2YgdGhlIGFycmF5IHRo
YXQgd2Ugc2hpZnRlZCBvdXQKKyAgICAgICAgLy8gb2YuIFRoaXMgaXMgZmluZSBiZWNhdXNlIHRo
ZSBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gc3RvcmUgb3ZlciB0aGF0IGFyZWEsIGFuZAorICAgICAg
ICAvLyBpbiBjb250aWd1b3VzIG1vZGUgc3RvcmluZyBpbnRvIGEgaG9sZSBpcyBndWFyYW50ZWVk
IHRvIGJlaGF2ZSBleGFjdGx5IHRoZSBzYW1lCisgICAgICAgIC8vIGFzIHN0b3Jpbmcgb3ZlciBh
biBleGlzdGluZyBlbGVtZW50LgorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBhcnJheVN0b3JhZ2UoKSk7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKIHN0YXRpYyBpbnQgY29tcGFyZU51bWJlcnNGb3JRU29ydChj
b25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAgIGRvdWJsZSBkYSA9IHN0YXRpY19j
YXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIoKTsKQEAgLTYyNCw2ICs3OTQsNDUgQEAg
c3RhdGljIGludCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQoYwogICAgIHJldHVybiBjb2Rl
UG9pbnRDb21wYXJlKHZhLT5zZWNvbmQsIHZiLT5zZWNvbmQpOwogfQogCit0ZW1wbGF0ZTxJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpY1ZlY3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlw
ZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIEFTU0VSVChpbmRleGluZ1R5cGUg
PT0gQXJyYXlXaXRoQ29udGlndW91cyB8fCBpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7
CisgICAgdW5zaWduZWQgbmV3UmVsZXZhbnRMZW5ndGg7CisgICAgY29tcGFjdEZvclNvcnRpbmc8
aW5kZXhpbmdUeXBlPigKKyAgICAgICAgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkLAorICAg
ICAgICBuZXdSZWxldmFudExlbmd0aCk7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBkYXRhID0gaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKTsKKyAgICAKKyAgICBpZiAoaW5k
ZXhpbmdUeXBlID09IEFycmF5V2l0aEFycmF5U3RvcmFnZSAmJiBhcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBhbGxWYWx1ZXNBcmVO
dW1iZXJzID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld1JlbGV2YW50TGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFkYXRhW2ldLmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
ICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAg
ICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEp
OworICAgIAorICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFz
b3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAvLyBhbHNvIGRvbid0IHJlcXVp
cmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQor
ICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1p
dGl2ZSB2YWx1ZXMuCisgICAgcXNvcnQoZGF0YSwgbmV3UmVsZXZhbnRMZW5ndGgsIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKKyAgICByZXR1
cm47Cit9CisKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBj
YWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwpAQCAtNjMy
LDExNyArODQxLDEyOSBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhl
CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKCk7Ci0gICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBjYXNlIEFy
cmF5V2l0aENvbnRpZ3VvdXM6CisgICAgICAgIHNvcnROdW1lcmljVmVjdG9yPEFycmF5V2l0aENv
bnRpZ3VvdXM+KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBib29sIGFsbFZhbHVlc0FyZU51bWJl
cnMgPSB0cnVlOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghYWxs
VmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVG
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBu
dW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1l
cmdlc29ydC4gV2UKLSAgICAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0
YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAgICAgICAgLy8gc2lkZS1l
ZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4K
LSAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKLSAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHNvcnROdW1lcmljVmVjdG9yPEFycmF5
V2l0aEFycmF5U3RvcmFnZT4oZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEpOwogICAgICAgICByZXR1cm47Ci0gICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIH0KIAotdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKK3Rl
bXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+Cit2b2lkIEpTQXJyYXk6OnNvcnRDb21w
YWN0ZWRWZWN0b3IoRXhlY1N0YXRlKiBleGVjLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGJlZ2lu
LCB1bnNpZ25lZCByZWxldmFudExlbmd0aCkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhp
bmdNb2RlKCkpOwotICAgIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgorICAgIGlmICghcmVsZXZhbnRMZW5ndGgpCiAgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisKKyAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0
cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29y
dCBiYXNlZCBvbiB0aGF0LgorICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1l
bnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVz
IGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3Rz
IHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1l
dGhvZHMgdGhhdCByZXR1cm4KKyAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJl
c3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4K
ICAgICAgICAgCi0gICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoKTsK
LSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwotICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0
byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5k
IHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBp
bXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQg
cmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0
aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9t
IHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAgICAgLy8gcmFuZG9tIG9yIG90aGVy
d2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlv
biBpbmNvbnNpc3RlbnQuCi0gICAgICAgIAotICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWly
PiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICAgICAgaWYgKCF2YWx1
ZXMuYmVnaW4oKSkgewotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFp
cj4gdmFsdWVzKHJlbGV2YW50TGVuZ3RoKTsKKyAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKKyAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZh
bHVlcyk7CiAgICAgICAgIAotICAgICAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9
IHRydWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQo
KSk7Ci0gICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgICAgIGlz
U29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1
ZS5pc1ByaW1pdGl2ZSgpOwotICAgICAgICB9CisgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVW
YWx1ZXMgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVsZXZhbnRMZW5ndGg7
IGkrKykgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYmVnaW5baV0uZ2V0KCk7CisgICAgICAg
IEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7CisgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9
IHZhbHVlOworICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICB9CiAgICAgICAgIAotICAg
ICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3Ry
aW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAgICAgLy8gYSB0b1N0cmlu
ZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcg
bG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVu
IGFmdGVyCisgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCiAgICAg
ICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKQotICAgICAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5m
aXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJlbGV2YW50TGVuZ3RoOyBpKyspCisgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNb
aV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CiAgICAgICAgIAotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBv
cFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIEhlYXA6OmhlYXAodGhp
cyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVl
LCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291
bGQgYmUgTyhOKSByYXRoZXIKLSAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgIC8vIEZJ
WE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdo
dCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAg
Ly8gdGhhbiBPKE4gbG9nIE4pLgogICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICAg
ICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgICAgIHFzb3J0KHZhbHVl
cy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVyZ2Vz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKLSNlbHNlCi0gICAgICAgIC8vIEZJWE1F
OiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxl
IHNvcnQuCi0gICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFi
bGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQu
CisgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKICAgICAgICAgcXNvcnQodmFsdWVz
LmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJl
QnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgIGVsc2UKKyAgICAgICAgbWVyZ2Vzb3J0KHZhbHVl
cy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyNlbHNlCisgICAgLy8gRklYTUU6IFRoZSBxc29ydCBs
aWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KKyAgICAv
LyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBw
cmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgIHFzb3J0KHZhbHVl
cy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgorICAgIAorICAgIC8vIElmIHRoZSB0b1N0
cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBz
dG9yYWdlLAorICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFs
IG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7Cisg
ICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgorICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVu
Z3RoKGdsb2JhbERhdGEsIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAg
IAotICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3Ro
IG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAgICAgLy8gaW5jcmVhc2UgdGhl
IGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCi0g
ICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkgewotICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgICAgICAgICAgc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgaWYgKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSA8IHJl
bGV2YW50TGVuZ3RoKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5n
bG9iYWxEYXRhKCksIHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgICAgIGJlZ2luID0gYXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdG9yYWdlLT5sZW5n
dGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICBpZiAoYXJy
YXlTdG9yYWdlKCktPmxlbmd0aCgpIDwgcmVsZXZhbnRMZW5ndGgpCisgICAgICAgICAgICBhcnJh
eVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKHJlbGV2YW50TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWxldmFudExlbmd0aDsgaSsrKQorICAgICAgICBiZWdpbltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICAKKyAgICBIZWFw
OjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKK30KKwordm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhp
bmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOworICAgICAgICB1bnNp
Z25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICAgICAgY29tcGFjdEZvclNvcnRpbmc8QXJyYXlX
aXRoQ29udGlndW91cz4oCisgICAgICAgICAgICBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQs
IG5ld1JlbGV2YW50TGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIEhlYXA6OmhlYXAodGhpcykt
PnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICBzb3J0Q29tcGFjdGVkVmVjdG9y
PEFycmF5V2l0aENvbnRpZ3VvdXM+KAorICAgICAgICAgICAgZXhlYywgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOworICAgICAgICB1bnNp
Z25lZCBuZXdSZWxldmFudExlbmd0aDsKKyAgICAgICAgY29tcGFjdEZvclNvcnRpbmc8QXJyYXlX
aXRoQXJyYXlTdG9yYWdlPigKKyAgICAgICAgICAgIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCwgbmV3UmVsZXZhbnRMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9z
cGFyc2VNYXApOwogICAgICAgICAKKyAgICAgICAgc29ydENvbXBhY3RlZFZlY3RvcjxBcnJheVdp
dGhBcnJheVN0b3JhZ2U+KAorICAgICAgICAgICAgZXhlYywgc3RvcmFnZS0+bV92ZWN0b3IsIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
ICAgIApAQCAtODI4LDEwOCArMTA0OSwxMTYgQEAgc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yRm9y
QXJyYXlDb21wYXJlIAogICAgIHN0YXRpYyBoYW5kbGUgbnVsbCgpIHsgcmV0dXJuIDB4N0ZGRkZG
RkY7IH0KIH07CiAKLXZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
Y29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxE
YXRhKQordGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KK3ZvaWQgSlNBcnJheTo6
c29ydFZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxs
VHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VSVCgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9PSBzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIAotICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheUNsYXNzOgotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVu
Y3Rpb24gb3IgaW4gdG9OdW1iZXIuCisgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRp
b25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KICAgICAg
ICAgCi0gICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBi
dXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAgICAgICAgLy8gaWYgYSBs
YXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgICAgICBBU1NFUlQoYXJyYXlTdG9yYWdlKCktPmxl
bmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKSk7Ci0gICAgICAgIGlmIChhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkgPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBp
biAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgIC8vIGlmIGEg
bGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICBBU1NFUlQobV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKSk7CisgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA+IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihhcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCksIGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KSk7Ci0gICAgICAgIEFTU0VSVCghYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKLSAgICAg
ICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aDsKKyAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gcmVsZXZhbnRMZW5ndGg8aW5kZXhpbmdUeXBlPigpOworICAgIHVu
c2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGg7CiAgICAgICAgIAotICAgICAgICBp
ZiAoIW5vZGVDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW5vZGVDb3VudCkK
KyAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJh
Y3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3Ig
Ml4zMSBpdGVtcwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOwotICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlv
bjsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlw
ZTsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERh
dGE7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwor
ICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAv
LyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2V4ZWMgPSBleGVjOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9u
ID0gY29tcGFyZUZ1bmN0aW9uOworICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxU
eXBlID0gY2FsbFR5cGU7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEg
PSAmY2FsbERhdGE7CisgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3Vu
dCk7CiAgICAgICAgIAotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAg
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNo
ZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwor
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKICAgICAgICAgCi0gICAgICAgIGlmICgh
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7Ci0gICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAg
IAotICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhl
IGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKLSAgICAgICAg
Ly8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUg
aGVyZS4KKyAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhl
IGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAvLyBy
aWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJl
LgogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAgICAgIHVu
c2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Cisg
ICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKICAgICAgICAgCi0gICAgICAgIC8vIEl0ZXJh
dGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRl
ZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgot
ICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5l
ZCkgewotICAgICAgICAgICAgaWYgKG51bURlZmluZWQgPiBhcnJheVN0b3JhZ2UoKS0+dmVjdG9y
TGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYg
PSBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgICAg
ICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7
Ci0gICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoaSA+IGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgKytudW1V
bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAg
ICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICAgICAgICAg
KytudW1EZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhl
IGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMs
IGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICBmb3IgKDsg
bnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAgICBp
ZiAobnVtRGVmaW5lZCA+IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigp
W251bURlZmluZWRdLmdldCgpOworICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVt
RGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgeworICAgICAgICBpZiAoaSA+IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1ZhbHVlIHYgPSBpbmRleGluZ0RhdGE8aW5k
ZXhpbmdUeXBlPigpW2ldLmdldCgpOworICAgICAgICBpZiAodikgeworICAgICAgICAgICAgaWYg
KHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNb
bnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURl
ZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JM
ZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwotICAgICAgICAKLSAgICAgICAgQVNT
RVJUKCFhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgIHVuc2lnbmVkIG5ld1VzZWRW
ZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwogICAgICAgICAKLSAgICAg
ICAgLy8gVGhlIGFycmF5IHNpemUgbWF5IGhhdmUgY2hhbmdlZC4gIEZpZ3VyZSBvdXQgdGhlIG5l
dyBib3VuZHMuCi0gICAgICAgIHVuc2lnbmVkIG5ld2VzdFVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpLCBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgIC8vIFRoZSBhcnJheSBzaXplIG1heSBoYXZlIGNoYW5nZWQuIEZpZ3VyZSBvdXQgdGhl
IG5ldyBib3VuZHMuCisgICAgdW5zaWduZWQgbmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCA9IHJlbGV2
YW50TGVuZ3RoPGluZGV4aW5nVHlwZT4oKTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGVs
ZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkID0gbWluKG1pbihuZXdlc3RVc2VkVmVjdG9yTGVuZ3Ro
LCBudW1EZWZpbmVkKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXMuc2l6ZSgpKSk7Ci0gICAgICAgIHVuc2lnbmVkIHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNo
b2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5ndGgsIG5ld1VzZWRWZWN0b3JMZW5ndGgpOwot
ICAgICAgICB1bnNpZ25lZCBjbGVhckVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRW
ZWN0b3JMZW5ndGgsIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgLy8gQ29w
eSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCi0gICAgICAgIEFWTFRyZWU8QVZMVHJl
ZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKLSAgICAgICAg
aXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgKytpKSB7Ci0gICAgICAgICAgICBhcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgICAgICsraXRlcjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWxlbWVudHNUb0V4dHJhY3RUaHJlc2hvbGQ7IGkg
PCB1bmRlZmluZWRFbGVtZW50c1RocmVzaG9sZDsgKytpKQotICAgICAgICAgICAgYXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotCi0gICAgICAgIC8vIEVuc3VyZSB0
aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gdW5kZWZpbmVkRWxlbWVudHNUaHJlc2hvbGQ7IGkgPCBjbGVhckVs
ZW1lbnRzVGhyZXNob2xkOyArK2kpCi0gICAgICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3JbaV0uY2xlYXIoKTsKKyAgICB1bnNpZ25lZCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZCA9
IG1pbihtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgbnVtRGVmaW5lZCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSkpOworICAgIHVuc2ln
bmVkIHVuZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkID0gbWluKG5ld2VzdFVzZWRWZWN0b3JMZW5n
dGgsIG5ld1VzZWRWZWN0b3JMZW5ndGgpOworICAgIHVuc2lnbmVkIGNsZWFyRWxlbWVudHNUaHJl
c2hvbGQgPSBtaW4obmV3ZXN0VXNlZFZlY3Rvckxlbmd0aCwgdXNlZFZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgIAorICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAg
IEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3Ig
aXRlcjsKKyAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBlbGVtZW50c1RvRXh0cmFjdFRocmVzaG9sZDsgKytpKSB7CisgICAgICAgIGluZGV4
aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAgICAgICAgKytpdGVyOworICAgIH0K
KyAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgIGZvciAodW5zaWduZWQg
aSA9IGVsZW1lbnRzVG9FeHRyYWN0VGhyZXNob2xkOyBpIDwgdW5kZWZpbmVkRWxlbWVudHNUaHJl
c2hvbGQ7ICsraSkKKyAgICAgICAgaW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5zZXRV
bmRlZmluZWQoKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZl
Y3RvciBhcmUgemVyb2VkIG91dC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB1bmRlZmluZWRFbGVt
ZW50c1RocmVzaG9sZDsgaSA8IGNsZWFyRWxlbWVudHNUaHJlc2hvbGQ7ICsraSkKKyAgICAgICAg
aW5kZXhpbmdEYXRhPGluZGV4aW5nVHlwZT4oKVtpXS5jbGVhcigpOworICAgIAorICAgIGlmICho
YXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworfQorCit2b2lkIEpTQXJy
YXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBBU1NFUlQoIWlu
U3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUNsYXNzOgorICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgICAgICBhcnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IHVu
ZGVmaW5lZEVsZW1lbnRzVGhyZXNob2xkOworICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoK
KyAgICAgICAgc29ydFZlY3RvcjxBcnJheVdpdGhDb250aWd1b3VzPihleGVjLCBjb21wYXJlRnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIHJldHVybjsKIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBzb3J0VmVjdG9yPEFycmF5V2l0aEFycmF5
U3RvcmFnZT4oZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAg
ICAgICByZXR1cm47Ci0gICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkzOCwxMTMgKzExNjcsMTI3IEBAIHZvaWQgSlNBcnJheTo6
c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChF
eGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogeworICAgIHVuc2ln
bmVkIGkgPSAwOworICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvcjsKKyAgICAKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKKyAgICAgICAgdmVjdG9yRW5kID0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgY2FzZSBBUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsK
LSAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBm
b3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZm9yICg7IGkgPCBzdG9yYWdlLT5sZW5ndGgoKTsgKytpKQotICAg
ICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdmVjdG9yRW5kID0gbWlu
KHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHZlY3RvciA9IDA7CisgICAgICAg
IHZlY3RvckVuZCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBmb3IgKDsg
aSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9
IHZlY3RvcltpXTsKKyAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOwogICAgIH0KKyAgICAKKyAgICBmb3IgKDsgaSA8IGxlbmd0
aCgpOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZvaWQg
SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHVpbnQzMl90IGxlbmd0aCkKIHsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKyAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CisgICAg
CiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7CiAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7CisgICAg
ICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgICAgIHZlY3RvckVu
ZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAg
IGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICghdikKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAg
ICAgIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgdmVjdG9yID0gMDsK
KyAgICAgICAgdmVjdG9yRW5kID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKICAgICB9CisgICAg
CisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1
bWVudChpLCBnZXQoZXhlYywgaSkpOwogfQogCi11bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9y
U29ydGluZygpCit0ZW1wbGF0ZTxJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlPgordm9pZCBKU0Fy
cmF5Ojpjb21wYWN0Rm9yU29ydGluZyh1bnNpZ25lZCYgbnVtRGVmaW5lZCwgdW5zaWduZWQmIG5l
d1JlbGV2YW50TGVuZ3RoKQogewogICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7
CisgICAgQVNTRVJUKGluZGV4aW5nVHlwZSA9PSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
OwogCi0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBjYXNl
IEFycmF5Q2xhc3M6Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgIHVuc2lnbmVkIG15UmVsZXZhbnRMZW5ndGggPSByZWxldmFudExlbmd0aDxpbmRleGluZ1R5
cGU+KCk7CisgICAgCisgICAgbnVtRGVmaW5lZCA9IDA7CisgICAgdW5zaWduZWQgbnVtVW5kZWZp
bmVkID0gMDsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAg
ICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgIGZvciAoOyBudW1EZWZpbmVkIDwg
bXlSZWxldmFudExlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGlu
ZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgIGlm
ICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
ICAgIAotICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVt
RGVmaW5lZCkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAg
ICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIodik7Ci0gICAgICAgICAgICB9CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRGVmaW5lZDsgaSA8IG15UmVsZXZhbnRMZW5ndGg7ICsraSkgeworICAgICAgICBKU1Zh
bHVlIHYgPSBpbmRleGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW2ldLmdldCgpOworICAgICAgICBp
ZiAodikgeworICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAg
ICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRl
eGluZ0RhdGE8aW5kZXhpbmdUeXBlPigpW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZl
Y3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0gICAgICAgIAotICAgICAg
ICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7Ci0gICAg
ICAgIAotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rv
ckxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KICAg
ICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0KKyAgICBuZXdSZWxldmFudExlbmd0aCA9IG51bURlZmlu
ZWQgKyBudW1VbmRlZmluZWQ7CisgICAgCisgICAgaWYgKGhhc0FycmF5U3RvcmFnZShpbmRleGlu
Z1R5cGUpKQorICAgICAgICBBU1NFUlQoIWFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1JlbGV2YW50TGVu
Z3RoOyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+KClbaV0uc2V0VW5k
ZWZpbmVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3UmVsZXZhbnRMZW5ndGg7IGkgPCBt
eVJlbGV2YW50TGVuZ3RoOyArK2kpCisgICAgICAgIGluZGV4aW5nRGF0YTxpbmRleGluZ1R5cGU+
KClbaV0uY2xlYXIoKTsKIAorICAgIGlmIChoYXNBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkK
KyAgICAgICAgYXJyYXlTdG9yYWdlKCktPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdSZWxldmFu
dExlbmd0aDsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDYw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHB1c2goRXhlY1N0YXRlKiwgSlNWYWx1
ZSk7CiAgICAgICAgIEpTVmFsdWUgcG9wKEV4ZWNTdGF0ZSopOwogCi0gICAgICAgIGJvb2wgc2hp
ZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7
Ci0gICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5k
ZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAgICAgICAgZW51bSBTaGlmdENvdW50TW9kZSB7CisgICAg
ICAgICAgICAvLyBUaGlzIGZvcm0gb2Ygc2hpZnQgaGludHMgdGhhdCB3ZSdyZSBkb2luZyBxdWV1
ZWluZy4gV2l0aCB0aGlzIGFzc3VtcHRpb24gaW4gaGFuZCwKKyAgICAgICAgICAgIC8vIHdlIGNv
bnZlcnQgdG8gQXJyYXlTdG9yYWdlLCB3aGljaCBoYXMgcXVldWUgb3B0aW1pemF0aW9ucy4KKyAg
ICAgICAgICAgIFNoaWZ0Q291bnRGb3JTaGlmdCwKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gVGhpcyBmb3JtIG9mIHNoaWZ0IGhpbnRzIHRoYXQgd2UncmUganVzdCBkb2luZyBjYXJlIGFu
ZCBmZWVkaW5nIG9uIGFuIGFycmF5IHRoYXQKKyAgICAgICAgICAgIC8vIGlzIHByb2JhYmx5IHR5
cGljYWxseSB1c2VkIGZvciBvcmRpbmFyeSBhY2Nlc3Nlcy4gV2l0aCB0aGlzIGFzc3VtcHRpb24g
aW4gaGFuZCwKKyAgICAgICAgICAgIC8vIHdlIHRyeSB0byBwcmVzZXJ2ZSB3aGF0ZXZlciBpbmRl
eGluZyB0eXBlIGl0IGhhcyBhbHJlYWR5LgorICAgICAgICAgICAgU2hpZnRDb3VudEZvclNwbGlj
ZQorICAgICAgICB9OworCisgICAgICAgIGJvb2wgc2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4
LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAg
ICB9CisgICAgICAgIGJvb2wgc2hpZnRDb3VudEZvclNwbGljZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoZXhlYywgc3RhcnRJbmRleCwg
Y291bnQpOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlPFNoaWZ0Q291bnRNb2RlIHNoaWZ0
Q291bnRNb2RlPgorICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzaGlmdENvdW50TW9kZSkgeworICAgICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9y
U2hpZnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRGb3JTaGlmdChleGVjLCBz
dGFydEluZGV4LCBjb3VudCk7CisgICAgICAgICAgICBjYXNlIFNoaWZ0Q291bnRGb3JTcGxpY2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRGb3JTcGxpY2UoZXhlYywgc3RhcnRJ
bmRleCwgY291bnQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBz
dGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkp
OworICAgICAgICB9CisgICAgICAgIGJvb2wgdW5zaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKGV4ZWMs
IHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTxTaGlmdENv
dW50TW9kZSBzaGlmdENvdW50TW9kZT4KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3dpdGNoIChzaGlmdENvdW50TW9kZSkgeworICAgICAgICAgICAgY2Fz
ZSBTaGlmdENvdW50Rm9yU2hpZnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3Vu
dEZvclNoaWZ0KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGNhc2UgU2hp
ZnRDb3VudEZvclNwbGljZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50Rm9y
U3BsaWNlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNT
dGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CkBAIC05NCwxOCAr
MTQ2LDQ0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPck51bGwoKTsKICAgICAgICAgICAgIGlmICgh
c3RvcmFnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAt
Pmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBz
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJvb2wgc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSop
OwogCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0
YWJsZSk7Ci0KKyAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KTsKKyAgICAgICAg
Ym9vbCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0
YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAgYm9vbCB1
bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCBib29sLCB1bnNpZ25lZCk7CisKKyAg
ICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAgdm9pZCBz
b3J0TnVtZXJpY1ZlY3RvcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJik7CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB2b2lkIHNvcnRDb21wYWN0ZWRWZWN0b3Io
RXhlY1N0YXRlKiwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBiZWdpbiwgdW5zaWduZWQgcmVsZXZh
bnRMZW5ndGgpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmco
KTsKKyAgICAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZT4KKyAgICAgICAg
dm9pZCBzb3J0VmVjdG9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxs
VHlwZSwgY29uc3QgQ2FsbERhdGEmKTsKKworICAgICAgICBib29sIHNldExlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0
aW9uLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVj
U3RhdGUqLCBib29sIHdyaXRhYmxlKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIHZvaWQgY29tcGFjdEZvclNvcnRpbmcodW5z
aWduZWQmIG51bURlZmluZWQsIHVuc2lnbmVkJiBuZXdSZWxldmFudExlbmd0aCk7CiAgICAgfTsK
IAorICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUNvbnRpZ3VvdXNBcnJheUJ1dHRlcmZseShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAg
IEluZGV4aW5nSGVhZGVyIGhlYWRlcjsKKyAgICAgICAgaGVhZGVyLnNldFZlY3Rvckxlbmd0aChz
dGQ6Om1heChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBoZWFkZXIuc2V0UHVi
bGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gQnV0dGVyZmx5
OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBoZWFkZXIsIGhl
YWRlci52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5
QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKICAgICB7CiAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGUoCkBAIC0xMjEsNyArMTk5LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpT
QXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0
aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHk7CisgICAgICAgIGlmIChM
SUtFTFkoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhDb250aWd1b3VzKSkg
eworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQ29udGlndW91c0FycmF5QnV0dGVyZmx5
KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxM
ZW5ndGggPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ID09IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UKKyAgICAgICAgICAgICAgICB8fCAoaW5p
dGlhbExlbmd0aCAmJiBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aEFycmF5
U3RvcmFnZSkpOworICAgICAgICAgICAgYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHko
Z2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhl
YXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKICAgICAgICAg
YXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7
CkBAIC0xMzMsMTUgKzIyMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKHZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIHRlbXA7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
ZnJvbUJhc2UodGVtcCwgMCwgMCk7Ci0gICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7
Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7Ci0gICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKLSAgICAgICAgc3RvcmFnZS0+
bV9zcGFyc2VNYXAuY2xlYXIoKTsKLSAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5OworICAgICAg
ICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoQ29udGln
dW91cykpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAg
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCAwLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgJnRlbXApKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJm
bHktPnNldFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIDApOworICAgICAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGlu
ZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgICAgICAgICBzdG9y
YWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7
CiAgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVj
dGlibGVPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKLSAgICBtX2FycmF5U3RydWN0dXJlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5
U3RvcmFnZSkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bV9hcnJheVByb3RvdHlwZS5nZXQoKSwgQXJyYXlXaXRoQ29udGlndW91cykpOworICAgIG1fYXJy
YXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJy
YXlQcm90b3R5cGUuZ2V0KCksIEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOwogICAgIG1fYXJyYXlT
dHJ1Y3R1cmVGb3JTbG93UHV0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fYXJyYXlQcm90b3R5
cGUuZ2V0KCksIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKTsKICAgICBtX3JlZ0V4cE1h
dGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBN
YXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKIApAQCAtMzU3LDcgKzM1OCw3IEBAIE9iamVjdHNXaXRo
QnJva2VuSW5kZXhpbmdGaW5kZXI6Ok9iamVjdHMKIGlubGluZSBib29sIGhhc0Jyb2tlbkluZGV4
aW5nKEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgLy8gVGhpcyB3aWxsIGNoYW5nZSBpZiB3ZSBo
YXZlIG1vcmUgaW5kZXhpbmcgdHlwZXMuCi0gICAgcmV0dXJuICEhKG9iamVjdC0+c3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICByZXR1cm4gISEob2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgJiAoSGFzQXJyYXlTdG9yYWdlIHwgSGFz
Q29udGlndW91cykpOwogfQogCiB2b2lkIE9iamVjdHNXaXRoQnJva2VuSW5kZXhpbmdGaW5kZXI6
Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQpAQCAtNDEwLDYgKzQxMSw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OmhhdmVBQmFkVGltZShKU0dsb2IKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwg
SlNBcnJheSBhbGxvY2F0aW9ucyB0aGF0IGxvYWQgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBm
cm9tCiAgICAgLy8gdGhpcyBvYmplY3Qgbm93IGxvYWQgYSBzdHJ1Y3R1cmUgdGhhdCB1c2VzIFNs
b3dQdXQuCiAgICAgbV9hcnJheVN0cnVjdHVyZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9hcnJh
eVN0cnVjdHVyZUZvclNsb3dQdXQuZ2V0KCkpOworICAgIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJy
YXlTdG9yYWdlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1
dC5nZXQoKSk7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIG9iamVjdHMgdGhhdCBo
YXZlIGluZGV4ZWQgc3RvcmFnZSBzd2l0Y2ggdG8gdGhlIHNsb3cga2luZCBvZgogICAgIC8vIGlu
ZGV4ZWQgc3RvcmFnZS4KQEAgLTQ4NSw2ICs0ODcsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmFt
ZVNjb3BlU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcmd1
bWVudHNTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5
U3RydWN0dXJlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVN0cnVj
dHVyZVdpdGhBcnJheVN0b3JhZ2UpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEzMDgw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9uYW1lU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJndW1lbnRzU3RydWN0dXJlOwogICAgICAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlOyAvLyBUaGlzIGdldHMgc2V0IHRv
IG1fYXJyYXlTdHJ1Y3R1cmVGb3JTbG93UHV0IGFzIHNvb24gYXMgd2UgZGVjaWRlIHRvIGhhdmUg
YSBiYWQgdGltZS4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheVN0cnVj
dHVyZVdpdGhBcnJheVN0b3JhZ2U7IC8vIFRoaXMgZ2V0cyBzZXQgdG8gbV9hcnJheVN0cnVjdHVy
ZUZvclNsb3dQdXQgYXMgc29vbiBhcyB3ZSBkZWNpZGUgdG8gaGF2ZSBhIGJhZCB0aW1lLgogICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5U3RydWN0dXJlRm9yU2xvd1B1dDsK
ICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9ib29sZWFuT2JqZWN0U3RydWN0dXJl
OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrQ29uc3RydWN0b3JT
dHJ1Y3R1cmU7CkBAIC0yNjcsNyArMjY4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0
cnVjdHVyZSogbmFtZVNjb3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2NvcGVT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJlKiBhcmd1bWVudHNTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1N0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBT
dHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheVN0cnVjdHVy
ZS5nZXQoKTsgfQorICAgICAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlV2l0aEFycmF5U3Rv
cmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlTdG9yYWdlLmdl
dCgpOyB9CiAgICAgICAgIHZvaWQqIGFkZHJlc3NPZkFycmF5U3RydWN0dXJlKCkgeyByZXR1cm4g
Jm1fYXJyYXlTdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogYWRkcmVzc09mQXJyYXlTdHJ1Y3R1
cmVXaXRoQXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gJm1fYXJyYXlTdHJ1Y3R1cmVXaXRoQXJyYXlT
dG9yYWdlOyB9CiAgICAgICAgIFN0cnVjdHVyZSogYm9vbGVhbk9iamVjdFN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgICAgICBT
dHJ1Y3R1cmUqIGNhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICAgICAgU3RydWN0dXJl
KiBjYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja0Z1
bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9CkBAIC00NzksNyArNDgyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGggPSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCk7
CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpbml0
aWFsTGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPyBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlV2l0aEFycmF5U3RvcmFnZSgpIDogZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpLCBpbml0aWFsTGVuZ3RoKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3Ry
dWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAw
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMjQgKzEzMSw0MyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUu
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVu
dFRhcmdldDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJj
ZTsKKyAgICAgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgY3VycmVudFRh
cmdldCA9IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgICAgIGN1cnJl
bnRTb3VyY2UgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobmV3QnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8PSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBjb3VudCA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7CiAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhl
YWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Ci0gICAgICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3I7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIChj
dXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2Ug
PSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBj
b3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwogICAg
ICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cCkKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gMDsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50U291cmNlID0gMDsKKyAgICAgICAgICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJy
ZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJm
bHk7CkBAIC0xNTgsNiArMTc3LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNp
dEJ1dHRlcgogICAgICAgICAKICAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlh
dGUuCiAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCksIGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwKQpAQCAtMjM0LDYgKzI1NiwyMCBAQCBib29sIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09i
amVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgIGlm
ICh2YWx1ZSkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0
aCgpKQpAQCAtMzUxLDYgKzM4NywxNiBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgCiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHk7
CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtwcm9w
ZXJ0eU5hbWVdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAg
ICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgocHJvcGVydHlOYW1lICsgMSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKQEAgLTQ0Myw2ICs0ODksMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJE
aWN0aW9uYXJ5SQogdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgaG9ycmlibHkgaW5lZmZpY2llbnQsIGFzIGl0IHdpbGwg
cGVyZm9ybSB0d28gY29udmVyc2lvbnMuIFdlIGNvdWxkIG9wdGltaXplCisgICAgICAgIC8vIHRo
aXMgY2FzZSBpZiB3ZSBldmVyIGNhcmVkLgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBjb252ZXJ0Q29u
dGlndW91c1RvQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0
YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjUs
NiArNTE2LDI0IEBAIHZvaWQgSlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWMKICAg
ICBnbG9iYWxPYmplY3QoKS0+aGF2ZUFCYWRUaW1lKGdsb2JhbERhdGEpOwogfQogCitXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQ29udGlndW91cyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobGVuZ3Ro
IDwgTUFYX0FSUkFZX0lOREVYKTsKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRl
eGVkUHJvcGVydGllcyhvbGRUeXBlKSk7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+bmVlZHNT
bG93UHV0SW5kZXhpbmcoKSk7CisgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkp
OworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9WRUNU
T1JfTEVOKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93
QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5n
dGgobGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgpOworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQ29udGlndW91cyk7
CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJl
KTsKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cit9CisKIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQogewogICAgIEluZGV4
aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOwpAQCAtNDgwLDcg
KzU0OSw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICBy
ZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CiAgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVj
dG9yID0gMDsKICAgICByZXN1bHQtPm1faW5kZXhCaWFzID0gMDsKLSAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkSW5kZXhpbmdUcmFuc2l0aW9uKCkp
OworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRB
cnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwogICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBu
ZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ5
MCwxNiArNTU5LDk2IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnIK
ICAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9S
X0xFTik7CiB9CiAKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b24gdHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQoreworICAgIEFTU0VSVChoYXND
b250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAgIAorICAgIHVuc2ln
bmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNp
Z25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7
CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUo
KTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRl
VW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5lZWRlZExlbmd0aCkpOworICAgIAorICAgIG1l
bWNweSgKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlT
aXplLAorICAgICAgICBwcm9wZXJ0eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAg
ICAKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChuZWVkZWRMZW5ndGgpOwor
ICAgIG5ld1N0b3JhZ2UtPnNldExlbmd0aChwdWJsaWNMZW5ndGgpOworICAgIG5ld1N0b3JhZ2Ut
Pm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgbmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOwor
ICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IHB1YmxpY0xlbmd0aDsgaS0tOykgeworICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICBpZiAoIXYpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2KTsKKyAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcisr
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCB0cmFuc2l0aW9u
KTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1
cmUpOworICAgIHJldHVybiBuZXdTdG9yYWdlOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIGNvbnZl
cnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29u
dmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7
CisgICAgcmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCktPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Cit9CisKK1dy
aXRlQmFycmllcjxVbmtub3duPiogSlNPYmplY3Q6OmVuc3VyZUNvbnRpZ3VvdXNTbG93KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBp
ZiAoVU5MSUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IHN0cnVjdHVyZSgpLT5uZWVk
c1Nsb3dQdXRJbmRleGluZygpKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gY3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMoZ2xvYmFsRGF0YSwgMCk7CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFn
ZVNsb3coSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewogICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworICAgICAg
ICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5uZWVkc1Nsb3dQdXRJbmRleGluZygpKTsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAg
ICAgIAogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoVU5M
SUtFTFkoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKSkKICAgICAgICAgICAgIHJldHVybiBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitCdXR0
ZXJmbHkqIEpTT2JqZWN0OjplbnN1cmVJbmRleGVkU3RvcmFnZVNsb3coSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGlmIChVTkxJS0VM
WShzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkpCisgICAgICAgICAgICByZXR1
cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKS0+YnV0dGVyZmx5KCk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZShnbG9iYWxEYXRhKS0+YnV0dGVyZmx5KCk7CisgICAgICAgIHJldHVybiBCdXR0ZXJm
bHk6OmZyb21Db250aWd1b3VzKGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKGdsb2JhbERhdGEsIDAp
KTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KQEAgLTUwNyw2ICs2NTYsMTAgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgd2F5IG1vcmUgZWZmaWNpZW50
LCBpZiB3ZSBjYXJlZC4KKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAKICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwg
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgCkBAIC01MjYsNiArNjc5LDEx
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmEKIHZvaWQgSlNPYmpl
Y3Q6OnN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CiB7CiAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewogICAgICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2Up
OwpAQCAtNTY5LDggKzcyNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnNldFByb3RvdHlwZShKU0dsb2Jh
bERhdGEKICAgICBpZiAoc2hvdWxkVXNlU2xvd1B1dChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgbmV3U3RydWN0dXJlLCBTd2l0Y2hU
b1Nsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBuZXdT
dHJ1Y3R1cmUpOworICAgIHN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsK
IH0KIAogYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTcwNCw2ICs4NjEsMTQgQEAg
Ym9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCisgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5OworICAgICAgICBpZiAoaSA+PSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzogewogICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIApAQCAtODc3LDYgKzEwNDIsMTcg
QEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG9iamVjdC0+bV9idXR0ZXJmbHk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5n
dGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9i
amVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKQEAgLTExMDIsOSAr
MTI3OCw2IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKIHsKICAg
ICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKICAgICAKLSAgICBpZiAoZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCi0gICAgICAgIG5vdGlm
eVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0KICAgICBp
ZiAoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpIHsKICAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdy
ZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJlZ3VsYXIgYXJyYXkKICAgICAgICAg
Ly8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmli
dXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVsdCB0byBmYWxzZQpAQCAtMTExNCwx
MCArMTI4NywxMyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAg
ICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3Iu
dmFsdWUoKSwgMCwgdGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDog
UHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgIH0KLQorICAgICAgICAKICAg
ICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgfQogCisgICAgaWYgKGRlc2NyaXB0b3IuYXR0
cmlidXRlcygpICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQorICAgICAgICBub3RpZnlQcmVzZW5j
ZU9mSW5kZXhlZEFjY2Vzc29ycyhleGVjLT5nbG9iYWxEYXRhKCkpOworCiAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cC5nZXQoKTsKICAgICBBU1NFUlQobWFwKTsKIApAQCAtMTI2Niw2ICsxNDQyLDM1IEBAIGJvb2wg
SlNPYmplY3Q6OmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW4KICAgICByZXR1cm4gYXNPYmplY3Qo
cHJvdG90eXBlVmFsdWUpLT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlRm9yUHJv
dG90eXBlKGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAKK3ZvaWQgSlNP
YmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJp
YnV0ZXMoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IEFTU0VSVChoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpOworICAg
IEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKyAgICAKKyAgICAvLyBGb3IgdXMg
dG8gZ2V0IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRoZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMg
bGVuZ3RoLCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxl
bmd0aC4KKyAgICBBU1NFUlQoaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
IAorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICAKKyAgICBpZiAoaSA+PSBNQVhfQVJSQVlfSU5ERVggLSAxCisgICAgICAgIHx8IChpID49IE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVgKKyAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKGksIGNvdW50RWxlbWVudHNJbkNvbnRpZ3VvdXMobV9idXR0ZXJmbHkpKSkpIHsKKyAgICAg
ICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7CisgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xv
YmFsRGF0YSk7CisgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIGZh
bHNlKTsKKyAgICAgICAgQVNTRVJUKGkgPj0gYXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKTsKKyAg
ICAgICAgYXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChpICsgMSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKTsK
KworICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9
CisKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQogewogICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKQEAgLTEzNDgsMTcgKzE1NTMsMjkgQEAg
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6IHsKICAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkgewotICAgICAg
ICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
aSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhl
YywgaSwgdmFsdWUsIHNob3VsZFRocm93LAorICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7Ci0gICAg
ICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAw
LCAwKSk7CisgICAgICAgIGlmIChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKKyAgICAg
ICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAg
ICAgICAgICAgICAgIGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+bmVlZHNTbG93UHV0SW5kZXhpbmcoKSkgeworICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNyZWF0ZUluaXRpYWxDb250aWd1
b3VzKGdsb2JhbERhdGEsIGkgKyAxKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rv
ckxlbmd0aCgwLCAwLCBpICsgMSkpOwotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yID0gMTsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Cisg
ICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJp
YnV0ZXMoZXhlYywgaSwgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApA
QCAtMTM4NCw4ICsxNjAxLDEwIEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW4KIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlLCBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UpCiB7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotCisgICAgCiAgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRl
eCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChoYXNB
cnJheVN0b3JhZ2Uoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKGFy
cmF5U3RvcmFnZSgpID09IHN0b3JhZ2UpOwogICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpIHx8IGF0dHJpYnV0ZXMpOwogICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRF
WCk7CiAKQEAgLTE0NjcsMTQgKzE2ODYsMzIgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0bwogICAgIAogICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgaWYg
KGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKLSAgICAgICAgaWYgKCFp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCkKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7Ci0gICAgICAgIAotICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEs
IGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOwotICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFy
c2UoKSB8fCBhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAorICAgICAgICAgICAgICAgIGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLAorICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgewor
ICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywg
bW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoc3RydWN0dXJlKCktPm5lZWRzU2xvd1B1dEluZGV4aW5nKCkpIHsKKyAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxE
YXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNyZWF0ZUluaXRpYWxDb250
aWd1b3VzKGdsb2JhbERhdGEsIGkgKyAxKVtpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVh
ZE9ubHkgfCBBY2Nlc3NvcikpIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgZXhlYywg
aSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSkpOworICAgICAgICB9CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhDb250aWd1b3VzV2l0aG91dEF0dHJpYnV0ZXMoZXhlYywgaSwgdmFsdWUpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0OTksMTIgKzE3MzYsNyBAQCBBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgZWxzZSBpZiAoIWN1cnJlbnRW
ZWN0b3JMZW5ndGgpCiAgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHN0ZDo6bWF4KGRlc2lyZWRM
ZW5ndGgsIGxhc3RBcnJheVNpemUpOwogICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGlj
YWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdM
ZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFz
ZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8g
VGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5j
cmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRl
c2lyZWRMZW5ndGggJiAxKTsKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gdGltZXNUaHJlZVBs
dXNPbmVEaXZpZGVkQnlUd28oZGVzaXJlZExlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJUKGlu
Y3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKQEAgLTE1MjQsOSArMTc1NiwxMCBAQCBB
TFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAgICAgIHZlY3Rvckxl
bmd0aCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENS
QVNIKCk7CkBAIC0xNTM1LDYgKzE3NjgsMTYgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09i
amVjdDo6Z2V0TmV3VgogICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
LCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOwogfQogCit1bnNpZ25lZCBKU09iamVjdDo6Y291bnRF
bGVtZW50c0luQ29udGlndW91cyhCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK3sKKyAgICB1bnNpZ25l
ZCBudW1WYWx1ZXMgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7IGktLTspIHsKKyAgICAgICAgaWYgKGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
KQorICAgICAgICAgICAgbnVtVmFsdWVzKys7CisgICAgfQorICAgIHJldHVybiBudW1WYWx1ZXM7
Cit9CisKIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24g
bGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVj
YXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCkBA
IC0xNTQzLDYgKzE3ODYsMTAgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgo
SlNHbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICBpZiAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVgKKyAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobmV3TGVuZ3Ro
LCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CkBAIC0xNTc0LDYg
KzE4MjEsMjIgQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbAogICAg
IHJldHVybiB0cnVlOwogfQogCit2b2lkIEpTT2JqZWN0OjplbnN1cmVDb250aWd1b3VzTGVuZ3Ro
U2xvdyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBB
U1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKKyAgICBBU1NFUlQoaGFzQ29udGlndW91
cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQobGVuZ3RoID4gbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JM
ZW5ndGggPSBzdGQ6Om1pbigKKyAgICAgICAgbGVuZ3RoIDw8IDEsCisgICAgICAgIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpOworICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dB
cnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCisgICAgICAgIG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCisgICAgICAgIG5ld1ZlY3Rvckxlbmd0
aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKK30KKwogQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091
dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90IG5ld1NpemUpCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKQEAgLTE2
MDIsNiArMTg2NSwxNyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
CiAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewor
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+bV9idXR0ZXJmbHk7CisgICAg
ICAgIGlmIChpID49IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLCAwKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVj
dC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdl
LT5sZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDggKzE0OCw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjEsOCArMTYyLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTIwNyw2ICsy
MDksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwg
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV07CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ld
OwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIxOCw2ICsyMjIsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICAgICAg
ewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgp
OwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIzMSwxMiArMjM3LDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIGlmIChpIDwgbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkgewotICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ld
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB2OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ld
LmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI2Nyw5ICsyNzQsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgogICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOwogICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
OgogICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAg
ICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKQpAQCAtMjg1LDggKzI5Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
ICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk2LDE1ICszMDUsMjMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgICAgICB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAg
IEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsK
KyAgICAgICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3JbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBvbGQgPSB4LmdldCgpOwor
ICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAg
ICAgIGlmICghb2xkKSB7CiAgICAgICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3Ro
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0zMTUsNiArMzMyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdikKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pmxlbmd0aCgpKTsKQEAgLTMzMSw2ICszNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgogICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwOwpAQCAtMzQ0LDYgKzM2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewogICAg
ICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5T
cGFyc2VNb2RlKCk7CkBAIC01NDEsNiArNTY2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBmb28tPmF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5SW5kZXhPbkhvbGUoLi4uKTsKICAgICAg
ICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyAwIGlm
IGNvbnRpZ3VvdXMgc3RvcmFnZSBjYW5ub3QgYmUgY3JlYXRlZCAtIGVpdGhlciBiZWNhdXNlCisg
ICAgICAgIC8vIGluZGV4aW5nIHNob3VsZCBiZSBzcGFyc2Ugb3IgYmVjYXVzZSB3ZSdyZSBoYXZp
bmcgYSBiYWQgdGltZS4KKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250
aWd1b3VzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKExJS0VMWShoYXNDb250aWd1b3VzKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3coZ2xvYmFsRGF0
YSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmpl
Y3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLiBVc2UKICAgICAgICAg
Ly8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2
ZSByZXF1aXJlZCB0aGUKICAgICAgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZl
IGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CkBAIC01NTMsNiArNTg4LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFnZVNs
b3coZ2xvYmFsRGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIEJ1dHRlcmZseSog
ZW5zdXJlSW5kZXhlZFN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoTElLRUxZKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGVuc3VyZUluZGV4ZWRTdG9yYWdlU2xv
dyhnbG9iYWxEYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBwdHJk
aWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKQEAgLTYxNSwxMSArNjU4LDE2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAg
QXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNyZWF0ZUluaXRpYWxDb250aWd1b3VzKEpT
R2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY29u
dmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSog
Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24pOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9B
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIAogICAgICAgICBBcnJheVN0b3Jh
Z2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5k
ZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aENvbnRpZ3VvdXNXaXRob3V0QXR0cmlidXRlcyhFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwogICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CiAKICAgICAg
ICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpOwpAQCAtNjMwLDYgKzY3OCw1NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBub3RpZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhKU0dsb2JhbERhdGEmKTsKICAgICAg
ICAgCiAgICAgICAgIGJvb2wgYXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9uSG9sZShFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAg
ICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRv
IHN1Y2NlZWQgYW5kIHlvdSdyZSBzdXJlIHRoYXQKKyAgICAgICAgLy8gdGhlIGFycmF5IGlzIGNv
bnRpZ3VvdXMuCisgICAgICAgIHZvaWQgZW5zdXJlQ29udGlndW91c0xlbmd0aChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKKyAg
ICAgICAgICAgICAgICBlbnN1cmVDb250aWd1b3VzTGVuZ3RoU2xvdyhnbG9iYWxEYXRhLCBsZW5n
dGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpIDwgbGVuZ3RoKQorICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNM
ZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY291
bnRFbGVtZW50c0luQ29udGlndW91cyhCdXR0ZXJmbHkqKTsKKyAgICAgICAgCisgICAgICAgIHRl
bXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU+CisgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogaW5kZXhpbmdEYXRhKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlPgorICAgICAgICB1bnNpZ25lZCByZWxldmFudExlbmd0aCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgIHByaXZh
dGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC02NjQs
NyArNzYyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBlbnN1cmVDb250aWd1b3VzTGVu
Z3RoU2xvdyhKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBlbnN1cmVDb250aWd1b3VzU2xvdyhKU0dsb2JhbERh
dGEmKTsKICAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KEpTR2xv
YmFsRGF0YSYpOworICAgICAgICBCdXR0ZXJmbHkqIGVuc3VyZUluZGV4ZWRTdG9yYWdlU2xvdyhK
U0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBCdXR0ZXJm
bHkqIG1fYnV0dGVyZmx5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZS5jcHAJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBK
U1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoRXhlYwogCiBjaGFyKiBKU1ZhbHVlOjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMTI4Owor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsKICAgICBzdGF0aWMgY2hhciBkZXNj
cmlwdGlvbltzaXplXTsKIAogICAgIGlmICghKnRoaXMpCkBAIC0yMTMsOSArMjEzLDEyIEBAIGNo
YXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkgY29uc3QKICAgICAgICAgdS5hc0RvdWJsZSA9IGFz
RG91YmxlKCk7CiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAl
MDh4OiUwOHgsICVsZiIsIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0sIGFzRG91
YmxlKCkpOwogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChpc0NlbGwoKSkKLSAgICAgICAgc25wcmlu
dGYoZGVzY3JpcHRpb24sIHNpemUsICJDZWxsOiAlcCIsIGFzQ2VsbCgpKTsKLSAgICBlbHNlIGlm
IChpc1RydWUoKSkKKyAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKSB7CisgICAgICAgIHNucHJpbnRm
KAorICAgICAgICAgICAgZGVzY3JpcHRpb24sIHNpemUsICJDZWxsOiAlcCAoJXA6ICVzLCAlcyki
LAorICAgICAgICAgICAgYXNDZWxsKCksIGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgYXNDZWxsKCkt
PnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLAorICAgICAgICAgICAgaW5kZXhp
bmdUeXBlVG9TdHJpbmcoYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkpKTsKKyAgICB9IGVsc2UgaWYgKGlzVHJ1ZSgpKQogICAgICAgICBzbnByaW50
ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIlRydWUiKTsKICAgICBlbHNlIGlmIChpc0ZhbHNlKCkpCiAg
ICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRmFsc2UiKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxMzA4MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAjaWYgIUVO
QUJMRShZQVJSX0pJVCkKICAgICB1c2VSZWdFeHBKSVQoKSA9IGZhbHNlOwogI2VuZGlmCi0KKyAg
ICAKICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtlIGNvcnJlY3Rp
b25zIHRvIHRoZSBvcHRpb25zOgogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAg
QVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JP
cHRpbWl6ZVNvb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiwxMSArMzI2LDE1IEBA
IGJvb2wgU3RydWN0dXJlOjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXIKICAgICB9CiB9CiAKLU5v
blByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlv
bigpIGNvbnN0Citib29sIFN0cnVjdHVyZTo6bmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdAog
ewotICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKTsKLSAg
ICAKLSAgICBpZiAoYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcygp
IHx8IGdsb2JhbE9iamVjdCgpLT5pc0hhdmluZ0FCYWRUaW1lKCkpCisgICAgcmV0dXJuIGFueU9i
amVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKQorICAgICAgICB8fCBnbG9i
YWxPYmplY3QoKS0+aXNIYXZpbmdBQmFkVGltZSgpOworfQorCitOb25Qcm9wZXJ0eVRyYW5zaXRp
b24gU3RydWN0dXJlOjpzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3QKK3sK
KyAgICBpZiAobmVlZHNTbG93UHV0SW5kZXhpbmcoKSkKICAgICAgICAgcmV0dXJuIEFsbG9jYXRl
U2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICAKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3Jh
Z2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2
aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpIGNvbnN0OwogICAgICAgICAKLSAgICAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9u
IHN1Z2dlc3RlZEluZGV4aW5nVHJhbnNpdGlvbigpIGNvbnN0OworICAgICAgICBib29sIG5lZWRz
U2xvd1B1dEluZGV4aW5nKCkgY29uc3Q7CisgICAgICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiBz
dWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3Q7CiAgICAgICAgIAogICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxP
YmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2Jq
ZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUuaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaQogLy8gU3VwcG9y
dCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVk
IHRvIHByb3BlcnRpZXMuCiAvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcg
cG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgogZW51bSBOb25Qcm9wZXJ0eVRyYW5zaXRp
b24geworICAgIEFsbG9jYXRlQ29udGlndW91cywKICAgICBBbGxvY2F0ZUFycmF5U3RvcmFnZSwK
ICAgICBBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UsCiAgICAgU3dpdGNoVG9TbG93UHV0QXJy
YXlTdG9yYWdlLApAQCAtNTcsMTIgKzU4LDE2IEBAIGlubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0
ZXMoTm9uUHJvcGVydHkKIGlubGluZSBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlKEluZGV4
aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKIHsKICAg
ICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9jYXRlQ29udGlndW91czoKKyAg
ICAgICAgQVNTRVJUKCEob2xkVHlwZSAmIChIYXNBcnJheVN0b3JhZ2UgfCBIYXNTbG93UHV0QXJy
YXlTdG9yYWdlKSkpOworICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0NvbnRpZ3VvdXM7CiAg
ICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBI
YXNBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNDb250aWd1b3Vz
KSB8IEhhc0FycmF5U3RvcmFnZTsKICAgICBjYXNlIEFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFn
ZToKLSAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNTbG93UHV0QXJyYXlTdG9yYWdlOworICAg
ICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SGFzQ29udGlndW91cykgfCBIYXNTbG93UHV0QXJyYXlT
dG9yYWdlOwogICAgIGNhc2UgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBB
U1NFUlQob2xkVHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgIEFTU0VSVCghKG9sZFR5
cGUgJiBIYXNDb250aWd1b3VzKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5IYXNBcnJh
eVN0b3JhZ2UpIHwgSGFzU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICBjYXNlIEFkZEluZGV4ZWRB
Y2Nlc3NvcnM6CiAgICAgICAgIHJldHVybiBvbGRUeXBlIHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3Nv
cnM7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMC0wOSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgaW5mZXIgd2hlbiBpbmRleGVk
IHN0b3JhZ2UgaXMgY29udGlndW91cywgYW5kIG9wdGltaXplIGZvciBpdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyODgKKworICAgICAgICBSZXZp
ZXdlZCBieSBNYXJrIEhhaG5lbmJlcmcuCisKKyAgICAgICAgTW92ZWQgb3V0IHRoaXMgaGVscGZ1
bCBtYXRoIHV0aWxpdHkgdG8gTWF0aEV4dHJhcywgc2luY2Ugd2Ugbm93IHVzZSBpdCBpbgorICAg
ICAgICBtdWx0aXBsZSBwbGFjZXMuCisKKyAgICAgICAgKiB3dGYvTWF0aEV4dHJhcy5oOgorICAg
ICAgICAodGltZXNUaHJlZVBsdXNPbmVEaXZpZGVkQnlUd28pOgorCiAyMDEyLTEwLTA4ICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBHZW5lcmFsaXpl
IG1vdmluZyBVUkxDb21wb25lbnQncyBiZWdpbiBwb3NpdGlvbgpJbmRleDogU291cmNlL1dURi93
dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBib29sIGhhc1R3b08KICAgICByZXR1cm4gIWhhc1plcm9Pck9uZUJpdHNTZXQodmFsdWUpOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCB0aW1lc1RocmVlUGx1c09uZURpdmlk
ZWRCeVR3byhUIHZhbHVlKQoreworICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86
CisgICAgLy8gICAodmFsdWUgKiAzICsgMSkgLyAyOworICAgIC8vIG9yOgorICAgIC8vICAgKHVu
c2lnbmVkKWNlaWwodmFsdWUgKiAxLjUpKTsKKyAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25l
IHRvIGludGVybmFsIG92ZXJmbG93LgorICAgIHJldHVybiB2YWx1ZSArICh2YWx1ZSA+PiAxKSAr
ICh2YWx1ZSAmIDEpOworfQorCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICFDT01QSUxFUihSVkNU
KSAmJiAhT1MoU09MQVJJUykKIHVzaW5nIHN0ZDo6aXNmaW5pdGU7CiAjaWYgIUNPTVBJTEVSX1FV
SVJLKEdDQzExX0dMT0JBTF9JU0lORl9JU05BTikK
</data>

          </attachment>
      

    </bug>

</bugzilla>