<?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>105007</bug_id>
          
          <creation_ts>2012-12-14 03:04:30 -0800</creation_ts>
          <short_desc>[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</short_desc>
          <delta_ts>2013-02-11 03:53:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>105009</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Krzysztof Czech">k.czech</reporter>
          <assigned_to name="Krzysztof Czech">k.czech</assigned_to>
          <cc>apinheiro</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>791499</commentid>
    <comment_count>0</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-12-14 03:04:30 -0800</bug_when>
    <thetext>This is a continuation of 99011 bug. We started there sharing Accessibility bits related to WebKitTestRunner.
I think we can do the same in DumpRenderTree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791511</commentid>
    <comment_count>1</comment_count>
      <attachid>179461</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-12-14 03:20:32 -0800</bug_when>
    <thetext>Created attachment 179461
[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791535</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-12-14 04:30:03 -0800</bug_when>
    <thetext>Looks good to me too, providing the patch is just about renaming files after applying patch for bug 105009 (and it seems so).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808296</commentid>
    <comment_count>3</comment_count>
      <attachid>182962</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-16 05:15:08 -0800</bug_when>
    <thetext>Created attachment 182962
[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812918</commentid>
    <comment_count>4</comment_count>
      <attachid>183963</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-22 04:21:40 -0800</bug_when>
    <thetext>Created attachment 183963
[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816590</commentid>
    <comment_count>5</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-25 07:41:33 -0800</bug_when>
    <thetext>*** Bug 105009 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816607</commentid>
    <comment_count>6</comment_count>
      <attachid>184755</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-25 08:21:16 -0800</bug_when>
    <thetext>Created attachment 184755
[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816610</commentid>
    <comment_count>7</comment_count>
      <attachid>184757</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-25 08:23:33 -0800</bug_when>
    <thetext>Created attachment 184757
[GTK][EFL] Isolates GTK&apos;s DumpRenderTree code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816615</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-25 08:27:19 -0800</bug_when>
    <thetext>Attachment 184757 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/atk/AccessibilityCallbacks.h&apos;, u&apos;Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp&apos;, u&apos;Tools/DumpRenderTree/efl/CMakeLists.txt&apos;, u&apos;Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp&apos;, u&apos;Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h&apos;, u&apos;Tools/GNUmakefile.am&apos;]&quot; exit_code: 1
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:75:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:79:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:80:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:81:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:91:  signal_query is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:108:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 6 in 5 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>816619</commentid>
    <comment_count>9</comment_count>
      <attachid>184755</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-25 08:31:35 -0800</bug_when>
    <thetext>Comment on attachment 184755
[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.

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

Looks good to me.

&gt; Tools/ChangeLog:8
&gt;  
&gt;          Reviewed by NOBODY (OOPS!).
&gt;  
&gt; +        Shares specific ATK&apos;s accessibility implementation.

Your ChangeLog seems corrupt here. You probably won&apos;t be able to use the commit queue because of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819938</commentid>
    <comment_count>10</comment_count>
      <attachid>185432</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-30 01:21:39 -0800</bug_when>
    <thetext>Created attachment 185432
[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819942</commentid>
    <comment_count>11</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-30 01:28:06 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 184755 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184755&amp;action=review
&gt; 
&gt; Looks good to me.
&gt; 
&gt; &gt; Tools/ChangeLog:8
&gt; &gt;  
&gt; &gt;          Reviewed by NOBODY (OOPS!).
&gt; &gt;  
&gt; &gt; +        Shares specific ATK&apos;s accessibility implementation.
&gt; 
&gt; Your ChangeLog seems corrupt here. You probably won&apos;t be able to use the commit queue because of this.

Corrected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819946</commentid>
    <comment_count>12</comment_count>
      <attachid>185433</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-01-30 01:30:39 -0800</bug_when>
    <thetext>Created attachment 185433
[GTK][EFL] Isolates GTK&apos;s DumpRenderTree code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819948</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 01:32:49 -0800</bug_when>
    <thetext>Attachment 185433 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/atk/AccessibilityCallbacks.h&apos;, u&apos;Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp&apos;, u&apos;Tools/DumpRenderTree/efl/CMakeLists.txt&apos;, u&apos;Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp&apos;, u&apos;Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h&apos;, u&apos;Tools/GNUmakefile.am&apos;]&quot; exit_code: 1
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:75:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:79:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:80:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:81:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:91:  signal_query is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Tools/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:108:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 6 in 5 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>821253</commentid>
    <comment_count>14</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-01-31 01:43:01 -0800</bug_when>
    <thetext>I think you don&apos;t need to divide this patch into two patches. This patch is just to move gtk files to atk. As far as I know, WebKit prefers to land one patch per bug.

BTW, How about fixing style error together ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824216</commentid>
    <comment_count>15</comment_count>
      <attachid>186341</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-02-04 03:53:11 -0800</bug_when>
    <thetext>Created attachment 186341
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824218</commentid>
    <comment_count>16</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-02-04 03:54:19 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I think you don&apos;t need to divide this patch into two patches. This patch is just to move gtk files to atk. As far as I know, WebKit prefers to land one patch per bug.
&gt; 
&gt; BTW, How about fixing style error together ?

Done. 
I merged both previous patches into one and fixed style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824224</commentid>
    <comment_count>17</comment_count>
      <attachid>186341</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-04 04:00:13 -0800</bug_when>
    <thetext>Comment on attachment 186341
Updated patch

Attachment 186341 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16369177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824235</commentid>
    <comment_count>18</comment_count>
      <attachid>186345</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-02-04 04:15:20 -0800</bug_when>
    <thetext>Created attachment 186345
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827178</commentid>
    <comment_count>19</comment_count>
      <attachid>186345</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-02-07 01:33:16 -0800</bug_when>
    <thetext>Comment on attachment 186345
Updated patch

LGTM. I think GTK folks should sign off on this patch. Martin ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827244</commentid>
    <comment_count>20</comment_count>
      <attachid>186345</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-02-07 03:09:47 -0800</bug_when>
    <thetext>Comment on attachment 186345
Updated patch

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

Informal GTK review here: lgtm too. Just a couple of comments below (probably won&apos;t mean a single change anyway)

&gt; Tools/ChangeLog:145
&gt; +        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
&gt; +        (AccessibilityController::focusedElement):
&gt; +        (AccessibilityController::rootElement):
&gt; +        (AccessibilityController::accessibleElementById):

Just a comment: I guess you&apos;re leaving these three out of the merge because they are implemented in terms of DumpRenderTreeSupportGtk and so you plan to add EFL equivalent functions in the future in a DumpRenderTree/efl/AccessibilityControllerEfl.cpp file, right?

With regard to this, this makes me think that DumpRenderTreeSupportGtk might be yet another good candidate to be split in different files, in order to share implementation with other ports like EFL. At least the implementation of getRootElement() and getFocusedElement() should be the same, I think. But this is just a rant for another moment :)

&gt; Tools/DumpRenderTree/efl/CMakeLists.txt:2
&gt; +    ${TOOLS_DIR}/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp

Stupid CMake newbie question: Don&apos;t you need to add here AccessibilityControllerAtk.cpp and AccessibilityUIElementAtk.cpp too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828358</commentid>
    <comment_count>21</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-02-08 02:20:46 -0800</bug_when>
    <thetext>

(In reply to comment #20)
&gt; (From update of attachment 186345 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186345&amp;action=review
&gt; 
&gt; Informal GTK review here: lgtm too. Just a couple of comments below (probably won&apos;t mean a single change anyway)
&gt; 
&gt; &gt; Tools/ChangeLog:145
&gt; &gt; +        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
&gt; &gt; +        (AccessibilityController::focusedElement):
&gt; &gt; +        (AccessibilityController::rootElement):
&gt; &gt; +        (AccessibilityController::accessibleElementById):
&gt; 
Just a comment: I guess you&apos;re leaving these three out of the merge because &gt; they are implemented in terms of DumpRenderTreeSupportGtk and so you plan to add EFL equivalent functions in the future in a &gt; &gt; &gt; &gt; &gt; DumpRenderTree/efl/AccessibilityControllerEfl.cpp file, right?

&gt; Yes, exactly, that&apos;s my intention.

&gt; With regard to this, this makes me think that DumpRenderTreeSupportGtk might be yet another good candidate to be split in different files, in order to share implementation with other ports like EFL. At least the implementation of getRootElement() and getFocusedElement() should be the same, I think. But this is just a rant for another moment :)

&gt; I already provided implementation to EFL of those two methods. Indeed, sharing specific bits from DumpRenderTreeSupportGtk regarding ATK sounds great to me.

&gt; 
&gt; &gt; Tools/DumpRenderTree/efl/CMakeLists.txt:2
&gt; &gt; +    ${TOOLS_DIR}/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp
&gt; 
&gt; Stupid CMake newbie question: Don&apos;t you need to add here AccessibilityControllerAtk.cpp and AccessibilityUIElementAtk.cpp too?

&gt; Yes, You are right, but I thought about to add them along with respective implementation of AccessibilityControllerEfl.cpp and AccessibilityUIElementEfl.cpp, which is almost finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828359</commentid>
    <comment_count>22</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-02-08 02:25:55 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; 
&gt; (In reply to comment #20)
&gt; &gt; (From update of attachment 186345 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186345&amp;action=review
&gt; &gt; 
&gt; &gt; Informal GTK review here: lgtm too. Just a couple of comments below (probably won&apos;t mean a single change anyway)
&gt; &gt; 
&gt; &gt; &gt; Tools/ChangeLog:145
&gt; &gt; &gt; +        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
&gt; &gt; &gt; +        (AccessibilityController::focusedElement):
&gt; &gt; &gt; +        (AccessibilityController::rootElement):
&gt; &gt; &gt; +        (AccessibilityController::accessibleElementById):
&gt; &gt; 
&gt; Just a comment: I guess you&apos;re leaving these three out of the merge because &gt; &gt; they are implemented in terms of DumpRenderTreeSupportGtk and so you plan to &gt; add EFL equivalent functions in the future in a &gt; &gt; &gt; &gt; &gt; &gt; DumpRenderTree/efl/AccessibilityControllerEfl.cpp file, right?

Yes, exactly, that&apos;s my intention.
&gt; 
&gt; &gt; With regard to this, this makes me think that DumpRenderTreeSupportGtk &gt; &gt; &gt; might be yet another good candidate to be split in different files, in order &gt; to share implementation with other ports like EFL. At least the &gt; implementation of &gt; getRootElement() and getFocusedElement() should be the &gt; &gt; same, I think. But this &gt; is just a rant for another moment :)
 
I already provided implementation to EFL of those two methods. Indeed, sharing specific bits from DumpRenderTreeSupportGtk regarding ATK sounds great to me.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Tools/DumpRenderTree/efl/CMakeLists.txt:2
&gt; &gt; &gt; +    ${TOOLS_DIR}/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp
&gt; &gt; 
&gt; &gt; Stupid CMake newbie question: Don&apos;t you need to add here AccessibilityControllerAtk.cpp and AccessibilityUIElementAtk.cpp too?
&gt; 
Yes, You are right, but I thought about to add them along with respective implementation of AccessibilityControllerEfl.cpp and AccessibilityUIElementEfl.cpp, which is almost finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828361</commentid>
    <comment_count>23</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-02-08 02:28:42 -0800</bug_when>
    <thetext>Thanks for answering my questions. Unless I&apos;m missing something not obvious, the patch lgtm 100% now.

(In reply to comment #22)
&gt; [...]
&gt; &gt; &gt; &gt; Tools/DumpRenderTree/efl/CMakeLists.txt:2
&gt; &gt; &gt; &gt; +    ${TOOLS_DIR}/DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp
&gt; &gt; &gt; 
&gt; &gt; &gt; Stupid CMake newbie question: Don&apos;t you need to add here 
&gt; &gt; &gt; AccessibilityControllerAtk.cpp and AccessibilityUIElementAtk.cpp too?
&gt; &gt; 
&gt; Yes, You are right, but I thought about to add them along with respective 
&gt; implementation of AccessibilityControllerEfl.cpp and 
&gt; AccessibilityUIElementEfl.cpp, which is almost finished.

Sounds good to me too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829533</commentid>
    <comment_count>24</comment_count>
      <attachid>187535</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-02-11 02:54:40 -0800</bug_when>
    <thetext>Created attachment 187535
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829567</commentid>
    <comment_count>25</comment_count>
      <attachid>187535</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 03:53:21 -0800</bug_when>
    <thetext>Comment on attachment 187535
Rebased patch

Clearing flags on attachment: 187535

Committed r142451: &lt;http://trac.webkit.org/changeset/142451&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829568</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 03:53:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179461</attachid>
            <date>2012-12-14 03:20:32 -0800</date>
            <delta_ts>2013-01-16 05:15:08 -0800</delta_ts>
            <desc>[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</desc>
            <filename>a11y-share-drt.patch</filename>
            <type>text/plain</type>
            <size>90658</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">Y29tbWl0IGM3YTdjMmFjNGVjNjZjZGQyY2RkZmZkN2U5OGNkYTg2NzRhYzkyODkKQXV0aG9yOiBL
cnp5c3p0b2YgQ3plY2ggPGsuY3plY2hAc2Ftc3VuZy5jb20+CkRhdGU6ICAgRnJpIERlYyA3IDE3
OjU3OjUyIDIwMTIgKzAxMDAKCiAgICBbR1RLXVtFRkxdW1dLMV1bRFJUXSBTaGFyZSBXZWJLaXQt
R1RLJ3MgRHVtcFJlbmRlclRyZWUgYWNjZXNzaWJpbGl0eSBpbXBsZW1lbnRhdGlvbiB3aXRoIG90
aGVyIFdlYmtpdCBwb3J0cwogICAgCiAgICBDaGFuZ2UtSWQ6IEkwYzE3NmE0NTE1NTg3ZjY4NzZi
ZGE5NGZhOTM0ZmFhMzc0YjA1NGU3CgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDA4YzcyMWQuLjYzM2RiM2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNDYgQEAKIDIwMTItMTIt
MDcgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CiAKKyAgICAgICAgW0dU
S11bRUZMXSBTaGFyZSBXZWJLaXQtR1RLJ3MgRHVtcFJlbmRlclRyZWUgYWNjZXNzaWJpbGl0eSBp
bXBsZW1lbnRhdGlvbiB3aXRoIG90aGVyIFdlYmtpdCBwb3J0cy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTAwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgYW5kIHJlbmFtZSBmaWxlcyByZWxh
dGVkIHRvIEFjY2Vzc2liaWxpdHkgZnJvbSBEdW1wUmVuZGVyVHJlZS9ndGsgdG8gRHVtcFJlbmRl
clRyZWUvYXRrLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlD
YWxsYmFja3MuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vz
c2liaWxpdHlDYWxsYmFja3MuY3BwLgorICAgICAgICAocHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQp
OgorICAgICAgICAoYXhPYmplY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKGNvbm5lY3RBY2Nl
c3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAgICAgKGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxi
YWNrcy5oOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxp
dHlDYWxsYmFja3MuaC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJBdGsuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnJvb3RFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnNldExvZ0ZvY3VzRXZlbnRzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpzZXRMb2dTY3JvbGxpbmdTdGFydEV2ZW50cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6c2V0TG9nVmFsdWVDaGFuZ2VFdmVudHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOiBS
ZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRHdGsuY3BwLgorICAgICAgICAocm9sZVRvU3RyaW5nKToKKyAgICAgICAgKHJlcGxhY2VDaGFy
YWN0ZXJzRm9yUmVzdWx0cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldExpbmtlZFVJRWxlbWVudHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Z2V0RG9jdW1lbnRMaW5rcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRD
aGlsZHJlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldp
dGhSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmluZGV4T2ZDaGlsZCk6CisgICAgICAgIChhdHRyaWJ1dGVTZXRUb1N0cmluZyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5r
cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm9sZURlc2NyaXB0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRp
dGxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmhlbHBUZXh0KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Ongp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoZWlnaHQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFgp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24pOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWluVmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFs
dWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbik6
CisgICAgICAgIChjaGVja0VsZW1lbnRTdGF0ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0VuYWJsZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5z
ZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzQWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
UmVxdWlyZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGllcmFyY2hpY2FsTGV2ZWwpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNFeHBhbmRlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0NoZWNrZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
Q29sdW1uSGVhZGVycyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZSb3dIZWFkZXJzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkNvbHVtbnMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mUm93cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZWaXNpYmxlQ2VsbHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mSGVhZGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5U
YWJsZSk6CisgICAgICAgIChpbmRleFJhbmdlSW5UYWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bGluZUZvckluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5k
c0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJh
bmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdG
b3JSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3Ry
aW5nUmFuZ2VJc01pc3NwZWxsZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bnVtYmVyQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzQXR0cmlidXRlU2V0dGFibGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNBdHRyaWJ1dGVTdXBwb3J0ZWQpOgorICAgICAgICAoYWx0ZXJDdXJyZW50VmFsdWUpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwcmVzcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVu
dSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5k
ZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1lbnRB
dEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkUm93QXRJ
bmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dBdEluZGV4KToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZEJ5Um93KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnVybCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0ZvY3VzYWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVj
dGFibGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFi
bGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFj
dGl2ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4pOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNJZ25vcmVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omhhc1BvcHVwKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQpOgorCisyMDEyLTEy
LTA3ICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNhbXN1bmcuY29tPgorCiAgICAgICAgIFtH
VEtdIElzb2xhdGUgR1RLIHNwZWNpZmljIGNvZGUgaW4gRHVtcFJlbmRlclRyZWUvZ3RrCiAgICAg
ICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjVhMWQwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAKQEAgLTAsMCArMSwxNjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIgorCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2lmIFBM
QVRGT1JNKEdUSykKKyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK3N0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxpc3RlbmVy
SWQgPSAwOworc3RhdGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBn
dWludCBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50
IGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHByb3BlcnR5Q2hh
bmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3Rl
bmVySWQgPSAwOworCitzdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmpl
Y3QqIGFjY2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hhciogc2ln
bmFsVmFsdWUpCit7CisgICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCBz
aWduYWxzLCBhcyB0aGUgQXRrT2JqZWN0CisgICAgLy8gYXNzb2NpYXRlZCB0byB0aGVtIHdpbGwg
bm90IGJlIHZhbGlkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KKyAgICBpZiAoIXNpZ25hbE5hbWUg
fHwgIWdfc3RyY21wMChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vz
c2libGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBnY2hhciogb2JqZWN0TmFtZSA9
IGF0a19vYmplY3RfZ2V0X25hbWUoYWNjZXNzaWJsZSk7CisgICAgQXRrUm9sZSBvYmplY3RSb2xl
ID0gYXRrX29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKKworICAgIC8vIFRyeSB0byBhbHdh
eXMgcHJvdmlkZSBhIG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgorICAgIGlmICgh
b2JqZWN0TmFtZSB8fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQorICAgICAgICBvYmplY3ROYW1lID0g
IihObyBuYW1lKSI7CisKKyAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFsdWUoc2ln
bmFsVmFsdWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBzaWduYWxW
YWx1ZSkgOiBnX3N0cmR1cChzaWduYWxOYW1lKSk7CisgICAgcHJpbnRmKCJBY2Nlc3NpYmlsaXR5
IG9iamVjdCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLAorICAg
ICAgICAgICBzaWduYWxOYW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZv
Y2F0aW9uSGludCAqc2lnbmFsSGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3VpbnQgbnVtUGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgLy8gQXQgbGVhc3Qgd2Ug
c2hvdWxkIHJlY2VpdmUgdGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCisgICAgaWYg
KG51bVBhcmFtVmFsdWVzIDwgMSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBBdGtPYmpl
Y3QqIGFjY2Vzc2libGUgPSBBVEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFyYW1WYWx1
ZXNbMF0pKTsKKyAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJs
ZSkpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbF9xdWVy
eTsKKyAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lOworICAgIEdPd25QdHI8Z2NoYXI+IHNp
Z25hbFZhbHVlOworCisgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAm
c2lnbmFsX3F1ZXJ5KTsKKworICAgIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxf
bmFtZSwgInN0YXRlLWNoYW5nZSIpKSB7CisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVw
X3ByaW50Zigic3RhdGUtY2hhbmdlOiVzIiwgZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVl
c1sxXSkpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBn
X3ZhbHVlX2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1syXSkpKTsKKyAgICB9IGVsc2UgaWYgKCFn
X3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiZm9jdXMtZXZlbnQiKSkgeworICAg
ICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cCgiZm9jdXMtZXZlbnQiKSk7CisgICAgICAgIHNp
Z25hbFZhbHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigm
cGFyYW1WYWx1ZXNbMV0pKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVy
eS5zaWduYWxfbmFtZSwgImNoaWxkcmVuLWNoYW5nZWQiKSkgeworICAgICAgICBzaWduYWxOYW1l
LnNldChnX3N0cmR1cCgiY2hpbGRyZW4tY2hhbmdlZCIpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUu
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF91aW50KCZwYXJhbVZhbHVlc1sx
XSkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1l
LCAicHJvcGVydHktY2hhbmdlIikpIHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBf
cHJpbnRmKCJwcm9wZXJ0eS1jaGFuZ2U6JXMiLCBnX3F1YXJrX3RvX3N0cmluZyhzaWduYWxIaW50
LT5kZXRhaWwpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVw
KHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSkpOworCisgICAgcHJpbnRBY2Nlc3NpYmlsaXR5RXZl
bnQoYWNjZXNzaWJsZSwgc2lnbmFsTmFtZS5nZXQoKSwgc2lnbmFsVmFsdWUuZ2V0KCkpOworCisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3Mo
KQoreworICAgIC8vIEVuc3VyZSBubyBjYWxsYmFja3MgYXJlIGNvbm5lY3RlZCBiZWZvcmUuCisg
ICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKKworICAgIC8vIEVuc3VyZSB0
aGF0IGFjY2Vzc2liaWxpdHkgaXMgaW5pdGlhbGl6ZWQgZm9yIHRoZSBXZWJWaWV3IGJ5IHF1ZXJ5
aW5nIGZvcgorICAgIC8vIHRoZSByb290IGFjY2Vzc2libGUgb2JqZWN0LCB3aGljaCB3aWxsIGNy
ZWF0ZSB0aGUgZnVsbCBoaWVyYXJjaHkuCisjaWYgUExBVEZPUk0oR1RLKQorICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7Cisj
ZW5kaWYKKworICAgIC8vIEFkZCBnbG9iYWwgbGlzdGVuZXJzIGZvciBBdGtPYmplY3QncyBzaWdu
YWxzLgorICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hhbmdl
Iik7CisgICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0
ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2ZW50Iik7
CisgICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxf
ZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDphY3Rp
dmUtZGVzY2VuZGFudC1jaGFuZ2VkIik7CisgICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9
IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFU
SzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIpOworICAgIHByb3BlcnR5Q2hhbmdlZExpc3Rl
bmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVu
ZXIsICJBVEs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIpOworICAgIHZpc2libGVEYXRhQ2hh
bmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2
ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnZpc2libGUtZGF0YS1jaGFuZ2VkIik7CisKKyAg
ICAvLyBFbnN1cmUgdGhlIEF0ayBpbnRlcmZhY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQsIG90aGVy
d2lzZQorICAgIC8vIHRoZSBBdGtEb2N1bWVudCBzaWduYWwgaGFuZGxlcnMgYmVsb3cgd29uJ3Qg
Z2V0IHJlZ2lzdGVyZWQuCisgICAgR09iamVjdCogZHVtbXlBeE9iamVjdCA9IEdfT0JKRUNUKGdf
b2JqZWN0X25ldyhBVEtfVFlQRV9PQkpFQ1QsIDApKTsKKyAgICBBdGtPYmplY3QqIGR1bW15Tm9P
cEF4T2JqZWN0ID0gYXRrX25vX29wX29iamVjdF9uZXcoZHVtbXlBeE9iamVjdCk7CisgICAgZ19v
YmplY3RfdW5yZWYoR19PQkpFQ1QoZHVtbXlOb09wQXhPYmplY3QpKTsKKyAgICBnX29iamVjdF91
bnJlZihkdW1teUF4T2JqZWN0KTsKK30KKwordm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNh
bGxiYWNrcygpCit7CisgICAgLy8gQXRrT2JqZWN0IHNpZ25hbHMuCisgICAgaWYgKHN0YXRlQ2hh
bmdlTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihzdGF0ZUNoYW5nZUxpc3RlbmVySWQpOworICAgICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQg
PSAwOworICAgIH0KKyAgICBpZiAoZm9jdXNFdmVudExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQpOworICAg
ICAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlmIChhY3RpdmVEZXNj
ZW5kYW50Q2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAg
YWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKGNo
aWxkcmVuQ2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCk7CisgICAgICAgIGNoaWxkcmVu
Q2hhbmdlZExpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAocHJvcGVydHlDaGFuZ2VkTGlz
dGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihwcm9w
ZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJ
ZCA9IDA7CisgICAgfQorICAgIGlmICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKSB7Cisg
ICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRhQ2hhbmdl
ZExpc3RlbmVySWQpOworICAgICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsK
KyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3Np
YmlsaXR5Q2FsbGJhY2tzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0
eUNhbGxiYWNrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjU3NTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0
eUNhbGxiYWNrcy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlDYWxsYmFja3NfaAorI2RlZmluZSBBY2Nl
c3NpYmlsaXR5Q2FsbGJhY2tzX2gKKwordm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNr
cygpOwordm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckF0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJBdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYmQ0ZjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJBdGsuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIldlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCitzdGF0aWMgYm9vbCBsb2dnaW5n
QWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOworCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKK3sKK30KKworQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQo
KQoreworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGb2N1c2VkQWNjZXNzaWJsZUVsZW1lbnQobWFpbkZy
YW1lKTsKKyAgICBpZiAoIWFjY2Vzc2libGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7CisjZWxzZQorICAgIHJldHVy
biAwOworI2VuZGlmCit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKK3sKKyNpZiBQTEFURk9STShHVEspCisgICAgQXRrT2Jq
ZWN0KiBhY2Nlc3NpYmxlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRSb290QWNjZXNz
aWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKKyAgICBpZiAoIWFjY2Vzc2libGUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7
CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0cmlu
Z1JlZiBpZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKGJvb2wpCit7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1Njcm9sbGluZ1N0YXJ0
RXZlbnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExv
Z1ZhbHVlQ2hhbmdlRXZlbnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZl
bnRzKQoreworICAgIGlmIChsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzID09IGxvZ2dpbmdBY2Nlc3Np
YmlsaXR5RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxvZ0FjY2Vzc2liaWxp
dHlFdmVudHMpIHsKKyAgICAgICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsK
KyAgICAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7CisgICAg
bG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45MmEzZTMwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBAIC0wLDAgKzEs
MTAxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorCisjaWYgUExBVEZPUk0o
R1RLKQorI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5o
IgorI2VuZGlmCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNs
dWRlIDxhdGsvYXRrLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0No
YXJhY3Rlck5hbWVzLmg+CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHJvbGVUb1N0cmluZyhBdGtS
b2xlIHJvbGUpCit7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBBVEtfUk9MRV9BTEVS
VDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQWxlcnQiOworICAgIGNhc2UgQVRLX1JPTEVf
Q0FOVkFTOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDYW52YXMiOworICAgIGNhc2UgQVRL
X1JPTEVfQ0hFQ0tfQk9YOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDaGVja0JveCI7Cisg
ICAgY2FzZSBBVEtfUk9MRV9DT0xVTU5fSEVBREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhDb2x1bW5IZWFkZXIiOworICAgIGNhc2UgQVRLX1JPTEVfQ09NQk9fQk9YOgorICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhDb21ib0JveCI7CisgICAgY2FzZSBBVEtfUk9MRV9ET0NVTUVOVF9G
UkFNRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2ViQXJlYSI7CisgICAgY2FzZSBBVEtf
Uk9MRV9FTlRSWToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGV4dEZpZWxkIjsKKyAgICBj
YXNlIEFUS19ST0xFX0ZPT1RFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRm9vdGVyIjsK
KyAgICBjYXNlIEFUS19ST0xFX0ZPUk06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEZvcm0i
OworICAgIGNhc2UgQVRLX1JPTEVfR1JPVVBJTkc6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WEdyb3VwIjsKKyAgICBjYXNlIEFUS19ST0xFX0hFQURJTkc6CisgICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWEhlYWRpbmciOworICAgIGNhc2UgQVRLX1JPTEVfSU1BR0U6CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWEltYWdlIjsKKyAgICBjYXNlIEFUS19ST0xFX0lNQUdFX01BUDoKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYSW1hZ2VNYXAiOworICAgIGNhc2UgQVRLX1JPTEVfTEFCRUw6
CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExhYmVsIjsKKyAgICBjYXNlIEFUS19ST0xFX0xJ
Tks6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpbmsiOworICAgIGNhc2UgQVRLX1JPTEVf
TElTVDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdCI7CisgICAgY2FzZSBBVEtfUk9M
RV9MSVNUX0JPWDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdEJveCI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9MSVNUX0lURU06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3RJdGVt
IjsKKyAgICBjYXNlIEFUS19ST0xFX01FTlU6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1l
bnUiOworICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9CQVI6CisgICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWE1lbnVCYXIiOworICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9JVEVNOgorICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhNZW51SXRlbSI7CisgICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RBQjoKKyAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFiIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBR0VfVEFC
X0xJU1Q6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYkdyb3VwIjsKKyAgICBjYXNlIEFU
S19ST0xFX1BBTkVMOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhHcm91cCI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9QQVJBR1JBUEg6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBhcmFncmFw
aCI7CisgICAgY2FzZSBBVEtfUk9MRV9QQVNTV09SRF9URVhUOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhQYXNzd29yZEZpZWxkIjsKKyAgICBjYXNlIEFUS19ST0xFX1BVU0hfQlVUVE9OOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhCdXR0b24iOworICAgIGNhc2UgQVRLX1JPTEVfUkFE
SU9fQlVUVE9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSYWRpb0J1dHRvbiI7CisgICAg
Y2FzZSBBVEtfUk9MRV9ST1dfSEVBREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3dI
ZWFkZXIiOworICAgIGNhc2UgQVRLX1JPTEVfUlVMRVI6CisgICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWFJ1bGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9CQVI6CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWFNjcm9sbEJhciI7CisgICAgY2FzZSBBVEtfUk9MRV9TQ1JPTExfUEFORToK
KyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2Nyb2xsQXJlYSI7CisgICAgY2FzZSBBVEtfUk9M
RV9TRUNUSU9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhEaXYiOworICAgIGNhc2UgQVRL
X1JPTEVfU0VQQVJBVE9SOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhIb3Jpem9udGFsUnVs
ZSI7CisgICAgY2FzZSBBVEtfUk9MRV9TTElERVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WFNsaWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9TUElOX0JVVFRPTjoKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYU3BpbkJ1dHRvbiI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRToKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYVGFibGUiOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfQ0VM
TDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2VsbCI7CisgICAgY2FzZSBBVEtfUk9MRV9U
QUJMRV9DT0xVTU5fSEVBREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb2x1bW5IZWFk
ZXIiOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XOgorICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhSb3ciOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XX0hFQURFUjoKKyAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYUm93SGVhZGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX1RPR0dMRV9C
VVRUT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvZ2dsZUJ1dHRvbiI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9UT09MX0JBUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVG9vbGJhciI7
CisgICAgY2FzZSBBVEtfUk9MRV9UT09MX1RJUDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
VXNlckludGVyZmFjZVRvb2x0aXAiOworICAgIGNhc2UgQVRLX1JPTEVfVFJFRToKKyAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYVHJlZSI7CisgICAgY2FzZSBBVEtfUk9MRV9UUkVFX1RBQkxFOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlR3JpZCI7CisgICAgY2FzZSBBVEtfUk9MRV9U
UkVFX0lURU06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRyZWVJdGVtIjsKKyAgICBjYXNl
IEFUS19ST0xFX1dJTkRPVzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2luZG93IjsKKyAg
ICBjYXNlIEFUS19ST0xFX1VOS05PV046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFVua25v
d24iOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFdlIHdhbnQgdG8gZGlzdGluZ3Vpc2ggQVRL
X1JPTEVfVU5LTk9XTiBmcm9tIGEga25vd24gQXRrUm9sZSB3aGljaAorICAgICAgICAvLyBvdXIg
RFJUIGlzbid0IHByb3Blcmx5IGhhbmRsaW5nLgorICAgICAgICByZXR1cm4gIkFYUm9sZTogRklY
TUUgbm90IGlkZW50aWZpZWQiOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBnY2hhciogcmVw
bGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCit7CisgICAgU3RyaW5nIHVTdHJp
bmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0cik7CisKKyAgICAvLyBUaGUgb2JqZWN0IHJlcGxhY2Vt
ZW50IGNoYXJhY3RlciBpcyBwYXNzZWQgYWxvbmcgdG8gQVRzIHNvIHdlIG5lZWQgdG8gYmUKKyAg
ICAvLyBhYmxlIHRvIHRlc3QgZm9yIHRoZWlyIHByZXNlbmNlIGFuZCBkbyBzbyB3aXRob3V0IGNh
dXNpbmcgdGVzdCBmYWlsdXJlcy4KKyAgICB1U3RyaW5nLnJlcGxhY2Uob2JqZWN0UmVwbGFjZW1l
bnRDaGFyYWN0ZXIsICI8b2JqPiIpOworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIG5ld2xpbmUg
Y2hhcmFjdGVycyBpbiBhY2Nlc3NpYmxlIHRleHQgb2YgYSBzaW5nbGUgb2JqZWN0CisgICAgLy8g
aXMgYXBwcm9wcmlhdGUsIGJ1dCBpdCBtYWtlcyB0ZXN0IHJlc3VsdHMgKGVzcGVjaWFsbHkgdGhl
IGFjY2Vzc2libGUgdHJlZSkKKyAgICAvLyBoYXJkZXIgdG8gcmVhZC4KKyAgICB1U3RyaW5nLnJl
cGxhY2UoIlxuIiwgIjxcXG4+Iik7CisKKyAgICByZXR1cm4gZ19zdHJkdXAodVN0cmluZy51dGY4
KCkuZGF0YSgpKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1l
bnQpCit7CisgICAgaWYgKG1fZWxlbWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZWxlbWVu
dCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
Y29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCisgICAgOiBtX2VsZW1lbnQob3Ro
ZXIubV9lbGVtZW50KQoreworICAgIGlmIChtX2VsZW1lbnQpCisgICAgICAgIGdfb2JqZWN0X3Jl
ZihtX2VsZW1lbnQpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0
eVVJRWxlbWVudCgpCit7CisgICAgaWYgKG1fZWxlbWVudCkKKyAgICAgICAgZ19vYmplY3RfdW5y
ZWYobV9lbGVtZW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRMaW5r
ZWRVSUVsZW1lbnRzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudHMpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBjaGlsZHJlbikK
K3sKKyAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAgICAg
IGNoaWxkcmVuLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7CisgICAgfQor
fQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZl
Y3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudFZlY3RvciwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVu
ZDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAgICAgIGVsZW1lbnRW
ZWN0b3IuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKKyAgICB9Cit9CisK
K2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCgpCit7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2Vs
ZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25fcm93cyhBVEtfVEFCTEUobV9l
bGVtZW50KSk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCgp
Cit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJU
KEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25f
Y29sdW1ucyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjaGlsZHJlbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAg
IHJldHVybiBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oQVRLX09CSkVDVCht
X2VsZW1lbnQpKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgp
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY2hp
bGRyZW47CisgICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRyZW4sIGluZGV4LCBpbmRleCAr
IDEpOworCisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gY2hp
bGRyZW4uYXQoMCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQp
Cit7IAorICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworZ2NoYXIq
IGF0dHJpYnV0ZVNldFRvU3RyaW5nKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0KQorewor
ICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKKyAgICBmb3IgKEdTTGlzdCogYXR0
cmlidXRlcyA9IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXMtPm5leHQpIHsKKyAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNfY2Fz
dDxBdGtBdHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKKyAgICAgICAgR093blB0cjxnY2hh
cj4gYXR0cmlidXRlRGF0YShnX3N0cmNvbmNhdChhdHRyaWJ1dGUtPm5hbWUsICI6IiwgYXR0cmli
dXRlLT52YWx1ZSwgTlVMTCkpOworICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBhdHRyaWJ1
dGVEYXRhLmdldCgpKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMtPm5leHQpCisgICAgICAgICAg
ICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiLCAiKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19zdHJp
bmdfZnJlZShzdHIsIEZBTFNFKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YWxsQXR0cmlidXRlcygpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgQVNTRVJUKEFU
S19JU19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgR093blB0cjxnY2hhcj4gYXR0cmlidXRlRGF0
YShhdHRyaWJ1dGVTZXRUb1N0cmluZyhhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpF
Q1QobV9lbGVtZW50KSkpKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoYXR0cmlidXRlRGF0YS5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
RG9jdW1lbnRMaW5rcygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KCkKK3sKKworICAg
IGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a1JlbGF0aW9uU2V0
KiBzZXQgPSBhdGtfb2JqZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQp
KTsKKyAgICBpZiAoIXNldCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtPYmplY3QqIHRh
cmdldCA9IDA7CisgICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfbl9yZWxhdGlv
bnMoc2V0KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAg
QXRrUmVsYXRpb24qIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRpb24oc2V0
LCBpKTsKKyAgICAgICAgaWYgKGF0a19yZWxhdGlvbl9nZXRfcmVsYXRpb25fdHlwZShyZWxhdGlv
bikgPT0gQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKSB7CisgICAgICAgICAgICBHUHRyQXJyYXkq
IHRhcmdldExpc3QgPSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChyZWxhdGlvbik7CisgICAgICAg
ICAgICBpZiAodGFyZ2V0TGlzdC0+bGVuKQorICAgICAgICAgICAgICAgIHRhcmdldCA9IHN0YXRp
Y19jYXN0PEF0a09iamVjdCo+KGdfcHRyX2FycmF5X2luZGV4KHRhcmdldExpc3QsIDApKTsKKyAg
ICAgICAgfQorICAgICAgICBnX29iamVjdF91bnJlZihzZXQpOworICAgIH0KKworICAgIHJldHVy
biB0YXJnZXQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHRhcmdldCkgOiAwOworfQorCitBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQo
KQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VS
VChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAg
YXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgcmV0dXJu
IHBhcmVudCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7Cit9CisKK0pTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKK3sKKyAgICBBdGtSb2xl
IHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAg
aWYgKCFyb2xlKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKworICAgIFN0cmluZyByb2xlU3RyaW5nID0gcm9sZVRvU3RyaW5nKHJvbGUpOworICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyb2xlU3RyaW5nLnV0ZjgoKS5k
YXRhKCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xl
KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cm9sZURlc2NyaXB0aW9uKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQoreworICAgIGNvbnN0IGdjaGFyKiBu
YW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAg
aWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRp
dGxlOiAlcyIsIG5hbWUpKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhheFRpdGxlLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZGVzY3JpcHRpb24oKQoreworICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlvbiA9IGF0
a19vYmplY3RfZ2V0X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBp
ZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGF4RGVzYyhnX3N0cmR1cF9wcmludGYo
IkFYRGVzY3JpcHRpb246ICVzIiwgZGVzY3JpcHRpb24pKTsKKworICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheERlc2MuZ2V0KCkpOworfQorCitKU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCit7CisgICAgaWYgKCFtX2VsZW1l
bnQgfHwgIUFUS19JU19URVhUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9n
ZXRfdGV4dChBVEtfVEVYVChtX2VsZW1lbnQpLCAwLCAtMSk7CisgICAgR093blB0cjxnY2hhcj4g
YXhWYWx1ZShnX3N0cmR1cF9wcmludGYoIkFYVmFsdWU6ICVzIiwgcmVwbGFjZUNoYXJhY3RlcnNG
b3JSZXN1bHRzKHRleHQpKSk7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4VmFsdWUuZ2V0KCkpOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
fQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50
KSk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgQ1N0cmluZyBoZWxwVGV4dCA9IER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6YWNjZXNzaWJpbGl0eUhlbHBUZXh0KEFUS19PQkpFQ1QobV9lbGVt
ZW50KSk7CisgICAgR093blB0cjxnY2hhcj4gYXhIZWxwVGV4dChnX3N0cmR1cF9wcmludGYoIkFY
SGVscDogJXMiLCBoZWxwVGV4dC5kYXRhKCkpKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoYXhIZWxwVGV4dC5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiAwOwor
I2VuZGlmCit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkKK3sKKyAgICBp
bnQgeCwgeTsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQo
bV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKKworICAgIHJldHVybiB4OworfQor
Citkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSgpCit7CisgICAgaW50IHgsIHk7CisK
KyAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCks
ICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CisKKyAgICByZXR1cm4geTsKK30KKworZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKK3sKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsK
KworICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAm
d2lkdGgsICZoZWlnaHQpOworCisgICAgcmV0dXJuIHdpZHRoOworfQorCitkb3VibGUgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KCkKK3sKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKwor
ICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lk
dGgsICZoZWlnaHQpOworCisgICAgcmV0dXJuIGhlaWdodDsKK30KKworZG91YmxlIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKCkKK3sKKyAgICByZXR1cm4gMC5mOworfQorCitk
b3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkoKQoreworICAgIHJldHVy
biAwLmY7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmludFZhbHVlKCkgY29uc3QKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsg
eyAwIH0gfSB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAgICAg
cmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVF
KG1fZWxlbWVudCksICZ2YWx1ZSk7CisgICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1
ZSkpCisgICAgICAgIHJldHVybiAwLjBmOworICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9hdCgm
dmFsdWUpOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUoKQor
eworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07CisKKyAgICBpZiAoIUFUS19J
U19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0a192YWx1
ZV9nZXRfbWluaW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKKyAgICBp
ZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7Cisg
ICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Cit9CisKK2RvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCit7CisgICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7
IHsgMCB9IH0gfTsKKworICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAgICAg
IHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVlX2dldF9tYXhpbXVtX3ZhbHVlKEFUS19WQUxV
RShtX2VsZW1lbnQpLCAmdmFsdWUpOworICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFs
dWUpKQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQo
JnZhbHVlKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVE
ZXNjcmlwdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBhZnRlciBpdCBoYXMgYmVl
biBpbXBsZW1lbnRlZCBpbiBBVEsuCisgICAgLy8gU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21l
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTc2CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBs
YXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCit7CisgICAg
aWYgKCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQorICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9y
ZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QoZWxlbWVudCkpKTsKKyAgICByZXR1cm4gYXRrX3N0YXRl
X3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQoreworICAgIHJldHVybiBjaGVj
a0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9FTkFCTEVEKTsKK30KKworaW50IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcigpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQWN0aW9uU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGFjdGlvbikKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNGb2N1c2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4g
c3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSkpOworICAgIGdib29sZWFuIGlzRm9jdXNlZCA9IGF0a19zdGF0ZV9zZXRfY29u
dGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0VEKTsKKworICAgIHJl
dHVybiBpc0ZvY3VzZWQ7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxl
Y3RlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwg
QVRLX1NUQVRFX1NFTEVDVEVEKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhp
ZXJhcmNoaWNhbExldmVsKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorIAorSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKK3sgICAKKyAgICByZXR1
cm4gMDsgCit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCgpIGNv
bnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVm
KGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAgICBn
Ym9vbGVhbiBpc0V4cGFuZGVkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNl
dC5nZXQoKSwgQVRLX1NUQVRFX0VYUEFOREVEKTsKKworICAgIHJldHVybiBpc0V4cGFuZGVkOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmpl
Y3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAgICBnYm9vbGVhbiBp
c0NoZWNrZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBB
VEtfU1RBVEVfQ0hFQ0tFRCk7CisKKyAgICByZXR1cm4gaXNDaGVja2VkOworfQorCitKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZSb3dzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworaW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgSlNTdHJpbmdSZWYgaW5kZXhSYW5nZUluVGFi
bGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgYm9vbCBpc1Jvd1JhbmdlKQoreworICAgIEdP
d25QdHI8Z2NoYXI+IHJhbmdlU3RyaW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7CisKKyAgICBpZiAo
IWVsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhy
YW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChlbGVtZW50KSk7
CisKKyAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09C
SkVDVChlbGVtZW50KSk7CisgICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNfVEFCTEUoYXhUYWJs
ZSkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0
cmluZy5nZXQoKSk7CisKKyAgICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0aGUgdGFibGUuCisg
ICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KEFU
S19PQkpFQ1QoZWxlbWVudCkpOworICAgIGlmIChpbmRleEluUGFyZW50ID09IC0xKQorICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkp
OworCisgICAgaW50IHJvdyA9IC0xOworICAgIGludCBjb2x1bW4gPSAtMTsKKyAgICByb3cgPSBh
dGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4SW5QYXJl
bnQpOworICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KEFUS19UQUJM
RShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisKKyAgICAvLyBHZXQgdGhlIGFjdHVhbCB2YWx1
ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQgdmFsdWVzLgorICAgIGlmIChyb3cgIT0g
LTEgJiYgY29sdW1uICE9IC0xKSB7CisgICAgICAgIGludCBiYXNlID0gMDsKKyAgICAgICAgaW50
IGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChpc1Jvd1JhbmdlKSB7CisgICAgICAgICAgICBiYXNl
ID0gcm93OworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0
KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgYmFzZSA9IGNvbHVtbjsKKyAgICAgICAgICAgIGxlbmd0aCA9IGF0a190YWJsZV9n
ZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsKKyAg
ICAgICAgfQorICAgICAgICByYW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJpbnRmKCJ7JWQsICVk
fSIsIGJhc2UsIGxlbmd0aCkpOworICAgIH0KKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQoreworICAgIC8vIFJhbmdlIGluIHRh
YmxlIGZvciByb3dzLgorICAgIHJldHVybiBpbmRleFJhbmdlSW5UYWJsZShtX2VsZW1lbnQsIHRy
dWUpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRl
eFJhbmdlKCkKK3sKKyAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3IgY29sdW1ucy4KKyAgICByZXR1
cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCBmYWxzZSk7Cit9CisKK2ludCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50KQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfSAKKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0
cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ1JhbmdlSXNNaXNz
cGVsbGVkKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4
dCwgSlNTdHJpbmdSZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0KQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2ln
bmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7CisKKyAg
ICBBdGtPYmplY3QqIGZvdW5kQ2VsbCA9IGF0a190YWJsZV9yZWZfYXQoQVRLX1RBQkxFKG1fZWxl
bWVudCksIHJvdywgY29sdW1uKTsKKyAgICByZXR1cm4gZm91bmRDZWxsID8gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudChmb3VuZENlbGwpIDogMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25l
ZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRl
VmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworZG91
YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5n
UmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDAu
MGY7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVl
KEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmli
dXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1V
SUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKK3sKKyAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChBVEtfSVNfVkFMVUUoZWxlbWVudCkpOworCisgICAg
R1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBhdGtfdmFsdWVfZ2V0X2N1
cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKKworICAgIEdW
YWx1ZSBpbmNyZW1lbnQgPSBHX1ZBTFVFX0lOSVQ7CisgICAgYXRrX3ZhbHVlX2dldF9taW5pbXVt
X2luY3JlbWVudChBVEtfVkFMVUUoZWxlbWVudCksICZpbmNyZW1lbnQpOworCisgICAgR1ZhbHVl
IG5ld1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmbmV3VmFsdWUsIEdf
VFlQRV9GTE9BVCk7CisKKyAgICBnX3ZhbHVlX3NldF9mbG9hdCgmbmV3VmFsdWUsIGdfdmFsdWVf
Z2V0X2Zsb2F0KCZjdXJyZW50VmFsdWUpICsgZmFjdG9yICogZ192YWx1ZV9nZXRfZmxvYXQoJmlu
Y3JlbWVudCkpOworICAgIGF0a192YWx1ZV9zZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxl
bWVudCksICZuZXdWYWx1ZSk7CisKKyAgICBnX3ZhbHVlX3Vuc2V0KCZuZXdWYWx1ZSk7CisgICAg
Z192YWx1ZV91bnNldCgmaW5jcmVtZW50KTsKKyAgICBnX3ZhbHVlX3Vuc2V0KCZjdXJyZW50VmFs
dWUpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCit7Cisg
ICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAxKTsKK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpkZWNyZW1lbnQoKQoreworICAgIGFsdGVyQ3VycmVudFZhbHVlKG1fZWxl
bWVudCwgLTEpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNzKCkKK3sK
KyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKEFUS19J
U19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBpZiAoIUFUS19JU19BQ1RJT04obV9lbGVtZW50
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT25seSBvbmUgYWN0aW9uIHBlciBvYmplY3Qg
aXMgc3VwcG9ydGVkIHNvIGZhci4KKyAgICBhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtfQUNUSU9O
KG1fZWxlbWVudCksIDApOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dN
ZW51KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkUm93QXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGlu
ZGV4KQoreworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30K
KworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9z
ZWRCeVJvdygpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29k
aW5nKCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpF
Q1QobV9lbGVtZW50KSk7CisgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUp
CisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVudF9nZXRf
YXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiRW5jb2RpbmciKSk7Cit9
CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKK3sK
KyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSk7CisgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCisgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVudF9nZXRfYXR0cmlidXRl
X3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiVVJJIikpOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09i
amVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Cit7CisgICAg
aWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3Rf
cmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAgICBnYm9vbGVhbiBpc0Zv
Y3VzYWJsZSA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFU
S19TVEFURV9GT0NVU0FCTEUpOworCisgICAgcmV0dXJuIGlzRm9jdXNhYmxlOworfQorCitib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNj
cmVlbigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFr
ZUZvY3VzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJlbW92ZVNlbGVjdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUoKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3Jv
bGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50Cit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDVhMWQwZjguLjAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2li
aWxpdHlDYWxsYmFja3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIgotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2lmIFBMQVRGT1JN
KEdUSykKLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
aCIKLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+Ci0KLXN0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAw
Owotc3RhdGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKLXN0YXRpYyBndWludCBh
Y3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IGNoaWxk
cmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdlZExp
c3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQg
PSAwOwotCi1zdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmplY3QqIGFj
Y2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hhciogc2lnbmFsVmFs
dWUpCi17Ci0gICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCBzaWduYWxz
LCBhcyB0aGUgQXRrT2JqZWN0Ci0gICAgLy8gYXNzb2NpYXRlZCB0byB0aGVtIHdpbGwgbm90IGJl
IHZhbGlkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KLSAgICBpZiAoIXNpZ25hbE5hbWUgfHwgIWdf
c3RyY21wMChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBnY2hhciogb2JqZWN0TmFtZSA9IGF0a19v
YmplY3RfZ2V0X25hbWUoYWNjZXNzaWJsZSk7Ci0gICAgQXRrUm9sZSBvYmplY3RSb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKLQotICAgIC8vIFRyeSB0byBhbHdheXMgcHJv
dmlkZSBhIG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgotICAgIGlmICghb2JqZWN0
TmFtZSB8fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQotICAgICAgICBvYmplY3ROYW1lID0gIihObyBu
YW1lKSI7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFsdWUoc2lnbmFsVmFs
dWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBzaWduYWxWYWx1ZSkg
OiBnX3N0cmR1cChzaWduYWxOYW1lKSk7Ci0gICAgcHJpbnRmKCJBY2Nlc3NpYmlsaXR5IG9iamVj
dCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLAotICAgICAgICAg
ICBzaWduYWxOYW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9u
SGludCAqc2lnbmFsSGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3VpbnQgbnVtUGFyYW1WYWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxk
IHJlY2VpdmUgdGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCi0gICAgaWYgKG51bVBh
cmFtVmFsdWVzIDwgMSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBBdGtPYmplY3QqIGFj
Y2Vzc2libGUgPSBBVEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFyYW1WYWx1ZXNbMF0p
KTsKLSAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCi0g
ICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKLSAg
ICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lOwotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbFZh
bHVlOwotCi0gICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFs
X3F1ZXJ5KTsKLQotICAgIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSwg
InN0YXRlLWNoYW5nZSIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50
Zigic3RhdGUtY2hhbmdlOiVzIiwgZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVlc1sxXSkp
KTsKLSAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVl
X2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1syXSkpKTsKLSAgICB9IGVsc2UgaWYgKCFnX3N0cmNt
cDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiZm9jdXMtZXZlbnQiKSkgewotICAgICAgICBz
aWduYWxOYW1lLnNldChnX3N0cmR1cCgiZm9jdXMtZXZlbnQiKSk7Ci0gICAgICAgIHNpZ25hbFZh
bHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigmcGFyYW1W
YWx1ZXNbMV0pKSk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWdu
YWxfbmFtZSwgImNoaWxkcmVuLWNoYW5nZWQiKSkgewotICAgICAgICBzaWduYWxOYW1lLnNldChn
X3N0cmR1cCgiY2hpbGRyZW4tY2hhbmdlZCIpKTsKLSAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdf
c3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF91aW50KCZwYXJhbVZhbHVlc1sxXSkpKTsK
LSAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAicHJv
cGVydHktY2hhbmdlIikpIHsKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRm
KCJwcm9wZXJ0eS1jaGFuZ2U6JXMiLCBnX3F1YXJrX3RvX3N0cmluZyhzaWduYWxIaW50LT5kZXRh
aWwpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKHNpZ25h
bF9xdWVyeS5zaWduYWxfbmFtZSkpOwotCi0gICAgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoYWNj
ZXNzaWJsZSwgc2lnbmFsTmFtZS5nZXQoKSwgc2lnbmFsVmFsdWUuZ2V0KCkpOwotCi0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQotewot
ICAgIC8vIEVuc3VyZSBubyBjYWxsYmFja3MgYXJlIGNvbm5lY3RlZCBiZWZvcmUuCi0gICAgZGlz
Y29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IGFj
Y2Vzc2liaWxpdHkgaXMgaW5pdGlhbGl6ZWQgZm9yIHRoZSBXZWJWaWV3IGJ5IHF1ZXJ5aW5nIGZv
cgotICAgIC8vIHRoZSByb290IGFjY2Vzc2libGUgb2JqZWN0LCB3aGljaCB3aWxsIGNyZWF0ZSB0
aGUgZnVsbCBoaWVyYXJjaHkuCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7Ci0jZW5kaWYK
LQotICAgIC8vIEFkZCBnbG9iYWwgbGlzdGVuZXJzIGZvciBBdGtPYmplY3QncyBzaWduYWxzLgot
ICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVy
KGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hhbmdlIik7Ci0g
ICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihh
eE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2ZW50Iik7Ci0gICAg
YWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRf
bGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDphY3RpdmUtZGVz
Y2VuZGFudC1jaGFuZ2VkIik7Ci0gICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19h
ZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtP
YmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIpOwotICAgIHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQg
PSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJB
VEs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIpOwotICAgIHZpc2libGVEYXRhQ2hhbmdlZExp
c3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlz
dGVuZXIsICJBVEs6QXRrT2JqZWN0OnZpc2libGUtZGF0YS1jaGFuZ2VkIik7Ci0KLSAgICAvLyBF
bnN1cmUgdGhlIEF0ayBpbnRlcmZhY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQsIG90aGVyd2lzZQot
ICAgIC8vIHRoZSBBdGtEb2N1bWVudCBzaWduYWwgaGFuZGxlcnMgYmVsb3cgd29uJ3QgZ2V0IHJl
Z2lzdGVyZWQuCi0gICAgR09iamVjdCogZHVtbXlBeE9iamVjdCA9IEdfT0JKRUNUKGdfb2JqZWN0
X25ldyhBVEtfVFlQRV9PQkpFQ1QsIDApKTsKLSAgICBBdGtPYmplY3QqIGR1bW15Tm9PcEF4T2Jq
ZWN0ID0gYXRrX25vX29wX29iamVjdF9uZXcoZHVtbXlBeE9iamVjdCk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYoR19PQkpFQ1QoZHVtbXlOb09wQXhPYmplY3QpKTsKLSAgICBnX29iamVjdF91bnJlZihk
dW1teUF4T2JqZWN0KTsKLX0KLQotdm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNr
cygpCi17Ci0gICAgLy8gQXRrT2JqZWN0IHNpZ25hbHMuCi0gICAgaWYgKHN0YXRlQ2hhbmdlTGlz
dGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihzdGF0
ZUNoYW5nZUxpc3RlbmVySWQpOwotICAgICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAwOwot
ICAgIH0KLSAgICBpZiAoZm9jdXNFdmVudExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92
ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQpOwotICAgICAgICBm
b2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChhY3RpdmVEZXNjZW5kYW50
Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlz
dGVuZXIoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgYWN0aXZl
RGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGNoaWxkcmVu
Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlz
dGVuZXIoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIGNoaWxkcmVuQ2hhbmdl
ZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJ
ZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihwcm9wZXJ0eUNo
YW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7
Ci0gICAgfQotICAgIGlmICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAg
IGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRhQ2hhbmdlZExpc3Rl
bmVySWQpOwotICAgICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9
Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5
Q2FsbGJhY2tzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxi
YWNrcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjI1NzU3Li4wMDAwMDAwCi0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzX2gKLSNkZWZpbmUgQWNjZXNz
aWJpbGl0eUNhbGxiYWNrc19oCi0KLXZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3Mo
KTsKLXZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFiZDRmOC4uMDAwMDAw
MAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxs
YmFja3MuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCi0jaW5jbHVkZSAi
RHVtcFJlbmRlclRyZWUuaCIKLSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSAiV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCi0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0KLXN0YXRpYyBib29sIGxvZ2dp
bmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7Ci0KLUFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCi17Ci19Ci0KLUFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQotewotfQotCi1BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50
IHkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVu
dCgpCi17Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9ICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldEZvY3VzZWRBY2Nlc3NpYmxlRWxlbWVudChtYWlu
RnJhbWUpOwotICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKLSNlbHNlCi0gICAgcmV0
dXJuIDA7Ci0jZW5kaWYKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKQotewotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBBdGtP
YmplY3QqIGFjY2Vzc2libGUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nl
c3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwotICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxl
KTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3Ry
aW5nUmVmIGlkKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nRm9jdXNFdmVudHMoYm9vbCkK
LXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nU2Nyb2xsaW5nU3Rh
cnRFdmVudHMoYm9vbCkKLXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0
TG9nVmFsdWVDaGFuZ2VFdmVudHMoYm9vbCkKLXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6c2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhib29sIGxvZ0FjY2Vzc2liaWxpdHlF
dmVudHMpCi17Ci0gICAgaWYgKGxvZ0FjY2Vzc2liaWxpdHlFdmVudHMgPT0gbG9nZ2luZ0FjY2Vz
c2liaWxpdHlFdmVudHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbG9nQWNjZXNzaWJp
bGl0eUV2ZW50cykgewotICAgICAgICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygp
OwotICAgICAgICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLSAg
ICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IHRydWU7Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVt
b3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQotewotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5MmEzZTMwLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDEwMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpv
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgotCi0jaWYgUExB
VEZPUk0oR1RLKQotI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5oIgotI2VuZGlmCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHJvbGVUb1N0cmlu
ZyhBdGtSb2xlIHJvbGUpCi17Ci0gICAgc3dpdGNoIChyb2xlKSB7Ci0gICAgY2FzZSBBVEtfUk9M
RV9BTEVSVDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQWxlcnQiOwotICAgIGNhc2UgQVRL
X1JPTEVfQ0FOVkFTOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDYW52YXMiOwotICAgIGNh
c2UgQVRLX1JPTEVfQ0hFQ0tfQk9YOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDaGVja0Jv
eCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DT0xVTU5fSEVBREVSOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhDb2x1bW5IZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfQ09NQk9fQk9YOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhDb21ib0JveCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9ET0NV
TUVOVF9GUkFNRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2ViQXJlYSI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9FTlRSWToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGV4dEZpZWxkIjsK
LSAgICBjYXNlIEFUS19ST0xFX0ZPT1RFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRm9v
dGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX0ZPUk06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WEZvcm0iOwotICAgIGNhc2UgQVRLX1JPTEVfR1JPVVBJTkc6Ci0gICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWEdyb3VwIjsKLSAgICBjYXNlIEFUS19ST0xFX0hFQURJTkc6Ci0gICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWEhlYWRpbmciOwotICAgIGNhc2UgQVRLX1JPTEVfSU1BR0U6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWEltYWdlIjsKLSAgICBjYXNlIEFUS19ST0xFX0lNQUdFX01BUDoK
LSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSW1hZ2VNYXAiOwotICAgIGNhc2UgQVRLX1JPTEVf
TEFCRUw6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExhYmVsIjsKLSAgICBjYXNlIEFUS19S
T0xFX0xJTks6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpbmsiOwotICAgIGNhc2UgQVRL
X1JPTEVfTElTVDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdCI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9MSVNUX0JPWDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdEJveCI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9MSVNUX0lURU06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExp
c3RJdGVtIjsKLSAgICBjYXNlIEFUS19ST0xFX01FTlU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWE1lbnUiOwotICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9CQVI6Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWE1lbnVCYXIiOwotICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9JVEVNOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhNZW51SXRlbSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RB
QjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFiIjsKLSAgICBjYXNlIEFUS19ST0xFX1BB
R0VfVEFCX0xJU1Q6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYkdyb3VwIjsKLSAgICBj
YXNlIEFUS19ST0xFX1BBTkVMOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhHcm91cCI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9QQVJBR1JBUEg6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBh
cmFncmFwaCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQVNTV09SRF9URVhUOgotICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhQYXNzd29yZEZpZWxkIjsKLSAgICBjYXNlIEFUS19ST0xFX1BVU0hfQlVU
VE9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhCdXR0b24iOwotICAgIGNhc2UgQVRLX1JP
TEVfUkFESU9fQlVUVE9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSYWRpb0J1dHRvbiI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9ST1dfSEVBREVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhSb3dIZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfUlVMRVI6Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWFJ1bGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9CQVI6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFNjcm9sbEJhciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TQ1JPTExf
UEFORToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2Nyb2xsQXJlYSI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9TRUNUSU9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhEaXYiOwotICAgIGNh
c2UgQVRLX1JPTEVfU0VQQVJBVE9SOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhIb3Jpem9u
dGFsUnVsZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TTElERVI6Ci0gICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWFNsaWRlciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TUElOX0JVVFRPTjoKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYU3BpbkJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UQUJMRToK
LSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFibGUiOwotICAgIGNhc2UgQVRLX1JPTEVfVEFC
TEVfQ0VMTDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2VsbCI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9UQUJMRV9DT0xVTU5fSEVBREVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb2x1
bW5IZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XOgotICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhSb3ciOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XX0hFQURFUjoKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93SGVhZGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1RP
R0dMRV9CVVRUT046Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvZ2dsZUJ1dHRvbiI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9UT09MX0JBUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVG9v
bGJhciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UT09MX1RJUDoKLSAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYVXNlckludGVyZmFjZVRvb2x0aXAiOwotICAgIGNhc2UgQVRLX1JPTEVfVFJFRToKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UUkVFX1RB
QkxFOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlR3JpZCI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9UUkVFX0lURU06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRyZWVJdGVtIjsKLSAg
ICBjYXNlIEFUS19ST0xFX1dJTkRPVzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2luZG93
IjsKLSAgICBjYXNlIEFUS19ST0xFX1VOS05PV046Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WFVua25vd24iOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gZGlzdGluZ3Vp
c2ggQVRLX1JPTEVfVU5LTk9XTiBmcm9tIGEga25vd24gQXRrUm9sZSB3aGljaAotICAgICAgICAv
LyBvdXIgRFJUIGlzbid0IHByb3Blcmx5IGhhbmRsaW5nLgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogRklYTUUgbm90IGlkZW50aWZpZWQiOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBnY2hh
ciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCi17Ci0gICAgU3RyaW5n
IHVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0KLSAgICAvLyBUaGUgb2JqZWN0IHJl
cGxhY2VtZW50IGNoYXJhY3RlciBpcyBwYXNzZWQgYWxvbmcgdG8gQVRzIHNvIHdlIG5lZWQgdG8g
YmUKLSAgICAvLyBhYmxlIHRvIHRlc3QgZm9yIHRoZWlyIHByZXNlbmNlIGFuZCBkbyBzbyB3aXRo
b3V0IGNhdXNpbmcgdGVzdCBmYWlsdXJlcy4KLSAgICB1U3RyaW5nLnJlcGxhY2Uob2JqZWN0UmVw
bGFjZW1lbnRDaGFyYWN0ZXIsICI8b2JqPiIpOwotCi0gICAgLy8gVGhlIHByZXNlbmNlIG9mIG5l
d2xpbmUgY2hhcmFjdGVycyBpbiBhY2Nlc3NpYmxlIHRleHQgb2YgYSBzaW5nbGUgb2JqZWN0Ci0g
ICAgLy8gaXMgYXBwcm9wcmlhdGUsIGJ1dCBpdCBtYWtlcyB0ZXN0IHJlc3VsdHMgKGVzcGVjaWFs
bHkgdGhlIGFjY2Vzc2libGUgdHJlZSkKLSAgICAvLyBoYXJkZXIgdG8gcmVhZC4KLSAgICB1U3Ry
aW5nLnJlcGxhY2UoIlxuIiwgIjxcXG4+Iik7Ci0KLSAgICByZXR1cm4gZ19zdHJkdXAodVN0cmlu
Zy51dGY4KCkuZGF0YSgpKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQotICAgIDogbV9lbGVtZW50
KGVsZW1lbnQpCi17Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgZ19vYmplY3RfcmVmKG1f
ZWxlbWVudCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCi0gICAgOiBtX2VsZW1l
bnQob3RoZXIubV9lbGVtZW50KQotewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIGdfb2Jq
ZWN0X3JlZihtX2VsZW1lbnQpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNz
aWJpbGl0eVVJRWxlbWVudCgpCi17Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgZ19vYmpl
Y3RfdW5yZWYobV9lbGVtZW50KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpn
ZXRMaW5rZWRVSUVsZW1lbnRzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVu
dHMpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
JikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBjaGls
ZHJlbikKLXsKLSAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7Ci0g
ICAgICAgIGNoaWxkcmVuLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7Ci0g
ICAgfQotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJh
bmdlKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudFZlY3RvciwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsg
aSA8IGVuZDsgaSsrKSB7Ci0gICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7Ci0gICAgICAgIGVs
ZW1lbnRWZWN0b3IuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKLSAgICB9
Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCgpCi17Ci0gICAgaWYg
KCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19JU19UQUJM
RShtX2VsZW1lbnQpKTsKLQotICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25fcm93cyhBVEtfVEFC
TEUobV9lbGVtZW50KSk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5D
b3VudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
QVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQotICAgIHJldHVybiBhdGtfdGFibGVf
Z2V0X25fY29sdW1ucyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Ci19Ci0KLWludCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsK
LQotICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oQVRLX09C
SkVDVChtX2VsZW1lbnQpKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJ
bmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gY2hpbGRyZW47Ci0gICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRyZW4sIGluZGV4LCBp
bmRleCArIDEpOwotCi0gICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1
cm4gY2hpbGRyZW4uYXQoMCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVs
ZW1lbnQpCi17IAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQot
Z2NoYXIqIGF0dHJpYnV0ZVNldFRvU3RyaW5nKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
KQotewotICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKLSAgICBmb3IgKEdTTGlz
dCogYXR0cmlidXRlcyA9IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0
dHJpYnV0ZXMtPm5leHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0
aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgR093blB0
cjxnY2hhcj4gYXR0cmlidXRlRGF0YShnX3N0cmNvbmNhdChhdHRyaWJ1dGUtPm5hbWUsICI6Iiwg
YXR0cmlidXRlLT52YWx1ZSwgTlVMTCkpOwotICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBh
dHRyaWJ1dGVEYXRhLmdldCgpKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMtPm5leHQpCi0gICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiLCAiKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Z19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgQVNT
RVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgR093blB0cjxnY2hhcj4gYXR0cmli
dXRlRGF0YShhdHRyaWJ1dGVTZXRUb1N0cmluZyhhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFU
S19PQkpFQ1QobV9lbGVtZW50KSkpKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoYXR0cmlidXRlRGF0YS5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMoKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mRG9jdW1lbnRMaW5rcygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1BY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KCkKLXsK
LQotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEF0a1JlbGF0
aW9uU2V0KiBzZXQgPSBhdGtfb2JqZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQpKTsKLSAgICBpZiAoIXNldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdGtPYmpl
Y3QqIHRhcmdldCA9IDA7Ci0gICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfbl9y
ZWxhdGlvbnMoc2V0KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAg
ICAgICAgQXRrUmVsYXRpb24qIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRp
b24oc2V0LCBpKTsKLSAgICAgICAgaWYgKGF0a19yZWxhdGlvbl9nZXRfcmVsYXRpb25fdHlwZShy
ZWxhdGlvbikgPT0gQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKSB7Ci0gICAgICAgICAgICBHUHRy
QXJyYXkqIHRhcmdldExpc3QgPSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChyZWxhdGlvbik7Ci0g
ICAgICAgICAgICBpZiAodGFyZ2V0TGlzdC0+bGVuKQotICAgICAgICAgICAgICAgIHRhcmdldCA9
IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdfcHRyX2FycmF5X2luZGV4KHRhcmdldExpc3QsIDAp
KTsKLSAgICAgICAgfQotICAgICAgICBnX29iamVjdF91bnJlZihzZXQpOwotICAgIH0KLQotICAg
IHJldHVybiB0YXJnZXQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHRhcmdldCkgOiAwOwotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVs
ZW1lbnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwotCi0gICAgQXRrT2JqZWN0KiBwYXJl
bnQgPSAgYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAg
cmV0dXJuIHBhcmVudCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7Ci19Ci0K
LUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVu
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCi17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwot
fQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKLXsKLSAgICBB
dGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7
Ci0gICAgaWYgKCFyb2xlKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLQotICAgIFN0cmluZyByb2xlU3RyaW5nID0gcm9sZVRvU3RyaW5nKHJvbGUp
OwotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyb2xlU3RyaW5nLnV0
ZjgoKS5kYXRhKCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dWJyb2xlKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQotewotICAgIGNvbnN0IGdj
aGFyKiBuYW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwot
Ci0gICAgaWYgKCFuYW1lKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLQotICAgIEdPd25QdHI8Z2NoYXI+IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRm
KCJBWFRpdGxlOiAlcyIsIG5hbWUpKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhheFRpdGxlLmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQotewotICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlv
biA9IGF0a19vYmplY3RfZ2V0X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0K
LSAgICBpZiAoIWRlc2NyaXB0aW9uKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKLQotICAgIEdPd25QdHI8Z2NoYXI+IGF4RGVzYyhnX3N0cmR1cF9w
cmludGYoIkFYRGVzY3JpcHRpb246ICVzIiwgZGVzY3JpcHRpb24pKTsKLQotICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheERlc2MuZ2V0KCkpOwotfQotCi1KU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCi17Ci0gICAgaWYgKCFt
X2VsZW1lbnQgfHwgIUFUS19JU19URVhUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtf
dGV4dF9nZXRfdGV4dChBVEtfVEVYVChtX2VsZW1lbnQpLCAwLCAtMSk7Ci0gICAgR093blB0cjxn
Y2hhcj4gYXhWYWx1ZShnX3N0cmR1cF9wcmludGYoIkFYVmFsdWU6ICVzIiwgcmVwbGFjZUNoYXJh
Y3RlcnNGb3JSZXN1bHRzKHRleHQpKSk7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4VmFsdWUuZ2V0KCkpOwotfQotCi1KU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9l
bGVtZW50KSk7Ci0KLSNpZiBQTEFURk9STShHVEspCi0gICAgQ1N0cmluZyBoZWxwVGV4dCA9IER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6YWNjZXNzaWJpbGl0eUhlbHBUZXh0KEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSk7Ci0gICAgR093blB0cjxnY2hhcj4gYXhIZWxwVGV4dChnX3N0cmR1cF9wcmlu
dGYoIkFYSGVscDogJXMiLCBoZWxwVGV4dC5kYXRhKCkpKTsKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoYXhIZWxwVGV4dC5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVy
biAwOwotI2VuZGlmCi19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkKLXsK
LSAgICBpbnQgeCwgeTsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01Q
T05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKLQotICAgIHJldHVybiB4
OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSgpCi17Ci0gICAgaW50IHgs
IHk7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxl
bWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7Ci0KLSAgICByZXR1cm4geTsKLX0KLQotZG91
YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKLXsKLSAgICBpbnQgd2lkdGgsIGhl
aWdodDsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1l
bnQpLCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgcmV0dXJuIHdpZHRoOwotfQotCi1kb3VibGUg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KCkKLXsKLSAgICBpbnQgd2lkdGgsIGhlaWdo
dDsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQp
LCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgcmV0dXJuIGhlaWdodDsKLX0KLQotZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKCkKLXsKLSAgICByZXR1cm4gMC5mOwot
fQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkoKQotewotICAg
IHJldHVybiAwLmY7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9y
aWVudGF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKCkgY29uc3QKLXsKLSAgICBHVmFsdWUgdmFsdWUgPSB7
IDAsIHsgeyAwIH0gfSB9OwotCi0gICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKLSAg
ICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUoQVRL
X1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FU
KCZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiAwLjBmOwotICAgIHJldHVybiBnX3ZhbHVlX2dldF9m
bG9hdCgmdmFsdWUpOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFs
dWUoKQotewotICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07Ci0KLSAgICBpZiAo
IUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIGF0
a192YWx1ZV9nZXRfbWluaW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsK
LSAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIDAu
MGY7Ci0gICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci19Ci0KLWRvdWJsZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCi17Ci0gICAgR1ZhbHVlIHZhbHVlID0g
eyAwLCB7IHsgMCB9IH0gfTsKLQotICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCi0g
ICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgYXRrX3ZhbHVlX2dldF9tYXhpbXVtX3ZhbHVlKEFU
S19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwotICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9B
VCgmdmFsdWUpKQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICByZXR1cm4gZ192YWx1ZV9nZXRf
ZmxvYXQoJnZhbHVlKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dmFsdWVEZXNjcmlwdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCBhZnRlciBpdCBo
YXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBBVEsuCi0gICAgLy8gU2VlOiBodHRwczovL2J1Z3ppbGxh
Lmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTc2Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0
YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCi17
Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQotICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29i
amVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QoZWxlbWVudCkpKTsKLSAgICByZXR1cm4gYXRr
X3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQotewotICAgIHJldHVy
biBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9FTkFCTEVEKTsKLX0KLQot
aW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcigpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzQWN0aW9uU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGFjdGlvbikK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1Qo
bV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0
ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19P
QkpFQ1QobV9lbGVtZW50KSkpOwotICAgIGdib29sZWFuIGlzRm9jdXNlZCA9IGF0a19zdGF0ZV9z
ZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0VEKTsKLQot
ICAgIHJldHVybiBpc0ZvY3VzZWQ7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNTZWxlY3RlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxl
bWVudCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlz
R3JhYmJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotIAotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKLXsgICAKLSAg
ICByZXR1cm4gMDsgCi19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRl
ZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRv
cHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsK
LSAgICBnYm9vbGVhbiBpc0V4cGFuZGVkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShz
dGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0VYUEFOREVEKTsKLQotICAgIHJldHVybiBpc0V4cGFu
ZGVkOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0
a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKLSAgICBnYm9v
bGVhbiBpc0NoZWNrZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0Lmdl
dCgpLCBBVEtfU1RBVEVfQ0hFQ0tFRCk7Ci0KLSAgICByZXR1cm4gaXNDaGVja2VkOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFk
ZXJzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1u
cygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotaW50IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCi17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgSlNTdHJpbmdSZWYgaW5kZXhSYW5n
ZUluVGFibGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgYm9vbCBpc1Jvd1JhbmdlKQotewot
ICAgIEdPd25QdHI8Z2NoYXI+IHJhbmdlU3RyaW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7Ci0KLSAg
ICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChlbGVt
ZW50KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQo
QVRLX09CSkVDVChlbGVtZW50KSk7Ci0gICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNfVEFCTEUo
YXhUYWJsZSkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhy
YW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0aGUgdGFi
bGUuCi0gICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFy
ZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOwotICAgIGlmIChpbmRleEluUGFyZW50ID09IC0xKQot
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcu
Z2V0KCkpOwotCi0gICAgaW50IHJvdyA9IC0xOwotICAgIGludCBjb2x1bW4gPSAtMTsKLSAgICBy
b3cgPSBhdGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4
SW5QYXJlbnQpOwotICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KEFU
S19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0KLSAgICAvLyBHZXQgdGhlIGFjdHVh
bCB2YWx1ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQgdmFsdWVzLgotICAgIGlmIChy
b3cgIT0gLTEgJiYgY29sdW1uICE9IC0xKSB7Ci0gICAgICAgIGludCBiYXNlID0gMDsKLSAgICAg
ICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgICAgIGlmIChpc1Jvd1JhbmdlKSB7Ci0gICAgICAgICAg
ICBiYXNlID0gcm93OwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9yb3dfZXh0
ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgYmFzZSA9IGNvbHVtbjsKLSAgICAgICAgICAgIGxlbmd0aCA9IGF0a190
YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1u
KTsKLSAgICAgICAgfQotICAgICAgICByYW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJpbnRmKCJ7
JWQsICVkfSIsIGJhc2UsIGxlbmd0aCkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQotewotICAgIC8vIFJhbmdl
IGluIHRhYmxlIGZvciByb3dzLgotICAgIHJldHVybiBpbmRleFJhbmdlSW5UYWJsZShtX2VsZW1l
bnQsIHRydWUpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1
bW5JbmRleFJhbmdlKCkKLXsKLSAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3IgY29sdW1ucy4KLSAg
ICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCBmYWxzZSk7Ci19Ci0KLWludCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50KQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOwotfSAKLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlZFN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ1Jhbmdl
SXNNaXNzcGVsbGVkKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVk
aWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0
aW9uTmV4dCwgSlNTdHJpbmdSZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0KQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93
KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQotewotICAgIGlmICghbV9lbGVtZW50KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7
Ci0KLSAgICBBdGtPYmplY3QqIGZvdW5kQ2VsbCA9IGF0a190YWJsZV9yZWZfYXQoQVRLX1RBQkxF
KG1fZWxlbWVudCksIHJvdywgY29sdW1uKTsKLSAgICByZXR1cm4gZm91bmRDZWxsID8gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudChmb3VuZENlbGwpIDogMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1
bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0
cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0K
LQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIDAuMGY7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0
ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
QXR0cmlidXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxh
dGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKLXsKLSAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChBVEtfSVNfVkFMVUUoZWxlbWVudCkpOwot
Ci0gICAgR1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgICBhdGtfdmFsdWVf
Z2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKLQot
ICAgIEdWYWx1ZSBpbmNyZW1lbnQgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgYXRrX3ZhbHVlX2dldF9t
aW5pbXVtX2luY3JlbWVudChBVEtfVkFMVUUoZWxlbWVudCksICZpbmNyZW1lbnQpOwotCi0gICAg
R1ZhbHVlIG5ld1ZhbHVlID0gR19WQUxVRV9JTklUOwotICAgIGdfdmFsdWVfaW5pdCgmbmV3VmFs
dWUsIEdfVFlQRV9GTE9BVCk7Ci0KLSAgICBnX3ZhbHVlX3NldF9mbG9hdCgmbmV3VmFsdWUsIGdf
dmFsdWVfZ2V0X2Zsb2F0KCZjdXJyZW50VmFsdWUpICsgZmFjdG9yICogZ192YWx1ZV9nZXRfZmxv
YXQoJmluY3JlbWVudCkpOwotICAgIGF0a192YWx1ZV9zZXRfY3VycmVudF92YWx1ZShBVEtfVkFM
VUUoZWxlbWVudCksICZuZXdWYWx1ZSk7Ci0KLSAgICBnX3ZhbHVlX3Vuc2V0KCZuZXdWYWx1ZSk7
Ci0gICAgZ192YWx1ZV91bnNldCgmaW5jcmVtZW50KTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZjdXJy
ZW50VmFsdWUpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgp
Ci17Ci0gICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAxKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpkZWNyZW1lbnQoKQotewotICAgIGFsdGVyQ3VycmVudFZhbHVl
KG1fZWxlbWVudCwgLTEpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNz
KCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICBpZiAoIUFUS19JU19BQ1RJT04obV9l
bGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBvbmUgYWN0aW9uIHBlciBv
YmplY3QgaXMgc3VwcG9ydGVkIHNvIGZhci4KLSAgICBhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtf
QUNUSU9OKG1fZWxlbWVudCksIDApOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNob3dNZW51KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkUm93QXRJbmRleCh1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2ln
bmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgp
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
aXNjbG9zZWRCeVJvdygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVu
dEVuY29kaW5nKCkKLXsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFU
S19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRf
RlJBTUUpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVu
dF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiRW5jb2Rpbmci
KSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJ
KCkKLXsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSk7Ci0gICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCi0g
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVudF9nZXRfYXR0
cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiVVJJIikpOwotfQotCi1KU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5l
cihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19v
YmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVh
biBpc0ZvY3VzYWJsZSA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0
KCksIEFUS19TVEFURV9GT0NVU0FCTEUpOwotCi0gICAgcmV0dXJuIGlzRm9jdXNhYmxlOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0Ci17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c09mZlNjcmVlbigpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgp
IGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGFrZUZvY3VzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUoKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19CmRpZmYgLS1naXQgYS9Ub29scy9HTlVtYWtlZmls
ZS5hbSBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDgwYWIwNGMuLjA3ZmQ3NWUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCkBA
IC0xMzAsMTIgKzEzMCwxMiBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAog
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJl
ZS9Xb3JrUXVldWVJdGVtLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2NvbmZpZy5oIFwKLQlU
b29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIFwKKwlU
b29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIFwKKwlUb29s
cy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAgXAorCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAorCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBcCiAJ
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmggXAotCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggXAotCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmNwcCBcCi0JVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcCBcCi0JVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwIFwKKwlU
b29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIFwKIAlU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIFwKIAlUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWVHdGsuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0VkaXRpbmdDYWxsYmFja3MuaCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182962</attachid>
            <date>2013-01-16 05:15:08 -0800</date>
            <delta_ts>2013-01-22 04:21:40 -0800</delta_ts>
            <desc>[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</desc>
            <filename>a11y-share-drt.patch</filename>
            <type>text/plain</type>
            <size>92295</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhM2I3
MDlhLi45NWYzZWYwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMTUxIEBACiAyMDEzLTAxLTE2ICBLcnp5c3p0b2YgQ3plY2ggIDxr
LmN6ZWNoQHNhbXN1bmcuY29tPgogCisgICAgICAgIFtHVEtdW0VGTF0gU2hhcmUgV2ViS2l0LUdU
SydzIER1bXBSZW5kZXJUcmVlIGFjY2Vzc2liaWxpdHkgaW1wbGVtZW50YXRpb24gd2l0aCBvdGhl
ciBXZWJraXQgcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNTAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1vdmUgYW5kIHJlbmFtZSBmaWxlcyByZWxhdGVkIHRvIEFjY2Vzc2liaWxpdHkgZnJv
bSBEdW1wUmVuZGVyVHJlZS9ndGsgdG8gRHVtcFJlbmRlclRyZWUvYXRrLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaDogUmVuYW1lZCBmcm9t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmguCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwOiBS
ZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFj
a3MuY3BwLgorICAgICAgICAocHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQpOgorICAgICAgICAoYXhP
YmplY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzKToKKyAgICAgICAgKGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwOiBD
b3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJHdGsuY3BwLgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVs
ZW1lbnRBdFBvaW50KToKKyAgICAgICAgKGNoaWxkRWxlbWVudEJ5SWQpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dTY3JvbGxpbmdTdGFydEV2ZW50cyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nVmFsdWVDaGFuZ2VFdmVudHMpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3Rl
bmVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRp
b25MaXN0ZW5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRBdGsuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAuCisgICAgICAgIChjb3JlQXR0cmlidXRlVG9BdGtB
dHRyaWJ1dGUpOgorICAgICAgICAocm9sZVRvU3RyaW5nKToKKyAgICAgICAgKHJlcGxhY2VDaGFy
YWN0ZXJzRm9yUmVzdWx0cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldExpbmtlZFVJRWxlbWVudHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Z2V0RG9jdW1lbnRMaW5rcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRD
aGlsZHJlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldp
dGhSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmluZGV4T2ZDaGlsZCk6CisgICAgICAgIChhdHRyaWJ1dGVTZXRUb1N0cmluZyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5r
cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm9sZURlc2NyaXB0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRp
dGxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OngpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2xpY2tQb2ludFgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2lu
dFkpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24pOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWF4VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVE
ZXNjcmlwdGlvbik6CisgICAgICAgIChjaGVja0VsZW1lbnRTdGF0ZSk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoaWVy
YXJjaGljYWxMZXZlbCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNH
cmFiYmVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0
cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKToKKyAgICAgICAgKGluZGV4UmFuZ2VJ
blRhYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2Up
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzTWlzc3BlbGxlZCk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib29sQXR0cmlidXRlVmFsdWUpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZSk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZCk6CisgICAg
ICAgIChhbHRlckN1cnJlbnRWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjppbmNyZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNzKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZGlzY2xvc2VkQnlSb3cpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNj
ZXNzaWJpbGl0eVZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3Vt
ZW50RW5jb2RpbmcpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRV
UkkpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc09mZlNjcmVlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXApOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRha2VTZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNl
bGVjdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VW
aXNpYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZp
c2libGVXaXRoU3ViRm9jdXMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Ny
b2xsVG9HbG9iYWxQb2ludCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmhlbHBUZXh0KToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKworMjAxMy0wMS0x
NiAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKwogICAgICAgICBbRUZM
XVtEUlRdIElzb2xhdGVzIEdUSyBzcGVjaWZpYyBjb2RlIGluIER1bXBSZW5kZXJUcmVlL2d0awog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MDA5CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjU3NTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5o
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFjY2Vzc2liaWxpdHlDYWxsYmFja3NfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzX2gKKwordm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwordm9pZCBk
aXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFkMGY4Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsu
Y3BwCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxsYmFja3Mu
aCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWUuaCIKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5o
PgorI2VuZGlmCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitzdGF0aWMgZ3Vp
bnQgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWludCBmb2N1c0V2ZW50TGlz
dGVuZXJJZCA9IDA7CitzdGF0aWMgZ3VpbnQgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5l
cklkID0gMDsKK3N0YXRpYyBndWludCBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsKK3N0
YXRpYyBndWludCBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWludCB2
aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKKworc3RhdGljIHZvaWQgcHJpbnRBY2Nl
c3NpYmlsaXR5RXZlbnQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBjb25zdCBnY2hhciogc2lnbmFs
TmFtZSwgY29uc3QgZ2NoYXIqIHNpZ25hbFZhbHVlKQoreworICAgIC8vIERvIG5vdCBoYW5kbGUg
c3RhdGUtY2hhbmdlOmRlZnVuY3Qgc2lnbmFscywgYXMgdGhlIEF0a09iamVjdAorICAgIC8vIGFz
c29jaWF0ZWQgdG8gdGhlbSB3aWxsIG5vdCBiZSB2YWxpZCBhdCB0aGlzIHBvaW50IGFscmVhZHku
CisgICAgaWYgKCFzaWduYWxOYW1lIHx8ICFnX3N0cmNtcDAoc2lnbmFsTmFtZSwgInN0YXRlLWNo
YW5nZTpkZWZ1bmN0IikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghYWNjZXNzaWJsZSB8
fCAhQVRLX0lTX09CSkVDVChhY2Nlc3NpYmxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
c3QgZ2NoYXIqIG9iamVjdE5hbWUgPSBhdGtfb2JqZWN0X2dldF9uYW1lKGFjY2Vzc2libGUpOwor
ICAgIEF0a1JvbGUgb2JqZWN0Um9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoYWNjZXNzaWJsZSk7
CisKKyAgICAvLyBUcnkgdG8gYWx3YXlzIHByb3ZpZGUgYSBuYW1lIHRvIGJlIGxvZ2dlZCBmb3Ig
dGhlIG9iamVjdC4KKyAgICBpZiAoIW9iamVjdE5hbWUgfHwgKm9iamVjdE5hbWUgPT0gJ1wwJykK
KyAgICAgICAgb2JqZWN0TmFtZSA9ICIoTm8gbmFtZSkiOworCisgICAgR093blB0cjxnY2hhcj4g
c2lnbmFsTmFtZUFuZFZhbHVlKHNpZ25hbFZhbHVlID8gZ19zdHJkdXBfcHJpbnRmKCIlcyA9ICVz
Iiwgc2lnbmFsTmFtZSwgc2lnbmFsVmFsdWUpIDogZ19zdHJkdXAoc2lnbmFsTmFtZSkpOworICAg
IHByaW50ZigiQWNjZXNzaWJpbGl0eSBvYmplY3QgZW1pdHRlZCBcIiVzXCIgLyBOYW1lOiBcIiVz
XCIgLyBSb2xlOiAlZFxuIiwKKyAgICAgICAgICAgc2lnbmFsTmFtZUFuZFZhbHVlLmdldCgpLCBv
YmplY3ROYW1lLCBvYmplY3RSb2xlKTsKK30KKworc3RhdGljIGdib29sZWFuIGF4T2JqZWN0RXZl
bnRMaXN0ZW5lcihHU2lnbmFsSW52b2NhdGlvbkhpbnQgKnNpZ25hbEhpbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IG51bVBhcmFtVmFsdWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgKnBhcmFtVmFsdWVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQor
eworICAgIC8vIEF0IGxlYXN0IHdlIHNob3VsZCByZWNlaXZlIHRoZSBpbnN0YW5jZSBlbWl0dGlu
ZyB0aGUgc2lnbmFsLgorICAgIGlmIChudW1QYXJhbVZhbHVlcyA8IDEpCisgICAgICAgIHJldHVy
biBUUlVFOworCisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxlID0gQVRLX09CSkVDVChnX3ZhbHVl
X2dldF9vYmplY3QoJnBhcmFtVmFsdWVzWzBdKSk7CisgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFB
VEtfSVNfT0JKRUNUKGFjY2Vzc2libGUpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIEdT
aWduYWxRdWVyeSBzaWduYWxfcXVlcnk7CisgICAgR093blB0cjxnY2hhcj4gc2lnbmFsTmFtZTsK
KyAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxWYWx1ZTsKKworICAgIGdfc2lnbmFsX3F1ZXJ5KHNp
Z25hbEhpbnQtPnNpZ25hbF9pZCwgJnNpZ25hbF9xdWVyeSk7CisKKyAgICBpZiAoIWdfc3RyY21w
MChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJzdGF0ZS1jaGFuZ2UiKSkgeworICAgICAgICBz
aWduYWxOYW1lLnNldChnX3N0cmR1cF9wcmludGYoInN0YXRlLWNoYW5nZTolcyIsIGdfdmFsdWVf
Z2V0X3N0cmluZygmcGFyYW1WYWx1ZXNbMV0pKSk7CisgICAgICAgIHNpZ25hbFZhbHVlLnNldChn
X3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigmcGFyYW1WYWx1ZXNbMl0p
KSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSwg
ImZvY3VzLWV2ZW50IikpIHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXAoImZvY3Vz
LWV2ZW50IikpOworICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIs
IGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnBhcmFtVmFsdWVzWzFdKSkpOworICAgIH0gZWxzZSBpZiAo
IWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJjaGlsZHJlbi1jaGFuZ2VkIikp
IHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXAoImNoaWxkcmVuLWNoYW5nZWQiKSk7
CisgICAgICAgIHNpZ25hbFZhbHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9n
ZXRfdWludCgmcGFyYW1WYWx1ZXNbMV0pKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNp
Z25hbF9xdWVyeS5zaWduYWxfbmFtZSwgInByb3BlcnR5LWNoYW5nZSIpKSB7CisgICAgICAgIHNp
Z25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50ZigicHJvcGVydHktY2hhbmdlOiVzIiwgZ19xdWFy
a190b19zdHJpbmcoc2lnbmFsSGludC0+ZGV0YWlsKSkpOworICAgIH0gZWxzZQorICAgICAgICBz
aWduYWxOYW1lLnNldChnX3N0cmR1cChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUpKTsKKworICAg
IHByaW50QWNjZXNzaWJpbGl0eUV2ZW50KGFjY2Vzc2libGUsIHNpZ25hbE5hbWUuZ2V0KCksIHNp
Z25hbFZhbHVlLmdldCgpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGNvbm5lY3RB
Y2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkKK3sKKyAgICAvLyBFbnN1cmUgbm8gY2FsbGJhY2tzIGFy
ZSBjb25uZWN0ZWQgYmVmb3JlLgorICAgIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
KCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhY2Nlc3NpYmlsaXR5IGlzIGluaXRpYWxpemVkIGZv
ciB0aGUgV2ViVmlldyBieSBxdWVyeWluZyBmb3IKKyAgICAvLyB0aGUgcm9vdCBhY2Nlc3NpYmxl
IG9iamVjdCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGZ1bGwgaGllcmFyY2h5LgorI2lmIFBMQVRG
T1JNKEdUSykKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxl
RWxlbWVudChtYWluRnJhbWUpOworI2VuZGlmCisKKyAgICAvLyBBZGQgZ2xvYmFsIGxpc3RlbmVy
cyBmb3IgQXRrT2JqZWN0J3Mgc2lnbmFscy4KKyAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSBh
dGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6
QXRrT2JqZWN0OnN0YXRlLWNoYW5nZSIpOworICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gYXRr
X2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0
a09iamVjdDpmb2N1cy1ldmVudCIpOworICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVu
ZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5l
ciwgIkFUSzpBdGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIpOworICAgIGNoaWxk
cmVuQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9i
amVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQiKTsKKyAg
ICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVu
ZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpwcm9wZXJ0eS1jaGFuZ2Ui
KTsKKyAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDp2aXNpYmxl
LWRhdGEtY2hhbmdlZCIpOworCisgICAgLy8gRW5zdXJlIHRoZSBBdGsgaW50ZXJmYWNlIHR5cGVz
IGFyZSByZWdpc3RlcmVkLCBvdGhlcndpc2UKKyAgICAvLyB0aGUgQXRrRG9jdW1lbnQgc2lnbmFs
IGhhbmRsZXJzIGJlbG93IHdvbid0IGdldCByZWdpc3RlcmVkLgorICAgIEdPYmplY3QqIGR1bW15
QXhPYmplY3QgPSBHX09CSkVDVChnX29iamVjdF9uZXcoQVRLX1RZUEVfT0JKRUNULCAwKSk7Cisg
ICAgQXRrT2JqZWN0KiBkdW1teU5vT3BBeE9iamVjdCA9IGF0a19ub19vcF9vYmplY3RfbmV3KGR1
bW15QXhPYmplY3QpOworICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGR1bW15Tm9PcEF4T2Jq
ZWN0KSk7CisgICAgZ19vYmplY3RfdW5yZWYoZHVtbXlBeE9iamVjdCk7Cit9CisKK3ZvaWQgZGlz
Y29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQoreworICAgIC8vIEF0a09iamVjdCBzaWdu
YWxzLgorICAgIGlmIChzdGF0ZUNoYW5nZUxpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92
ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoc3RhdGVDaGFuZ2VMaXN0ZW5lcklkKTsKKyAgICAgICAg
c3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKGZvY3VzRXZlbnRMaXN0
ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGZvY3Vz
RXZlbnRMaXN0ZW5lcklkKTsKKyAgICAgICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOworICAg
IH0KKyAgICBpZiAoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKSB7CisgICAgICAg
IGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2Vk
TGlzdGVuZXJJZCk7CisgICAgICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9
IDA7CisgICAgfQorICAgIGlmIChjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkKSB7CisgICAgICAg
IGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVy
SWQpOworICAgICAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAg
aWYgKHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9i
YWxfZXZlbnRfbGlzdGVuZXIocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCk7CisgICAgICAgIHBy
b3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAodmlzaWJsZURhdGFD
aGFuZ2VkTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0
ZW5lcih2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAgdmlzaWJsZURhdGFD
aGFuZ2VkTGlzdGVuZXJJZCA9IDA7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjg5ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcApAQCAt
MCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1p
Y2hhZWwgQWxvbnpvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorCisjaW5j
bHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworc3Rh
dGljIGJvb2wgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKKworQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKK3sKK30KKworQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCit7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBv
aW50KGludCB4LCBpbnQgeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBBdGtPYmplY3QqIGNoaWxkRWxlbWVudEJ5SWQoQXRrT2JqZWN0KiBw
YXJlbnQsIGNvbnN0IGNoYXIqIGlkKQoreworICAgIGlmICghQVRLX0lTX09CSkVDVChwYXJlbnQp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
ID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhwYXJlbnQpOworICAgIGZvciAoR1NMaXN0KiBh
dHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmli
dXRlcy0+bmV4dCkgeworICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19j
YXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOworICAgICAgICBpZiAoIXN0cmNt
cChhdHRyaWJ1dGUtPm5hbWUsICJodG1sLWlkIikpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21w
KGF0dHJpYnV0ZS0+dmFsdWUsIGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgY2hpbGRDb3Vu
dCA9IGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihwYXJlbnQpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCog
cmVzdWx0ID0gY2hpbGRFbGVtZW50QnlJZChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxk
KHBhcmVudCwgaSksIGlkKTsKKyAgICAgICAgaWYgKEFUS19JU19PQkpFQ1QocmVzdWx0KSkKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKGJvb2wpCit7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1Njcm9sbGluZ1N0YXJ0RXZl
bnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1Zh
bHVlQ2hhbmdlRXZlbnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRz
KQoreworICAgIGlmIChsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzID09IGxvZ2dpbmdBY2Nlc3NpYmls
aXR5RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxvZ0FjY2Vzc2liaWxpdHlF
dmVudHMpIHsKKyAgICAgICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKKyAg
ICAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7CisgICAgbG9n
Z2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5v
dGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43OTM4N2U1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBAIC0wLDAgKzEsMTA0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9DaGFyYWN0ZXJOYW1lcy5oPgorCitzdGF0aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0
dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKKyAgICBHT3du
UHRyPGdjaGFyPiBidWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXpl
KSkpOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCks
IGJ1ZmZlclNpemUpOworCisgICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJv
bVVURjgoYnVmZmVyLmdldCgpKTsKKyAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNl
aG9sZGVyVmFsdWUiKQorICAgICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOworCisgICAg
cmV0dXJuICIiOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyByb2xlVG9TdHJpbmcoQXRrUm9s
ZSByb2xlKQoreworICAgIHN3aXRjaCAocm9sZSkgeworICAgIGNhc2UgQVRLX1JPTEVfQUxFUlQ6
CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEFsZXJ0IjsKKyAgICBjYXNlIEFUS19ST0xFX0NB
TlZBUzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2FudmFzIjsKKyAgICBjYXNlIEFUS19S
T0xFX0NIRUNLX0JPWDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2hlY2tCb3giOworICAg
IGNhc2UgQVRLX1JPTEVfQ09MVU1OX0hFQURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
Q29sdW1uSGVhZGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX0NPTUJPX0JPWDoKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYQ29tYm9Cb3giOworICAgIGNhc2UgQVRLX1JPTEVfRE9DVU1FTlRfRlJB
TUU6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFdlYkFyZWEiOworICAgIGNhc2UgQVRLX1JP
TEVfRU5UUlk6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRleHRGaWVsZCI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9GT09URVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEZvb3RlciI7Cisg
ICAgY2FzZSBBVEtfUk9MRV9GT1JNOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhGb3JtIjsK
KyAgICBjYXNlIEFUS19ST0xFX0dST1VQSU5HOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhH
cm91cCI7CisgICAgY2FzZSBBVEtfUk9MRV9IRUFESU5HOgorICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhIZWFkaW5nIjsKKyAgICBjYXNlIEFUS19ST0xFX0lNQUdFOgorICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhJbWFnZSI7CisgICAgY2FzZSBBVEtfUk9MRV9JTUFHRV9NQVA6CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWEltYWdlTWFwIjsKKyAgICBjYXNlIEFUS19ST0xFX0xBQkVMOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMYWJlbCI7CisgICAgY2FzZSBBVEtfUk9MRV9MSU5L
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaW5rIjsKKyAgICBjYXNlIEFUS19ST0xFX0xJ
U1Q6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3QiOworICAgIGNhc2UgQVRLX1JPTEVf
TElTVF9CT1g6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3RCb3giOworICAgIGNhc2Ug
QVRLX1JPTEVfTElTVF9JVEVNOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0SXRlbSI7
CisgICAgY2FzZSBBVEtfUk9MRV9NRU5VOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51
IjsKKyAgICBjYXNlIEFUS19ST0xFX01FTlVfQkFSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhNZW51QmFyIjsKKyAgICBjYXNlIEFUS19ST0xFX01FTlVfSVRFTToKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYTWVudUl0ZW0iOworICAgIGNhc2UgQVRLX1JPTEVfUEFHRV9UQUI6CisgICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYiI7CisgICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RBQl9M
SVNUOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUYWJHcm91cCI7CisgICAgY2FzZSBBVEtf
Uk9MRV9QQU5FTDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOworICAgIGNhc2Ug
QVRLX1JPTEVfUEFSQUdSQVBIOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXJhZ3JhcGgi
OworICAgIGNhc2UgQVRLX1JPTEVfUEFTU1dPUkRfVEVYVDoKKyAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYUGFzc3dvcmRGaWVsZCI7CisgICAgY2FzZSBBVEtfUk9MRV9QVVNIX0JVVFRPTjoKKyAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQnV0dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1JBRElP
X0JVVFRPTjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUmFkaW9CdXR0b24iOworICAgIGNh
c2UgQVRLX1JPTEVfUk9XX0hFQURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93SGVh
ZGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX1JVTEVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhSdWxlciI7CisgICAgY2FzZSBBVEtfUk9MRV9TQ1JPTExfQkFSOgorICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhTY3JvbGxCYXIiOworICAgIGNhc2UgQVRLX1JPTEVfU0NST0xMX1BBTkU6Cisg
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNjcm9sbEFyZWEiOworICAgIGNhc2UgQVRLX1JPTEVf
U0VDVElPTjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRGl2IjsKKyAgICBjYXNlIEFUS19S
T0xFX1NFUEFSQVRPUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSG9yaXpvbnRhbFJ1bGUi
OworICAgIGNhc2UgQVRLX1JPTEVfU0xJREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhT
bGlkZXIiOworICAgIGNhc2UgQVRLX1JPTEVfU1BJTl9CVVRUT046CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWFNwaW5CdXR0b24iOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEU6CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFRhYmxlIjsKKyAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NFTEw6
CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENlbGwiOworICAgIGNhc2UgQVRLX1JPTEVfVEFC
TEVfQ09MVU1OX0hFQURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29sdW1uSGVhZGVy
IjsKKyAgICBjYXNlIEFUS19ST0xFX1RBQkxFX1JPVzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYUm93IjsKKyAgICBjYXNlIEFUS19ST0xFX1RBQkxFX1JPV19IRUFERVI6CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFJvd0hlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9UT0dHTEVfQlVU
VE9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUb2dnbGVCdXR0b24iOworICAgIGNhc2Ug
QVRLX1JPTEVfVE9PTF9CQVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvb2xiYXIiOwor
ICAgIGNhc2UgQVRLX1JPTEVfVE9PTF9USVA6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFVz
ZXJJbnRlcmZhY2VUb29sdGlwIjsKKyAgICBjYXNlIEFUS19ST0xFX1RSRUU6CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFRyZWUiOworICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9UQUJMRToKKyAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZUdyaWQiOworICAgIGNhc2UgQVRLX1JPTEVfVFJF
RV9JVEVNOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlSXRlbSI7CisgICAgY2FzZSBB
VEtfUk9MRV9XSU5ET1c6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFdpbmRvdyI7CisgICAg
Y2FzZSBBVEtfUk9MRV9VTktOT1dOOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhVbmtub3du
IjsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBXZSB3YW50IHRvIGRpc3Rpbmd1aXNoIEFUS19S
T0xFX1VOS05PV04gZnJvbSBhIGtub3duIEF0a1JvbGUgd2hpY2gKKyAgICAgICAgLy8gb3VyIERS
VCBpc24ndCBwcm9wZXJseSBoYW5kbGluZy4KKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEZJWE1F
IG5vdCBpZGVudGlmaWVkIjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2NoYXIqIHJlcGxh
Y2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hhciogc3RyKQoreworICAgIFN0cmluZyB1U3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOChzdHIpOworCisgICAgLy8gVGhlIG9iamVjdCByZXBsYWNlbWVu
dCBjaGFyYWN0ZXIgaXMgcGFzc2VkIGFsb25nIHRvIEFUcyBzbyB3ZSBuZWVkIHRvIGJlCisgICAg
Ly8gYWJsZSB0byB0ZXN0IGZvciB0aGVpciBwcmVzZW5jZSBhbmQgZG8gc28gd2l0aG91dCBjYXVz
aW5nIHRlc3QgZmFpbHVyZXMuCisgICAgdVN0cmluZy5yZXBsYWNlKG9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyLCAiPG9iaj4iKTsKKworICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBuZXdsaW5lIGNo
YXJhY3RlcnMgaW4gYWNjZXNzaWJsZSB0ZXh0IG9mIGEgc2luZ2xlIG9iamVjdAorICAgIC8vIGlz
IGFwcHJvcHJpYXRlLCBidXQgaXQgbWFrZXMgdGVzdCByZXN1bHRzIChlc3BlY2lhbGx5IHRoZSBh
Y2Nlc3NpYmxlIHRyZWUpCisgICAgLy8gaGFyZGVyIHRvIHJlYWQuCisgICAgdVN0cmluZy5yZXBs
YWNlKCJcbiIsICI8XFxuPiIpOworCisgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgp
LmRhdGEoKSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKKyAgICA6IG1fZWxlbWVudChlbGVtZW50
KQoreworICAgIGlmIChtX2VsZW1lbnQpCisgICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQp
OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNv
bnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQorICAgIDogbV9lbGVtZW50KG90aGVy
Lm1fZWxlbWVudCkKK3sKKyAgICBpZiAobV9lbGVtZW50KQorICAgICAgICBnX29iamVjdF9yZWYo
bV9lbGVtZW50KTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQoKQoreworICAgIGlmIChtX2VsZW1lbnQpCisgICAgICAgIGdfb2JqZWN0X3VucmVm
KG1fZWxlbWVudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0TGlua2Vk
VUlFbGVtZW50cyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRzKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpnZXREb2N1bWVudExpbmtzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldENoaWxkcmVuKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgY2hpbGRyZW4pCit7
CisgICAgaW50IGNvdW50ID0gY2hpbGRyZW5Db3VudCgpOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOworICAgICAgICBj
aGlsZHJlbi5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOworICAgIH0KK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBlbmQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7
IGkrKykgeworICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOworICAgICAgICBlbGVtZW50VmVj
dG9yLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7CisgICAgfQorfQorCitp
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291bnQoKQoreworICAgIGlmICghbV9lbGVt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVt
ZW50KSk7CisKKyAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxFKG1fZWxl
bWVudCkpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQoKQor
eworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChB
VEtfSVNfVEFCTEUobV9lbGVtZW50KSk7CisKKyAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX2Nv
bHVtbnMoQVRLX1RBQkxFKG1fZWxlbWVudCkpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Y2hpbGRyZW5Db3VudCgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBy
ZXR1cm4gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKEFUS19PQkpFQ1QobV9l
bGVtZW50KSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5KQoreworICAgIGlmICghbV9lbGVtZW50
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KGF0a19jb21wb25lbnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQoQVRLX0NPTVBPTkVOVChtX2Vs
ZW1lbnQpLCB4LCB5LCBBVEtfWFlfV0lORE9XKSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisK
K0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRB
dEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiBjaGlsZHJlbjsKKyAgICBnZXRDaGlsZHJlbldpdGhSYW5nZShjaGlsZHJlbiwgaW5kZXgs
IGluZGV4ICsgMSk7CisKKyAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCisgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5hdCgwKTsKKworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjppbmRleE9mQ2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCog
ZWxlbWVudCkKK3sgCisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQor
CitnY2hhciogYXR0cmlidXRlU2V0VG9TdHJpbmcoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVT
ZXQpCit7CisgICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOworICAgIGZvciAoR1NM
aXN0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0g
YXR0cmlidXRlcy0+bmV4dCkgeworICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0
YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOworICAgICAgICBHT3du
UHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGdfc3RyY29uY2F0KGF0dHJpYnV0ZS0+bmFtZSwgIjoi
LCBhdHRyaWJ1dGUtPnZhbHVlLCBOVUxMKSk7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIs
IGF0dHJpYnV0ZURhdGEuZ2V0KCkpOworICAgICAgICBpZiAoYXR0cmlidXRlcy0+bmV4dCkKKyAg
ICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICIsICIpOworICAgIH0KKworICAgIHJldHVy
biBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0UpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBB
U1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICBHT3duUHRyPGdjaGFyPiBhdHRy
aWJ1dGVEYXRhKGF0dHJpYnV0ZVNldFRvU3RyaW5nKGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMo
QVRLX09CSkVDVChtX2VsZW1lbnQpKSkpOworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhhdHRyaWJ1dGVEYXRhLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQoKQor
eworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a1JlbGF0
aW9uU2V0KiBzZXQgPSBhdGtfb2JqZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQpKTsKKyAgICBpZiAoIXNldCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtPYmpl
Y3QqIHRhcmdldCA9IDA7CisgICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfbl9y
ZWxhdGlvbnMoc2V0KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAg
ICAgICAgQXRrUmVsYXRpb24qIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRp
b24oc2V0LCBpKTsKKyAgICAgICAgaWYgKGF0a19yZWxhdGlvbl9nZXRfcmVsYXRpb25fdHlwZShy
ZWxhdGlvbikgPT0gQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKSB7CisgICAgICAgICAgICBHUHRy
QXJyYXkqIHRhcmdldExpc3QgPSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChyZWxhdGlvbik7Cisg
ICAgICAgICAgICBpZiAodGFyZ2V0TGlzdC0+bGVuKQorICAgICAgICAgICAgICAgIHRhcmdldCA9
IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdfcHRyX2FycmF5X2luZGV4KHRhcmdldExpc3QsIDAp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdfb2JqZWN0X3VucmVmKHNldCk7CisgICAgcmV0
dXJuIHRhcmdldCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQodGFyZ2V0KSA6IDA7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVu
dCgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNT
RVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBBdGtPYmplY3QqIHBhcmVudCA9
ICBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICByZXR1
cm4gcGFyZW50ID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChwYXJlbnQpIDogMDsKK30KKworSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQoreworICAgIEF0a1Jv
bGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKyAg
ICBpZiAoIXJvbGUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworCisgICAgU3RyaW5nIHJvbGVTdHJpbmcgPSByb2xlVG9TdHJpbmcocm9sZSk7Cisg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJvbGVTdHJpbmcudXRmOCgp
LmRhdGEoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJv
bGUoKQoreworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQoreworICAgIHJldHVybiAwOworfQorCitKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCit7CisgICAgY29uc3QgZ2NoYXIq
IG5hbWUgPSBhdGtfb2JqZWN0X2dldF9uYW1lKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAg
R093blB0cjxnY2hhcj4gYXhUaXRsZShnX3N0cmR1cF9wcmludGYoIkFYVGl0bGU6ICVzIiwgbmFt
ZSA/IG5hbWUgOiAiIikpOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGF4VGl0bGUuZ2V0KCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpkZXNjcmlwdGlvbigpCit7CisgICAgY29uc3QgZ2NoYXIqIGRlc2NyaXB0aW9uID0gYXRr
X29iamVjdF9nZXRfZGVzY3JpcHRpb24oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlm
ICghZGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworCisgICAgR093blB0cjxnY2hhcj4gYXhEZXNjKGdfc3RyZHVwX3ByaW50Zigi
QVhEZXNjcmlwdGlvbjogJXMiLCBkZXNjcmlwdGlvbikpOworCisgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4RGVzYy5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKK3sKKyAgICBpZiAoIW1fZWxlbWVu
dCB8fCAhQVRLX0lTX1RFWFQobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dl
dF90ZXh0KEFUS19URVhUKG1fZWxlbWVudCksIDAsIC0xKTsKKyAgICBHT3duUHRyPGdjaGFyPiBh
eFZhbHVlKGdfc3RyZHVwX3ByaW50ZigiQVhWYWx1ZTogJXMiLCByZXBsYWNlQ2hhcmFjdGVyc0Zv
clJlc3VsdHModGV4dCkpKTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhWYWx1ZS5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKK3sKKyAgICBpZiAoIW1fZWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisK
KyAgICAvLyBJbiBBVEssIHRoZSBkb2N1bWVudCBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIHRoZSBk
b2N1bWVudCdzIGxvY2FsZS4KKyAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNU
KG1fZWxlbWVudCkpID09IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQorICAgICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdl
OiAlcyIsIGF0a19kb2N1bWVudF9nZXRfbG9jYWxlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpKSkp
OworCisgICAgLy8gRm9yIGFsbCBvdGhlciBvYmplY3RzLCB0aGUgbGFuZ3VhZ2UgaXMgZXhwb3Nl
ZCBhcyBhbiBBdGtUZXh0IGF0dHJpYnV0ZS4KKyAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
CisgICAgZm9yIChHU0xpc3QqIHRleHRBdHRyaWJ1dGVzID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRf
YXR0cmlidXRlcyhBVEtfVEVYVChtX2VsZW1lbnQpKTsgdGV4dEF0dHJpYnV0ZXM7IHRleHRBdHRy
aWJ1dGVzID0gdGV4dEF0dHJpYnV0ZXMtPm5leHQpIHsKKyAgICAgICAgQXRrQXR0cmlidXRlKiBh
dGtBdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPih0ZXh0QXR0cmlidXRlcy0+
ZGF0YSk7CisgICAgICAgIGlmICghc3RyY21wKGF0a0F0dHJpYnV0ZS0+bmFtZSwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfTEFOR1VBR0UpKSkKKyAgICAgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhnX3N0cmR1cF9wcmludGYoIkFY
TGFuZ3VhZ2U6ICVzIiwgYXRrQXR0cmlidXRlLT52YWx1ZSkpOworICAgIH0KKworICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitkb3VibGUgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6eCgpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBhdGtfY29tcG9u
ZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZ
X1NDUkVFTik7CisKKyAgICByZXR1cm4geDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnkoKQoreworICAgIGludCB4LCB5OworCisgICAgYXRrX2NvbXBvbmVudF9nZXRfcG9z
aXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOwor
CisgICAgcmV0dXJuIHk7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0
aCgpCit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9z
aXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIHJl
dHVybiB3aWR0aDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCgp
Cit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9zaXpl
KEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIHJldHVy
biBoZWlnaHQ7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50
WCgpCit7CisgICAgLy8gTm90ZTogVGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlIGhhdmUgaW4gQVRL
LgorICAgIHJldHVybiAwLmY7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
bGlja1BvaW50WSgpCit7CisgICAgLy8gTm90ZTogVGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlIGhh
dmUgaW4gQVRLLgorICAgIHJldHVybiAwLmY7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKCkgY29uc3QKK3sKKyAgICBH
VmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUo
bV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X2N1
cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisgICAgaWYgKCFHX1ZB
TFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiAwLjBmOworICAgIHJldHVy
biBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUpOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bWluVmFsdWUoKQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9
IH07CisKKyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4g
MC4wZjsKKworICAgIGF0a192YWx1ZV9nZXRfbWluaW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVt
ZW50KSwgJnZhbHVlKTsKKyAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIDAuMGY7CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7
Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCit7CisgICAg
R1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKKworICAgIGlmICghQVRLX0lTX1ZBTFVF
KG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVlX2dldF9t
YXhpbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworICAgIGlmICghR19W
QUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICByZXR1
cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudCBhZnRlciBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBBVEsuCisgICAgLy8gU2VlOiBo
dHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTc2CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK3N0YXRpYyBib29s
IGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlw
ZSBzdGF0ZVR5cGUpCit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQorICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBh
ZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QoZWxlbWVudCkpKTsK
KyAgICByZXR1cm4gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwg
c3RhdGVUeXBlKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQo
KQoreworICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9F
TkFCTEVEKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50
TGluZU51bWJlcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0ZvY3VzZWQoKSBjb25zdAoreworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEF0a1N0YXRlU2V0
PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVD
VChtX2VsZW1lbnQpKSk7CisgICAgZ2Jvb2xlYW4gaXNGb2N1c2VkID0gYXRrX3N0YXRlX3NldF9j
b250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTRUQpOworCisgICAg
cmV0dXJuIGlzRm9jdXNlZDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50
LCBBVEtfU1RBVEVfU0VMRUNURUQpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFi
YmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgCitKU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAoreyAgIAorICAgIHJl
dHVybiAwOyAKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkg
Y29uc3QKK3sKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdS
ZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAg
IGdib29sZWFuIGlzRXhwYW5kZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRl
U2V0LmdldCgpLCBBVEtfU1RBVEVfRVhQQU5ERUQpOworCisgICAgcmV0dXJuIGlzRXhwYW5kZWQ7
Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKK3sK
KyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29i
amVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIGdib29sZWFu
IGlzQ2hlY2tlZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCks
IEFUS19TVEFURV9DSEVDS0VEKTsKKworICAgIHJldHVybiBpc0NoZWNrZWQ7Cit9CisKK0pTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkhlYWRlcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitpbnQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5U
YWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCit7CisgICAg
R093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKKworICAgIGlm
ICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHJhbmdlU3RyaW5nLmdldCgpKTsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKGVsZW1lbnQp
KTsKKworICAgIEF0a09iamVjdCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtf
T0JKRUNUKGVsZW1lbnQpKTsKKyAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRh
YmxlKSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdl
U3RyaW5nLmdldCgpKTsKKworICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4K
KyAgICBnaW50IGluZGV4SW5QYXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQo
QVRLX09CSkVDVChlbGVtZW50KSk7CisgICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCisgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQo
KSk7CisKKyAgICBpbnQgcm93ID0gLTE7CisgICAgaW50IGNvbHVtbiA9IC0xOworICAgIHJvdyA9
IGF0a190YWJsZV9nZXRfcm93X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBh
cmVudCk7CisgICAgY29sdW1uID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RB
QkxFKGF4VGFibGUpLCBpbmRleEluUGFyZW50KTsKKworICAgIC8vIEdldCB0aGUgYWN0dWFsIHZh
bHVlcywgaWYgcm93IGFuZCBjb2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCisgICAgaWYgKHJvdyAh
PSAtMSAmJiBjb2x1bW4gIT0gLTEpIHsKKyAgICAgICAgaW50IGJhc2UgPSAwOworICAgICAgICBp
bnQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKKyAgICAgICAgICAgIGJh
c2UgPSByb3c7CisgICAgICAgICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRf
YXQoQVRLX1RBQkxFKGF4VGFibGUpLCByb3csIGNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBiYXNlID0gY29sdW1uOworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxl
X2dldF9jb2x1bW5fZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwor
ICAgICAgICB9CisgICAgICAgIHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwg
JWR9IiwgYmFzZSwgbGVuZ3RoKSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZSgpCit7CisgICAgLy8gUmFuZ2UgaW4g
dGFibGUgZm9yIHJvd3MuCisgICAgcmV0dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudCwg
dHJ1ZSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbklu
ZGV4UmFuZ2UoKQoreworICAgIC8vIFJhbmdlIGluIHRhYmxlIGZvciBjb2x1bW5zLgorICAgIHJl
dHVybiBpbmRleFJhbmdlSW5UYWJsZShtX2VsZW1lbnQsIGZhbHNlKTsKK30KKworaW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSAKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Cit9IAorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVk
U3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30K
KworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01p
c3NwZWxsZWQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0
ZShBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25O
ZXh0LCBKU1N0cmluZ1JlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5z
aWduZWQgY29sdW1uLCB1bnNpZ25lZCByb3cpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKKwor
ICAgIEF0a09iamVjdCogZm91bmRDZWxsID0gYXRrX3RhYmxlX3JlZl9hdChBVEtfVEFCTEUobV9l
bGVtZW50KSwgcm93LCBjb2x1bW4pOworICAgIHJldHVybiBmb3VuZENlbGwgPyBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KGZvdW5kQ2VsbCkgOiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1
dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisg
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAg
U3RyaW5nIGF0a0F0dHJpYnV0ZU5hbWUgPSBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoYXR0
cmlidXRlKTsKKyAgICBpZiAoYXRrQXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgZm9yIChHU0xp
c3QqIGF0a0F0dHJpYnV0ZXMgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSk7IGF0a0F0dHJpYnV0ZXM7IGF0a0F0dHJpYnV0ZXMgPSBhdGtBdHRyaWJ1dGVz
LT5uZXh0KSB7CisgICAgICAgIEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3RhdGljX2Nh
c3Q8QXRrQXR0cmlidXRlKj4oYXRrQXR0cmlidXRlcy0+ZGF0YSk7CisgICAgICAgIGlmICghc3Ry
Y21wKGF0a0F0dHJpYnV0ZS0+bmFtZSwgYXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtBdHRy
aWJ1dGUtPnZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJl
ckF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIDAuMGY7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRl
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdS
ZWYgYXR0cmlidXRlKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYWx0
ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKK3sK
KyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChBVEtfSVNf
VkFMVUUoZWxlbWVudCkpOworCisgICAgR1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5J
VDsKKyAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAm
Y3VycmVudFZhbHVlKTsKKworICAgIEdWYWx1ZSBpbmNyZW1lbnQgPSBHX1ZBTFVFX0lOSVQ7Cisg
ICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX2luY3JlbWVudChBVEtfVkFMVUUoZWxlbWVudCksICZp
bmNyZW1lbnQpOworCisgICAgR1ZhbHVlIG5ld1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdf
dmFsdWVfaW5pdCgmbmV3VmFsdWUsIEdfVFlQRV9GTE9BVCk7CisKKyAgICBnX3ZhbHVlX3NldF9m
bG9hdCgmbmV3VmFsdWUsIGdfdmFsdWVfZ2V0X2Zsb2F0KCZjdXJyZW50VmFsdWUpICsgZmFjdG9y
ICogZ192YWx1ZV9nZXRfZmxvYXQoJmluY3JlbWVudCkpOworICAgIGF0a192YWx1ZV9zZXRfY3Vy
cmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZuZXdWYWx1ZSk7CisKKyAgICBnX3ZhbHVl
X3Vuc2V0KCZuZXdWYWx1ZSk7CisgICAgZ192YWx1ZV91bnNldCgmaW5jcmVtZW50KTsKKyAgICBn
X3ZhbHVlX3Vuc2V0KCZjdXJyZW50VmFsdWUpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmluY3JlbWVudCgpCit7CisgICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAx
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZWNyZW1lbnQoKQoreworICAg
IGFsdGVyQ3VycmVudFZhbHVlKG1fZWxlbWVudCwgLTEpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnByZXNzKCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBpZiAo
IUFUS19JU19BQ1RJT04obV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT25s
eSBvbmUgYWN0aW9uIHBlciBvYmplY3QgaXMgc3VwcG9ydGVkIHNvIGZhci4KKyAgICBhdGtfYWN0
aW9uX2RvX2FjdGlvbihBVEtfQUNUSU9OKG1fZWxlbWVudCksIDApOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlz
Y2xvc2VkUm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0Vs
ZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCitBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVt
ZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5k
ZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93QXRJbmRleCh1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRCeVJvdygpCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtf
b2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYgKHJvbGUgIT0g
QVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGF0a19kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2Vs
ZW1lbnQpLCAiRW5jb2RpbmciKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dl
dF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVf
RE9DVU1FTlRfRlJBTUUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0
a19kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAi
VVJJIikpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRO
b3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Zv
Y3VzYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0
ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVu
dCkpKTsKKyAgICBnYm9vbGVhbiBpc0ZvY3VzYWJsZSA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNf
c3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0FCTEUpOworCisgICAgcmV0dXJu
IGlzRm9jdXNhYmxlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0
YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwg
QVRLX1NUQVRFX1NFTEVDVEFCTEUpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3Rh
dGUobV9lbGVtZW50LCBBVEtfU1RBVEVfTVVMVElTRUxFQ1RBQkxFKTsKK30KKworYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc09mZlNjcmVlbigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDVhMWQwZjguLjAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIgotCi0jaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgot
I2lmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuaCIKLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0jZW5kaWYKLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLXN0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxp
c3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKLXN0
YXRpYyBndWludCBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotc3RhdGlj
IGd1aW50IGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IHByb3Bl
cnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdl
ZExpc3RlbmVySWQgPSAwOwotCi1zdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChB
dGtPYmplY3QqIGFjY2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hh
ciogc2lnbmFsVmFsdWUpCi17Ci0gICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVm
dW5jdCBzaWduYWxzLCBhcyB0aGUgQXRrT2JqZWN0Ci0gICAgLy8gYXNzb2NpYXRlZCB0byB0aGVt
IHdpbGwgbm90IGJlIHZhbGlkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KLSAgICBpZiAoIXNpZ25h
bE5hbWUgfHwgIWdfc3RyY21wMChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNU
KGFjY2Vzc2libGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBnY2hhciogb2JqZWN0
TmFtZSA9IGF0a19vYmplY3RfZ2V0X25hbWUoYWNjZXNzaWJsZSk7Ci0gICAgQXRrUm9sZSBvYmpl
Y3RSb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKLQotICAgIC8vIFRyeSB0
byBhbHdheXMgcHJvdmlkZSBhIG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgotICAg
IGlmICghb2JqZWN0TmFtZSB8fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQotICAgICAgICBvYmplY3RO
YW1lID0gIihObyBuYW1lKSI7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFs
dWUoc2lnbmFsVmFsdWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBz
aWduYWxWYWx1ZSkgOiBnX3N0cmR1cChzaWduYWxOYW1lKSk7Ci0gICAgcHJpbnRmKCJBY2Nlc3Np
YmlsaXR5IG9iamVjdCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4i
LAotICAgICAgICAgICBzaWduYWxOYW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVj
dFJvbGUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWdu
YWxJbnZvY2F0aW9uSGludCAqc2lnbmFsSGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgbnVtUGFyYW1WYWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gQXQgbGVh
c3Qgd2Ugc2hvdWxkIHJlY2VpdmUgdGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCi0g
ICAgaWYgKG51bVBhcmFtVmFsdWVzIDwgMSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBB
dGtPYmplY3QqIGFjY2Vzc2libGUgPSBBVEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFy
YW1WYWx1ZXNbMF0pKTsKLSAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNj
ZXNzaWJsZSkpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgR1NpZ25hbFF1ZXJ5IHNpZ25h
bF9xdWVyeTsKLSAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lOwotICAgIEdPd25QdHI8Z2No
YXI+IHNpZ25hbFZhbHVlOwotCi0gICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFs
X2lkLCAmc2lnbmFsX3F1ZXJ5KTsKLQotICAgIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5z
aWduYWxfbmFtZSwgInN0YXRlLWNoYW5nZSIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdf
c3RyZHVwX3ByaW50Zigic3RhdGUtY2hhbmdlOiVzIiwgZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJh
bVZhbHVlc1sxXSkpKTsKLSAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50Zigi
JWQiLCBnX3ZhbHVlX2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1syXSkpKTsKLSAgICB9IGVsc2Ug
aWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiZm9jdXMtZXZlbnQiKSkg
ewotICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cCgiZm9jdXMtZXZlbnQiKSk7Ci0gICAg
ICAgIHNpZ25hbFZhbHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9v
bGVhbigmcGFyYW1WYWx1ZXNbMV0pKSk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25h
bF9xdWVyeS5zaWduYWxfbmFtZSwgImNoaWxkcmVuLWNoYW5nZWQiKSkgewotICAgICAgICBzaWdu
YWxOYW1lLnNldChnX3N0cmR1cCgiY2hpbGRyZW4tY2hhbmdlZCIpKTsKLSAgICAgICAgc2lnbmFs
VmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF91aW50KCZwYXJhbVZh
bHVlc1sxXSkpKTsKLSAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25h
bF9uYW1lLCAicHJvcGVydHktY2hhbmdlIikpIHsKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19z
dHJkdXBfcHJpbnRmKCJwcm9wZXJ0eS1jaGFuZ2U6JXMiLCBnX3F1YXJrX3RvX3N0cmluZyhzaWdu
YWxIaW50LT5kZXRhaWwpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdf
c3RyZHVwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSkpOwotCi0gICAgcHJpbnRBY2Nlc3NpYmls
aXR5RXZlbnQoYWNjZXNzaWJsZSwgc2lnbmFsTmFtZS5nZXQoKSwgc2lnbmFsVmFsdWUuZ2V0KCkp
OwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxs
YmFja3MoKQotewotICAgIC8vIEVuc3VyZSBubyBjYWxsYmFja3MgYXJlIGNvbm5lY3RlZCBiZWZv
cmUuCi0gICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLQotICAgIC8vIEVu
c3VyZSB0aGF0IGFjY2Vzc2liaWxpdHkgaXMgaW5pdGlhbGl6ZWQgZm9yIHRoZSBXZWJWaWV3IGJ5
IHF1ZXJ5aW5nIGZvcgotICAgIC8vIHRoZSByb290IGFjY2Vzc2libGUgb2JqZWN0LCB3aGljaCB3
aWxsIGNyZWF0ZSB0aGUgZnVsbCBoaWVyYXJjaHkuCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFt
ZSk7Ci0jZW5kaWYKLQotICAgIC8vIEFkZCBnbG9iYWwgbGlzdGVuZXJzIGZvciBBdGtPYmplY3Qn
cyBzaWduYWxzLgotICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2
ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6c3RhdGUt
Y2hhbmdlIik7Ci0gICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVu
dF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2
ZW50Iik7Ci0gICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVj
dDphY3RpdmUtZGVzY2VuZGFudC1jaGFuZ2VkIik7Ci0gICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVu
ZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5l
ciwgIkFUSzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIpOwotICAgIHByb3BlcnR5Q2hhbmdl
ZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50
TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIpOwotICAgIHZpc2libGVE
YXRhQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9i
amVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnZpc2libGUtZGF0YS1jaGFuZ2VkIik7
Ci0KLSAgICAvLyBFbnN1cmUgdGhlIEF0ayBpbnRlcmZhY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQs
IG90aGVyd2lzZQotICAgIC8vIHRoZSBBdGtEb2N1bWVudCBzaWduYWwgaGFuZGxlcnMgYmVsb3cg
d29uJ3QgZ2V0IHJlZ2lzdGVyZWQuCi0gICAgR09iamVjdCogZHVtbXlBeE9iamVjdCA9IEdfT0JK
RUNUKGdfb2JqZWN0X25ldyhBVEtfVFlQRV9PQkpFQ1QsIDApKTsKLSAgICBBdGtPYmplY3QqIGR1
bW15Tm9PcEF4T2JqZWN0ID0gYXRrX25vX29wX29iamVjdF9uZXcoZHVtbXlBeE9iamVjdCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoZHVtbXlOb09wQXhPYmplY3QpKTsKLSAgICBnX29i
amVjdF91bnJlZihkdW1teUF4T2JqZWN0KTsKLX0KLQotdm9pZCBkaXNjb25uZWN0QWNjZXNzaWJp
bGl0eUNhbGxiYWNrcygpCi17Ci0gICAgLy8gQXRrT2JqZWN0IHNpZ25hbHMuCi0gICAgaWYgKHN0
YXRlQ2hhbmdlTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9s
aXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3RlbmVySWQpOwotICAgICAgICBzdGF0ZUNoYW5nZUxpc3Rl
bmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAoZm9jdXNFdmVudExpc3RlbmVySWQpIHsKLSAgICAg
ICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQp
OwotICAgICAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChhY3Rp
dmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9i
YWxfZXZlbnRfbGlzdGVuZXIoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKLSAg
ICAgICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAg
aWYgKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9i
YWxfZXZlbnRfbGlzdGVuZXIoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIGNo
aWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlDaGFu
Z2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlz
dGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklk
KSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRh
Q2hhbmdlZExpc3RlbmVySWQpOwotICAgICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklk
ID0gMDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNz
aWJpbGl0eUNhbGxiYWNrcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjI1NzU3
Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzX2gKLSNk
ZWZpbmUgQWNjZXNzaWJpbGl0eUNhbGxiYWNrc19oCi0KLXZvaWQgY29ubmVjdEFjY2Vzc2liaWxp
dHlDYWxsYmFja3MoKTsKLXZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyR3RrLmNwcAppbmRleCA3MGYwODFhLi5kODlhOGQyIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0
ay5jcHAKQEAgLTM3LDIyICszNyw2IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgogI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAotc3RhdGljIGJvb2wgbG9nZ2luZ0FjY2Vz
c2liaWxpdHlFdmVudHMgPSBmYWxzZTsKLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCi17Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKIHsK
ICAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpn
ZXRGb2N1c2VkQWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKQEAgLTcxLDMxICs1NSw2IEBA
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVt
ZW50KCkKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKIH0K
IAotc3RhdGljIEF0a09iamVjdCogY2hpbGRFbGVtZW50QnlJZChBdGtPYmplY3QqIHBhcmVudCwg
Y29uc3QgY2hhciogaWQpCi17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKHBhcmVudCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBhdGtf
b2JqZWN0X2dldF9hdHRyaWJ1dGVzKHBhcmVudCk7Ci0gICAgZm9yIChHU0xpc3QqIGF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJpYnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5u
ZXh0KSB7Ci0gICAgICAgIEF0a0F0dHJpYnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRr
QXR0cmlidXRlKj4oYXR0cmlidXRlcy0+ZGF0YSk7Ci0gICAgICAgIGlmICghc3RyY21wKGF0dHJp
YnV0ZS0+bmFtZSwgImh0bWwtaWQiKSkgewotICAgICAgICAgICAgaWYgKCFzdHJjbXAoYXR0cmli
dXRlLT52YWx1ZSwgaWQpKQotICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCBjaGlsZENvdW50ID0gYXRr
X29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKHBhcmVudCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgQXRrT2JqZWN0KiByZXN1bHQg
PSBjaGlsZEVsZW1lbnRCeUlkKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQocGFyZW50
LCBpKSwgaWQpOwotICAgICAgICBpZiAoQVRLX0lTX09CSkVDVChyZXN1bHQpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRC
eUlkKEpTU3RyaW5nUmVmIGlkKQogewogICAgIEF0a09iamVjdCogcm9vdCA9IER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7CkBAIC0x
MTMsMzkgKzcyLDMgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmUKICAgICByZXR1cm4gMDsKIAog
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dGb2N1c0V2ZW50cyhib29s
KQotewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dTY3JvbGxpbmdT
dGFydEV2ZW50cyhib29sKQotewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpz
ZXRMb2dWYWx1ZUNoYW5nZUV2ZW50cyhib29sKQotewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKGJvb2wgbG9nQWNjZXNzaWJpbGl0
eUV2ZW50cykKLXsKLSAgICBpZiAobG9nQWNjZXNzaWJpbGl0eUV2ZW50cyA9PSBsb2dnaW5nQWNj
ZXNzaWJpbGl0eUV2ZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFsb2dBY2Nlc3Np
YmlsaXR5RXZlbnRzKSB7Ci0gICAgICAgIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
KCk7Ci0gICAgICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwot
ICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gdHJ1ZTsKLX0KLQotYm9vbCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYpCi17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpy
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCi17Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKaW5kZXggNGFiOTk5
NS4uMzBmN2I2NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcApAQCAtMzcsNDA4ICszNyw2IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KIAotc3RhdGljIFN0cmluZyBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoSlNTdHJp
bmdSZWYgYXR0cmlidXRlKQotewotICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRN
YXhpbXVtVVRGOENTdHJpbmdTaXplKGF0dHJpYnV0ZSk7Ci0gICAgR093blB0cjxnY2hhcj4gYnVm
ZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKLSAgICBKU1N0
cmluZ0dldFVURjhDU3RyaW5nKGF0dHJpYnV0ZSwgYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsK
LQotICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5n
ZXQoKSk7Ci0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRlclZhbHVlIikK
LSAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKLQotICAgIHJldHVybiAiIjsKLX0K
LQotc3RhdGljIGlubGluZSBTdHJpbmcgcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKLXsKLSAg
ICBzd2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIEFUS19ST0xFX0FMRVJUOgotICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhBbGVydCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DQU5WQVM6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWENhbnZhcyI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DSEVDS19CT1g6
Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENoZWNrQm94IjsKLSAgICBjYXNlIEFUS19ST0xF
X0NPTFVNTl9IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbHVtbkhlYWRlciI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9DT01CT19CT1g6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WENvbWJvQm94IjsKLSAgICBjYXNlIEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FOgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhXZWJBcmVhIjsKLSAgICBjYXNlIEFUS19ST0xFX0VOVFJZOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhUZXh0RmllbGQiOwotICAgIGNhc2UgQVRLX1JPTEVfRk9P
VEVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhGb290ZXIiOwotICAgIGNhc2UgQVRLX1JP
TEVfRk9STToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRm9ybSI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9HUk9VUElORzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOwotICAgIGNh
c2UgQVRLX1JPTEVfSEVBRElORzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSGVhZGluZyI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9JTUFHRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSW1h
Z2UiOwotICAgIGNhc2UgQVRLX1JPTEVfSU1BR0VfTUFQOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhJbWFnZU1hcCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MQUJFTDoKLSAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYTGFiZWwiOwotICAgIGNhc2UgQVRLX1JPTEVfTElOSzoKLSAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYTGluayI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MSVNUOgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhMaXN0IjsKLSAgICBjYXNlIEFUS19ST0xFX0xJU1RfQk9YOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0Qm94IjsKLSAgICBjYXNlIEFUS19ST0xFX0xJU1Rf
SVRFTToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdEl0ZW0iOwotICAgIGNhc2UgQVRL
X1JPTEVfTUVOVToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudSI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9NRU5VX0JBUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudUJhciI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9NRU5VX0lURU06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1l
bnVJdGVtIjsKLSAgICBjYXNlIEFUS19ST0xFX1BBR0VfVEFCOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhUYWIiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFHRV9UQUJfTElTVDoKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYVGFiR3JvdXAiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFORUw6Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsKLSAgICBjYXNlIEFUS19ST0xFX1BBUkFH
UkFQSDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUGFyYWdyYXBoIjsKLSAgICBjYXNlIEFU
S19ST0xFX1BBU1NXT1JEX1RFWFQ6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBhc3N3b3Jk
RmllbGQiOwotICAgIGNhc2UgQVRLX1JPTEVfUFVTSF9CVVRUT046Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWEJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9SQURJT19CVVRUT046Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWFJhZGlvQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1JP
V19IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvd0hlYWRlciI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9SVUxFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUnVsZXIiOwotICAg
IGNhc2UgQVRLX1JPTEVfU0NST0xMX0JBUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2Ny
b2xsQmFyIjsKLSAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9QQU5FOgotICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhTY3JvbGxBcmVhIjsKLSAgICBjYXNlIEFUS19ST0xFX1NFQ1RJT046Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWERpdiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TRVBBUkFUT1I6
Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhvcml6b250YWxSdWxlIjsKLSAgICBjYXNlIEFU
S19ST0xFX1NMSURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2xpZGVyIjsKLSAgICBj
YXNlIEFUS19ST0xFX1NQSU5fQlVUVE9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTcGlu
QnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxFOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhUYWJsZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9DRUxMOgotICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhDZWxsIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NPTFVNTl9IRUFE
RVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbHVtbkhlYWRlciI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9UQUJMRV9ST1c6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvdyI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9UQUJMRV9ST1dfSEVBREVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhSb3dIZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVE9HR0xFX0JVVFRPTjoKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYVG9nZ2xlQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1RPT0xf
QkFSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUb29sYmFyIjsKLSAgICBjYXNlIEFUS19S
T0xFX1RPT0xfVElQOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhVc2VySW50ZXJmYWNlVG9v
bHRpcCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UUkVFOgotICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhUcmVlIjsKLSAgICBjYXNlIEFUS19ST0xFX1RSRUVfVEFCTEU6Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWFRyZWVHcmlkIjsKLSAgICBjYXNlIEFUS19ST0xFX1RSRUVfSVRFTToKLSAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZUl0ZW0iOwotICAgIGNhc2UgQVRLX1JPTEVfV0lORE9X
OgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhXaW5kb3ciOwotICAgIGNhc2UgQVRLX1JPTEVf
VU5LTk9XTjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVW5rbm93biI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgLy8gV2Ugd2FudCB0byBkaXN0aW5ndWlzaCBBVEtfUk9MRV9VTktOT1dOIGZy
b20gYSBrbm93biBBdGtSb2xlIHdoaWNoCi0gICAgICAgIC8vIG91ciBEUlQgaXNuJ3QgcHJvcGVy
bHkgaGFuZGxpbmcuCi0gICAgICAgIHJldHVybiAiQVhSb2xlOiBGSVhNRSBub3QgaWRlbnRpZmll
ZCI7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGdjaGFyKiByZXBsYWNlQ2hhcmFjdGVyc0Zv
clJlc3VsdHMoZ2NoYXIqIHN0cikKLXsKLSAgICBTdHJpbmcgdVN0cmluZyA9IFN0cmluZzo6ZnJv
bVVURjgoc3RyKTsKLQotICAgIC8vIFRoZSBvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlz
IHBhc3NlZCBhbG9uZyB0byBBVHMgc28gd2UgbmVlZCB0byBiZQotICAgIC8vIGFibGUgdG8gdGVz
dCBmb3IgdGhlaXIgcHJlc2VuY2UgYW5kIGRvIHNvIHdpdGhvdXQgY2F1c2luZyB0ZXN0IGZhaWx1
cmVzLgotICAgIHVTdHJpbmcucmVwbGFjZShvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgIjxv
Ymo+Iik7Ci0KLSAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgbmV3bGluZSBjaGFyYWN0ZXJzIGluIGFj
Y2Vzc2libGUgdGV4dCBvZiBhIHNpbmdsZSBvYmplY3QKLSAgICAvLyBpcyBhcHByb3ByaWF0ZSwg
YnV0IGl0IG1ha2VzIHRlc3QgcmVzdWx0cyAoZXNwZWNpYWxseSB0aGUgYWNjZXNzaWJsZSB0cmVl
KQotICAgIC8vIGhhcmRlciB0byByZWFkLgotICAgIHVTdHJpbmcucmVwbGFjZSgiXG4iLCAiPFxc
bj4iKTsKLQotICAgIHJldHVybiBnX3N0cmR1cCh1U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3Jt
VUlFbGVtZW50IGVsZW1lbnQpCi0gICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKLXsKLSAgICBpZiAo
bV9lbGVtZW50KQotICAgICAgICBnX29iamVjdF9yZWYobV9lbGVtZW50KTsKLX0KLQotQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50JiBvdGhlcikKLSAgICA6IG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCi17
Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgZ19vYmplY3RfcmVmKG1fZWxlbWVudCk7Ci19
Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KCkKLXsK
LSAgICBpZiAobV9lbGVtZW50KQotICAgICAgICBnX29iamVjdF91bnJlZihtX2VsZW1lbnQpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMoVmVj
dG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50cykKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRM
aW5rcyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbihW
ZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNoaWxkcmVuKQotewotICAgIGludCBjb3Vu
dCA9IGNoaWxkcmVuQ291bnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKLSAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5k
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+JiBlbGVtZW50VmVjdG9yLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5k
KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLSAgICAg
ICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRL
X09CSkVDVChtX2VsZW1lbnQpLCBpKTsKLSAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBlbmQoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOwotICAgIH0KLX0KLQotaW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvd0NvdW50KCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOwotCi0gICAg
cmV0dXJuIGF0a190YWJsZV9nZXRfbl9yb3dzKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKLX0KLQot
aW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KCkKLXsKLSAgICBpZiAoIW1f
ZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1f
ZWxlbWVudCkpOwotCi0gICAgcmV0dXJuIGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKEFUS19UQUJM
RShtX2VsZW1lbnQpKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVu
Q291bnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwotCi0gICAgcmV0dXJuIGF0a19vYmpl
Y3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRB
dFBvaW50KGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhdGtfY29tcG9uZW50
X3JlZl9hY2Nlc3NpYmxlX2F0X3BvaW50KEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgeCwgeSwg
QVRLX1hZX1dJTkRPVykpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKLXsKLSAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY2hpbGRyZW47
Ci0gICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRyZW4sIGluZGV4LCBpbmRleCArIDEpOwot
Ci0gICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gY2hpbGRyZW4u
YXQoMCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCi17IAot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotZ2NoYXIqIGF0dHJp
YnV0ZVNldFRvU3RyaW5nKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0KQotewotICAgIEdT
dHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKLSAgICBmb3IgKEdTTGlzdCogYXR0cmlidXRl
cyA9IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMtPm5l
eHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtB
dHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgR093blB0cjxnY2hhcj4gYXR0
cmlidXRlRGF0YShnX3N0cmNvbmNhdChhdHRyaWJ1dGUtPm5hbWUsICI6IiwgYXR0cmlidXRlLT52
YWx1ZSwgTlVMTCkpOwotICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBhdHRyaWJ1dGVEYXRh
LmdldCgpKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMtPm5leHQpCi0gICAgICAgICAgICBnX3N0
cmluZ19hcHBlbmQoc3RyLCAiLCAiKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ19zdHJpbmdfZnJl
ZShzdHIsIEZBTFNFKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YWxsQXR0cmlidXRlcygpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgQVNTRVJUKEFUS19JU19P
QkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgR093blB0cjxnY2hhcj4gYXR0cmlidXRlRGF0YShhdHRy
aWJ1dGVTZXRUb1N0cmluZyhhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1QobV9l
bGVtZW50KSkpKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0
cmlidXRlRGF0YS5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1l
bnRMaW5rcygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KCkKLXsKLSAgICBpZiAoIW1f
ZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdGtSZWxhdGlvblNldCogc2V0ID0g
YXRrX29iamVjdF9yZWZfcmVsYXRpb25fc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAg
aWYgKCFzZXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQXRrT2JqZWN0KiB0YXJnZXQgPSAw
OwotICAgIGludCBjb3VudCA9IGF0a19yZWxhdGlvbl9zZXRfZ2V0X25fcmVsYXRpb25zKHNldCk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIEF0a1JlbGF0
aW9uKiByZWxhdGlvbiA9IGF0a19yZWxhdGlvbl9zZXRfZ2V0X3JlbGF0aW9uKHNldCwgaSk7Ci0g
ICAgICAgIGlmIChhdGtfcmVsYXRpb25fZ2V0X3JlbGF0aW9uX3R5cGUocmVsYXRpb24pID09IEFU
S19SRUxBVElPTl9MQUJFTExFRF9CWSkgewotICAgICAgICAgICAgR1B0ckFycmF5KiB0YXJnZXRM
aXN0ID0gYXRrX3JlbGF0aW9uX2dldF90YXJnZXQocmVsYXRpb24pOwotICAgICAgICAgICAgaWYg
KHRhcmdldExpc3QtPmxlbikKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBzdGF0aWNfY2FzdDxB
dGtPYmplY3QqPihnX3B0cl9hcnJheV9pbmRleCh0YXJnZXRMaXN0LCAwKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJlZihzZXQpOwotICAgIHJldHVybiB0YXJnZXQgPyBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KHRhcmdldCkgOiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQotewotICAgIGlm
ICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfT0JK
RUNUKG1fZWxlbWVudCkpOwotCi0gICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAgYXRrX29iamVjdF9n
ZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgcmV0dXJuIHBhcmVudCA/IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVOYW1lcygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKLXsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtf
b2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgaWYgKCFyb2xlKQot
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAg
IFN0cmluZyByb2xlU3RyaW5nID0gcm9sZVRvU3RyaW5nKHJvbGUpOwotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyb2xlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURl
c2NyaXB0aW9uKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGUoKQotewotICAgIGNvbnN0IGdjaGFyKiBuYW1lID0gYXRrX29i
amVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIEdPd25QdHI8Z2NoYXI+
IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRpdGxlOiAlcyIsIG5hbWUgPyBuYW1lIDogIiIp
KTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheFRpdGxlLmdl
dCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRp
b24oKQotewotICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlvbiA9IGF0a19vYmplY3RfZ2V0X2Rl
c2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICBpZiAoIWRlc2NyaXB0aW9u
KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQot
ICAgIEdPd25QdHI8Z2NoYXI+IGF4RGVzYyhnX3N0cmR1cF9wcmludGYoIkFYRGVzY3JpcHRpb246
ICVzIiwgZGVzY3JpcHRpb24pKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhheERlc2MuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzdHJpbmdWYWx1ZSgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19U
RVhUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOwotCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVY
VChtX2VsZW1lbnQpLCAwLCAtMSk7Ci0gICAgR093blB0cjxnY2hhcj4gYXhWYWx1ZShnX3N0cmR1
cF9wcmludGYoIkFYVmFsdWU6ICVzIiwgcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKHRleHQp
KSk7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGF4VmFsdWUuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpsYW5ndWFnZSgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgLy8gSW4gQVRL
LCB0aGUgZG9jdW1lbnQgbGFuZ3VhZ2UgaXMgZXhwb3NlZCBhcyB0aGUgZG9jdW1lbnQncyBsb2Nh
bGUuCi0gICAgaWYgKGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKSA9
PSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMiLCBhdGtfZG9j
dW1lbnRfZ2V0X2xvY2FsZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSkpKTsKLQotICAgIC8vIEZv
ciBhbGwgb3RoZXIgb2JqZWN0cywgdGhlIGxhbmd1YWdlIGlzIGV4cG9zZWQgYXMgYW4gQXRrVGV4
dCBhdHRyaWJ1dGUuCi0gICAgaWYgKCFBVEtfSVNfVEVYVChtX2VsZW1lbnQpKQotICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIGZvciAoR1NM
aXN0KiB0ZXh0QXR0cmlidXRlcyA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoQVRL
X1RFWFQobV9lbGVtZW50KSk7IHRleHRBdHRyaWJ1dGVzOyB0ZXh0QXR0cmlidXRlcyA9IHRleHRB
dHRyaWJ1dGVzLT5uZXh0KSB7Ci0gICAgICAgIEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRlID0g
c3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4odGV4dEF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAg
ICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRf
bmFtZShBVEtfVEVYVF9BVFRSX0xBTkdVQUdFKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdlOiAlcyIs
IGF0a0F0dHJpYnV0ZS0+dmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aGVscFRleHQoKSBjb25zdAogewogICAgIGlmICghbV9lbGVtZW50KQpAQCAtNDUw
LDYwOSArNDgsMyBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4
dCgpIGNvbnN0CiAgICAgR093blB0cjxnY2hhcj4gYXhIZWxwVGV4dChnX3N0cmR1cF9wcmludGYo
IkFYSGVscDogJXMiLCBoZWxwVGV4dC5kYXRhKCkpKTsKICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoYXhIZWxwVGV4dC5nZXQoKSk7CiB9Ci0KLWRvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp4KCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIGF0a19jb21wb25l
bnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlf
U0NSRUVOKTsKLQotICAgIHJldHVybiB4OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6eSgpCi17Ci0gICAgaW50IHgsIHk7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9wb3Np
dGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7Ci0K
LSAgICByZXR1cm4geTsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRo
KCkKLXsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3Np
emUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgcmV0
dXJuIHdpZHRoOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KCkK
LXsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUo
QVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgcmV0dXJu
IGhlaWdodDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRY
KCkKLXsKLSAgICAvLyBOb3RlOiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgd2UgaGF2ZSBpbiBBVEsu
Ci0gICAgcmV0dXJuIDAuZjsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNs
aWNrUG9pbnRZKCkKLXsKLSAgICAvLyBOb3RlOiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgd2UgaGF2
ZSBpbiBBVEsuCi0gICAgcmV0dXJuIDAuZjsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1k
b3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKSBjb25zdAotewotICAgIEdW
YWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07Ci0KLSAgICBpZiAoIUFUS19JU19WQUxVRSht
X2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIGF0a192YWx1ZV9nZXRfY3Vy
cmVudF92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKLSAgICBpZiAoIUdfVkFM
VUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgcmV0dXJu
IGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjptaW5WYWx1ZSgpCi17Ci0gICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0g
fTsKLQotICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiAw
LjBmOwotCi0gICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1l
bnQpLCAmdmFsdWUpOwotICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQotICAg
ICAgICByZXR1cm4gMC4wZjsKLSAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsK
LX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKLXsKLSAgICBH
VmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OwotCi0gICAgaWYgKCFBVEtfSVNfVkFMVUUo
bV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBhdGtfdmFsdWVfZ2V0X21h
eGltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7Ci0gICAgaWYgKCFHX1ZB
TFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiAwLjBmOwotICAgIHJldHVy
biBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IGFmdGVyIGl0IGhhcyBiZWVuIGltcGxlbWVudGVkIGluIEFUSy4KLSAgICAvLyBTZWU6IGh0
dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1NzYKLSAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotc3RhdGljIGJvb2wg
Y2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVUeXBl
IHN0YXRlVHlwZSkKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QoZWxlbWVudCkpCi0gICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFk
b3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChlbGVtZW50KSkpOwot
ICAgIHJldHVybiBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBz
dGF0ZVR5cGUpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZCgp
Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX0VO
QUJMRUQpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRM
aW5lTnVtYmVyKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNQcmVzc0FjdGlvblN1cHBvcnRlZCgp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luY3JlbWVudEFjdGlvblN1cHBvcnRlZCgpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZCgpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxl
bWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+
IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNU
KG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVhbiBpc0ZvY3VzZWQgPSBhdGtfc3RhdGVfc2V0X2Nv
bnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNFRCk7Ci0KLSAgICBy
ZXR1cm4gaXNGb2N1c2VkOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2Vs
ZWN0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQs
IEFUS19TVEFURV9TRUxFQ1RFRCk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpo
aWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFJc0dyYWJi
ZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSAKLUpTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0Ci17ICAgCi0gICAgcmV0
dXJuIDA7IAotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQoKSBj
b25zdAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1Jl
ZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Ci0gICAg
Z2Jvb2xlYW4gaXNFeHBhbmRlZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVT
ZXQuZ2V0KCksIEFUS19TVEFURV9FWFBBTkRFRCk7Ci0KLSAgICByZXR1cm4gaXNFeHBhbmRlZDsK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAotewot
ICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2Jq
ZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Ci0gICAgZ2Jvb2xlYW4g
aXNDaGVja2VkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwg
QVRLX1NUQVRFX0NIRUNLRUQpOwotCi0gICAgcmV0dXJuIGlzQ2hlY2tlZDsKLX0KLQotSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mUm93cygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mSGVhZGVyKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWludCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGUoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRh
YmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKLXsKLSAgICBH
T3duUHRyPGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgiezAsIDB9IikpOwotCi0gICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
cmFuZ2VTdHJpbmcuZ2V0KCkpOwotCi0gICAgQVNTRVJUKEFUS19JU19PQkpFQ1QoZWxlbWVudCkp
OwotCi0gICAgQXRrT2JqZWN0KiBheFRhYmxlID0gYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19P
QkpFQ1QoZWxlbWVudCkpOwotICAgIGlmICghYXhUYWJsZSB8fCAhQVRLX0lTX1RBQkxFKGF4VGFi
bGUpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VT
dHJpbmcuZ2V0KCkpOwotCi0gICAgLy8gTG9vayBmb3IgdGhlIGNlbGwgaW4gdGhlIHRhYmxlLgot
ICAgIGdpbnQgaW5kZXhJblBhcmVudCA9IGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChB
VEtfT0JKRUNUKGVsZW1lbnQpKTsKLSAgICBpZiAoaW5kZXhJblBhcmVudCA9PSAtMSkKLSAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgp
KTsKLQotICAgIGludCByb3cgPSAtMTsKLSAgICBpbnQgY29sdW1uID0gLTE7Ci0gICAgcm93ID0g
YXRrX3RhYmxlX2dldF9yb3dfYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRleEluUGFy
ZW50KTsKLSAgICBjb2x1bW4gPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9hdF9pbmRleChBVEtfVEFC
TEUoYXhUYWJsZSksIGluZGV4SW5QYXJlbnQpOwotCi0gICAgLy8gR2V0IHRoZSBhY3R1YWwgdmFs
dWVzLCBpZiByb3cgYW5kIGNvbHVtbnMgYXJlIHZhbGlkIHZhbHVlcy4KLSAgICBpZiAocm93ICE9
IC0xICYmIGNvbHVtbiAhPSAtMSkgewotICAgICAgICBpbnQgYmFzZSA9IDA7Ci0gICAgICAgIGlu
dCBsZW5ndGggPSAwOwotICAgICAgICBpZiAoaXNSb3dSYW5nZSkgewotICAgICAgICAgICAgYmFz
ZSA9IHJvdzsKLSAgICAgICAgICAgIGxlbmd0aCA9IGF0a190YWJsZV9nZXRfcm93X2V4dGVudF9h
dChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGJhc2UgPSBjb2x1bW47Ci0gICAgICAgICAgICBsZW5ndGggPSBhdGtfdGFibGVf
Z2V0X2NvbHVtbl9leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFibGUpLCByb3csIGNvbHVtbik7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmFuZ2VTdHJpbmcuc2V0KGdfc3RyZHVwX3ByaW50ZigieyVkLCAl
ZH0iLCBiYXNlLCBsZW5ndGgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlKCkKLXsKLSAgICAvLyBSYW5nZSBpbiB0
YWJsZSBmb3Igcm93cy4KLSAgICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCB0
cnVlKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSW5k
ZXhSYW5nZSgpCi17Ci0gICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9yIGNvbHVtbnMuCi0gICAgcmV0
dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudCwgZmFsc2UpOwotfQotCi1pbnQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpIAotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKLX0gCi0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRT
dHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzTWlz
c3BlbGxlZCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRl
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5l
eHQsIEpTU3RyaW5nUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCkKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNp
Z25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdykKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOwotCi0g
ICAgQXRrT2JqZWN0KiBmb3VuZENlbGwgPSBhdGtfdGFibGVfcmVmX2F0KEFUS19UQUJMRShtX2Vs
ZW1lbnQpLCByb3csIGNvbHVtbik7Ci0gICAgcmV0dXJuIGZvdW5kQ2VsbCA/IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoZm91bmRDZWxsKSA6IDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWdu
ZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0
ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBT
dHJpbmcgYXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShhdHRy
aWJ1dGUpOwotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBmb3IgKEdTTGlz
dCogYXRrQXR0cmlidXRlcyA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoQVRLX09CSkVDVCht
X2VsZW1lbnQpKTsgYXRrQXR0cmlidXRlczsgYXRrQXR0cmlidXRlcyA9IGF0a0F0dHJpYnV0ZXMt
Pm5leHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUgPSBzdGF0aWNfY2Fz
dDxBdGtBdHRyaWJ1dGUqPihhdGtBdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgaWYgKCFzdHJj
bXAoYXRrQXR0cmlidXRlLT5uYW1lLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a0F0dHJp
YnV0ZS0+dmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVy
QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gMC4wZjsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpib29sQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1Jl
ZiBhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBhbHRl
ckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQotewot
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKEFUS19JU19W
QUxVRShlbGVtZW50KSk7Ci0KLSAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19WQUxVRV9JTklU
OwotICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZj
dXJyZW50VmFsdWUpOwotCi0gICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVfSU5JVDsKLSAg
ICBhdGtfdmFsdWVfZ2V0X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVtZW50KSwgJmlu
Y3JlbWVudCk7Ci0KLSAgICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgZ192
YWx1ZV9pbml0KCZuZXdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsKLQotICAgIGdfdmFsdWVfc2V0X2Zs
b2F0KCZuZXdWYWx1ZSwgZ192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkgKyBmYWN0b3Ig
KiBnX3ZhbHVlX2dldF9mbG9hdCgmaW5jcmVtZW50KSk7Ci0gICAgYXRrX3ZhbHVlX3NldF9jdXJy
ZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKLQotICAgIGdfdmFsdWVf
dW5zZXQoJm5ld1ZhbHVlKTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQpOwotICAgIGdf
dmFsdWVfdW5zZXQoJmN1cnJlbnRWYWx1ZSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aW5jcmVtZW50KCkKLXsKLSAgICBhbHRlckN1cnJlbnRWYWx1ZShtX2VsZW1lbnQsIDEp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCgpCi17Ci0gICAg
YWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAtMSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cHJlc3MoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKLQotICAgIGlmICgh
QVRLX0lTX0FDVElPTihtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPbmx5
IG9uZSBhY3Rpb24gcGVyIG9iamVjdCBpcyBzdXBwb3J0ZWQgc28gZmFyLgotICAgIGF0a19hY3Rp
b25fZG9fYWN0aW9uKEFUS19BQ1RJT04obV9lbGVtZW50KSwgMCk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2hvd01lbnUoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNj
bG9zZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFPd25zRWxl
bWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1l
bnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkUm93QXRJbmRl
eCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4
KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZEJ5Um93KCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQot
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQotewotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19v
YmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBpZiAocm9sZSAhPSBB
VEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoYXRrX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWUoQVRLX0RPQ1VNRU5UKG1fZWxl
bWVudCksICJFbmNvZGluZyIpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZG9jdW1lbnRVUkkoKQotewotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0
X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBpZiAocm9sZSAhPSBBVEtfUk9MRV9E
T0NVTUVOVF9GUkFNRSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnMoMCwgMCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRr
X2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWUoQVRLX0RPQ1VNRU5UKG1fZWxlbWVudCksICJV
UkkiKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQg
PSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50
KSkpOwotICAgIGdib29sZWFuIGlzRm9jdXNhYmxlID0gYXRrX3N0YXRlX3NldF9jb250YWluc19z
dGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7Ci0KLSAgICByZXR1cm4g
aXNGb2N1c2FibGU7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3Rh
YmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBB
VEtfU1RBVEVfU0VMRUNUQUJMRSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0
ZShtX2VsZW1lbnQsIEFUS19TVEFURV9NVUxUSVNFTEVDVEFCTEUpOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFw
c2VkKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlRm9jdXMoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0
aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0dOVW1h
a2VmaWxlLmFtIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggNmViMTIyYi4uN2ZhMjZhYSAx
MDA2NDQKLS0tIGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvR05VbWFrZWZpbGUu
YW0KQEAgLTEwMCw2ICsxMDAsNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DUFBGTEFHUyA9
IFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAogCS1EVE9QX0xFVkVMX0RJUj1cIiR7c2hlbGwgcHdk
fS8ke3NyY2Rpcn1cIiBcCiAJLUkkKHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRyZWUgXAorCS1J
JChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ayBcCiAJLUkkKHNyY2RpcikvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsgXApAQCAtMTQxLDggKzE0Miwx
MCBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAogCVRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2NvbmZpZy5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBT
dXBwb3J0Q2Fpcm8uY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBT
dXBwb3J0Q2Fpcm8uaCBcCi0JVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlD
YWxsYmFja3MuaCBcCi0JVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxs
YmFja3MuY3BwIFwKKwlUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxi
YWNrcy5oIFwKKwlUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNr
c0F0ay5jcHAgXAorCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckF0ay5jcHAgXAorCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50QXRrLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyR3RrLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRHdGsuY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRl
clRyZWUuY3BwIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183963</attachid>
            <date>2013-01-22 04:21:40 -0800</date>
            <delta_ts>2013-01-25 08:21:16 -0800</delta_ts>
            <desc>[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</desc>
            <filename>a11y-share-drt.patch</filename>
            <type>text/plain</type>
            <size>81677</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjU3NTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5o
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFjY2Vzc2liaWxpdHlDYWxsYmFja3NfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzX2gKKwordm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwordm9pZCBk
aXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk4MWM3Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsu
Y3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxsYmFja3Mu
aCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWUuaCIKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIldlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQu
aD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
Q2hyb21lLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsLmgiCisjZW5kaWYKKworc3RhdGljIGd1aW50IHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7
CitzdGF0aWMgZ3VpbnQgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IGFj
dGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CitzdGF0aWMgZ3VpbnQgY2hpbGRy
ZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CitzdGF0aWMgZ3VpbnQgcHJvcGVydHlDaGFuZ2VkTGlz
dGVuZXJJZCA9IDA7CitzdGF0aWMgZ3VpbnQgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9
IDA7CisKK3N0YXRpYyB2b2lkIHByaW50QWNjZXNzaWJpbGl0eUV2ZW50KEF0a09iamVjdCogYWNj
ZXNzaWJsZSwgY29uc3QgZ2NoYXIqIHNpZ25hbE5hbWUsIGNvbnN0IGdjaGFyKiBzaWduYWxWYWx1
ZSkKK3sKKyAgICAvLyBEbyBub3QgaGFuZGxlIHN0YXRlLWNoYW5nZTpkZWZ1bmN0IHNpZ25hbHMs
IGFzIHRoZSBBdGtPYmplY3QKKyAgICAvLyBhc3NvY2lhdGVkIHRvIHRoZW0gd2lsbCBub3QgYmUg
dmFsaWQgYXQgdGhpcyBwb2ludCBhbHJlYWR5LgorICAgIGlmICghc2lnbmFsTmFtZSB8fCAhZ19z
dHJjbXAwKHNpZ25hbE5hbWUsICJzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCIpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGdjaGFyKiBvYmplY3ROYW1lID0gYXRrX29i
amVjdF9nZXRfbmFtZShhY2Nlc3NpYmxlKTsKKyAgICBBdGtSb2xlIG9iamVjdFJvbGUgPSBhdGtf
b2JqZWN0X2dldF9yb2xlKGFjY2Vzc2libGUpOworCisgICAgLy8gVHJ5IHRvIGFsd2F5cyBwcm92
aWRlIGEgbmFtZSB0byBiZSBsb2dnZWQgZm9yIHRoZSBvYmplY3QuCisgICAgaWYgKCFvYmplY3RO
YW1lIHx8ICpvYmplY3ROYW1lID09ICdcMCcpCisgICAgICAgIG9iamVjdE5hbWUgPSAiKE5vIG5h
bWUpIjsKKworICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWVBbmRWYWx1ZShzaWduYWxWYWx1
ZSA/IGdfc3RyZHVwX3ByaW50ZigiJXMgPSAlcyIsIHNpZ25hbE5hbWUsIHNpZ25hbFZhbHVlKSA6
IGdfc3RyZHVwKHNpZ25hbE5hbWUpKTsKKyAgICBwcmludGYoIkFjY2Vzc2liaWxpdHkgb2JqZWN0
IGVtaXR0ZWQgXCIlc1wiIC8gTmFtZTogXCIlc1wiIC8gUm9sZTogJWRcbiIsCisgICAgICAgICAg
IHNpZ25hbE5hbWVBbmRWYWx1ZS5nZXQoKSwgb2JqZWN0TmFtZSwgb2JqZWN0Um9sZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlzdGVuZXIoR1NpZ25hbEludm9jYXRpb25I
aW50ICpzaWduYWxIaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
dWludCBudW1QYXJhbVZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR1ZhbHVlICpwYXJhbVZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICAvLyBBdCBsZWFzdCB3ZSBzaG91bGQg
cmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4KKyAgICBpZiAobnVtUGFy
YW1WYWx1ZXMgPCAxKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIEF0a09iamVjdCogYWNj
ZXNzaWJsZSA9IEFUS19PQkpFQ1QoZ192YWx1ZV9nZXRfb2JqZWN0KCZwYXJhbVZhbHVlc1swXSkp
OworICAgIGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lTX09CSkVDVChhY2Nlc3NpYmxlKSkKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBHU2lnbmFsUXVlcnkgc2lnbmFsX3F1ZXJ5OworICAg
IEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWU7CisgICAgR093blB0cjxnY2hhcj4gc2lnbmFsVmFs
dWU7CisKKyAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxf
cXVlcnkpOworCisgICAgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAi
c3RhdGUtY2hhbmdlIikpIHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRm
KCJzdGF0ZS1jaGFuZ2U6JXMiLCBnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVzWzFdKSkp
OworICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVf
Z2V0X2Jvb2xlYW4oJnBhcmFtVmFsdWVzWzJdKSkpOworICAgIH0gZWxzZSBpZiAoIWdfc3RyY21w
MChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJmb2N1cy1ldmVudCIpKSB7CisgICAgICAgIHNp
Z25hbE5hbWUuc2V0KGdfc3RyZHVwKCJmb2N1cy1ldmVudCIpKTsKKyAgICAgICAgc2lnbmFsVmFs
dWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF9ib29sZWFuKCZwYXJhbVZh
bHVlc1sxXSkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25h
bF9uYW1lLCAiY2hpbGRyZW4tY2hhbmdlZCIpKSB7CisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdf
c3RyZHVwKCJjaGlsZHJlbi1jaGFuZ2VkIikpOworICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19z
dHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X3VpbnQoJnBhcmFtVmFsdWVzWzFdKSkpOwor
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJwcm9w
ZXJ0eS1jaGFuZ2UiKSkgeworICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cF9wcmludGYo
InByb3BlcnR5LWNoYW5nZTolcyIsIGdfcXVhcmtfdG9fc3RyaW5nKHNpZ25hbEhpbnQtPmRldGFp
bCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXAoc2lnbmFs
X3F1ZXJ5LnNpZ25hbF9uYW1lKSk7CisKKyAgICBwcmludEFjY2Vzc2liaWxpdHlFdmVudChhY2Nl
c3NpYmxlLCBzaWduYWxOYW1lLmdldCgpLCBzaWduYWxWYWx1ZS5nZXQoKSk7CisKKyAgICByZXR1
cm4gVFJVRTsKK30KKwordm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpCit7Cisg
ICAgLy8gRW5zdXJlIG5vIGNhbGxiYWNrcyBhcmUgY29ubmVjdGVkIGJlZm9yZS4KKyAgICBkaXNj
b25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWNj
ZXNzaWJpbGl0eSBpcyBpbml0aWFsaXplZCBmb3IgdGhlIFdlYlZpZXcgYnkgcXVlcnlpbmcgZm9y
CisgICAgLy8gdGhlIHJvb3QgYWNjZXNzaWJsZSBvYmplY3QsIHdoaWNoIHdpbGwgY3JlYXRlIHRo
ZSBmdWxsIGhpZXJhcmNoeS4KKyNpZiBQTEFURk9STShHVEspCisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpnZXRSb290QWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKKyNlbGlmIFBM
QVRGT1JNKEVGTCkKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJvb3RBY2Nlc3NpYmxl
RWxlbWVudChicm93c2VyLT5tYWluRnJhbWUoKSk7CisjZW5kaWYKKworICAgIC8vIEFkZCBnbG9i
YWwgbGlzdGVuZXJzIGZvciBBdGtPYmplY3QncyBzaWduYWxzLgorICAgIHN0YXRlQ2hhbmdlTGlz
dGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0
ZW5lciwgIkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hhbmdlIik7CisgICAgZm9jdXNFdmVudExpc3Rl
bmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVu
ZXIsICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2ZW50Iik7CisgICAgYWN0aXZlRGVzY2VuZGFudENo
YW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RF
dmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDphY3RpdmUtZGVzY2VuZGFudC1jaGFuZ2VkIik7
CisgICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hh
bmdlZCIpOworICAgIHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9l
dmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnByb3Bl
cnR5LWNoYW5nZSIpOworICAgIHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRk
X2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2Jq
ZWN0OnZpc2libGUtZGF0YS1jaGFuZ2VkIik7CisKKyAgICAvLyBFbnN1cmUgdGhlIEF0ayBpbnRl
cmZhY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQsIG90aGVyd2lzZQorICAgIC8vIHRoZSBBdGtEb2N1
bWVudCBzaWduYWwgaGFuZGxlcnMgYmVsb3cgd29uJ3QgZ2V0IHJlZ2lzdGVyZWQuCisgICAgR09i
amVjdCogZHVtbXlBeE9iamVjdCA9IEdfT0JKRUNUKGdfb2JqZWN0X25ldyhBVEtfVFlQRV9PQkpF
Q1QsIDApKTsKKyAgICBBdGtPYmplY3QqIGR1bW15Tm9PcEF4T2JqZWN0ID0gYXRrX25vX29wX29i
amVjdF9uZXcoZHVtbXlBeE9iamVjdCk7CisgICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoZHVt
bXlOb09wQXhPYmplY3QpKTsKKyAgICBnX29iamVjdF91bnJlZihkdW1teUF4T2JqZWN0KTsKK30K
Kwordm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpCit7CisgICAgLy8gQXRr
T2JqZWN0IHNpZ25hbHMuCisgICAgaWYgKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCkgeworICAgICAg
ICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3RlbmVySWQp
OworICAgICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAoZm9j
dXNFdmVudExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlz
dGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQpOworICAgICAgICBmb2N1c0V2ZW50TGlzdGVuZXJJ
ZCA9IDA7CisgICAgfQorICAgIGlmIChhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQp
IHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYWN0aXZlRGVzY2Vu
ZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRM
aXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQp
IHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoY2hpbGRyZW5DaGFu
Z2VkTGlzdGVuZXJJZCk7CisgICAgICAgIGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOwor
ICAgIH0KKyAgICBpZiAocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtf
cmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKTsK
KyAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlmICh2
aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFs
X2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpOworICAgICAgICB2
aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZDA2YWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJB
dGsuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCIKKyNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUu
aCIKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+CisKK3N0YXRpYyBib29sIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7CisK
K0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCit7Cit9
CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQor
eworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpl
bGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dG
b2N1c0V2ZW50cyhib29sKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpz
ZXRMb2dTY3JvbGxpbmdTdGFydEV2ZW50cyhib29sKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpzZXRMb2dWYWx1ZUNoYW5nZUV2ZW50cyhib29sKQoreworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKGJvb2wg
bG9nQWNjZXNzaWJpbGl0eUV2ZW50cykKK3sKKyAgICBpZiAobG9nQWNjZXNzaWJpbGl0eUV2ZW50
cyA9PSBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKSB7CisgICAgICAgIGRpc2Nvbm5lY3RBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2tzKCk7CisgICAgICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0g
ZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25uZWN0QWNjZXNzaWJpbGl0
eUNhbGxiYWNrcygpOworICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gdHJ1ZTsKK30K
KworYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
SlNPYmplY3RSZWYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzODdlNQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
QXRrLmNwcApAQCAtMCwwICsxLDEwNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBN
aWNoYWVsIEFsb256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8
YXRrL2F0ay5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworc3RhdGljIFN0cmlu
ZyBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQorewor
ICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXpl
KGF0dHJpYnV0ZSk7CisgICAgR093blB0cjxnY2hhcj4gYnVmZmVyKHN0YXRpY19jYXN0PGdjaGFy
Kj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGF0
dHJpYnV0ZSwgYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKworICAgIFN0cmluZyBhdHRyaWJ1
dGVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7CisgICAgaWYgKGF0dHJp
YnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRlclZhbHVlIikKKyAgICAgICAgcmV0dXJuICJwbGFj
ZWhvbGRlci10ZXh0IjsKKworICAgIHJldHVybiAiIjsKK30KKworc3RhdGljIGlubGluZSBTdHJp
bmcgcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKK3sKKyAgICBzd2l0Y2ggKHJvbGUpIHsKKyAg
ICBjYXNlIEFUS19ST0xFX0FMRVJUOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhBbGVydCI7
CisgICAgY2FzZSBBVEtfUk9MRV9DQU5WQVM6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENh
bnZhcyI7CisgICAgY2FzZSBBVEtfUk9MRV9DSEVDS19CT1g6CisgICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWENoZWNrQm94IjsKKyAgICBjYXNlIEFUS19ST0xFX0NPTFVNTl9IRUFERVI6CisgICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWENvbHVtbkhlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9D
T01CT19CT1g6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbWJvQm94IjsKKyAgICBjYXNl
IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhXZWJB
cmVhIjsKKyAgICBjYXNlIEFUS19ST0xFX0VOVFJZOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhUZXh0RmllbGQiOworICAgIGNhc2UgQVRLX1JPTEVfRk9PVEVSOgorICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhGb290ZXIiOworICAgIGNhc2UgQVRLX1JPTEVfRk9STToKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYRm9ybSI7CisgICAgY2FzZSBBVEtfUk9MRV9HUk9VUElORzoKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOworICAgIGNhc2UgQVRLX1JPTEVfSEVBRElORzoK
KyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSGVhZGluZyI7CisgICAgY2FzZSBBVEtfUk9MRV9J
TUFHRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSW1hZ2UiOworICAgIGNhc2UgQVRLX1JP
TEVfSU1BR0VfTUFQOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhJbWFnZU1hcCI7CisgICAg
Y2FzZSBBVEtfUk9MRV9MQUJFTDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGFiZWwiOwor
ICAgIGNhc2UgQVRLX1JPTEVfTElOSzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGluayI7
CisgICAgY2FzZSBBVEtfUk9MRV9MSVNUOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0
IjsKKyAgICBjYXNlIEFUS19ST0xFX0xJU1RfQk9YOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhMaXN0Qm94IjsKKyAgICBjYXNlIEFUS19ST0xFX0xJU1RfSVRFTToKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYTGlzdEl0ZW0iOworICAgIGNhc2UgQVRLX1JPTEVfTUVOVToKKyAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYTWVudSI7CisgICAgY2FzZSBBVEtfUk9MRV9NRU5VX0JBUjoKKyAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudUJhciI7CisgICAgY2FzZSBBVEtfUk9MRV9NRU5V
X0lURU06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnVJdGVtIjsKKyAgICBjYXNlIEFU
S19ST0xFX1BBR0VfVEFCOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUYWIiOworICAgIGNh
c2UgQVRLX1JPTEVfUEFHRV9UQUJfTElTVDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFi
R3JvdXAiOworICAgIGNhc2UgQVRLX1JPTEVfUEFORUw6CisgICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWEdyb3VwIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBUkFHUkFQSDoKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYUGFyYWdyYXBoIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBU1NXT1JEX1RFWFQ6
CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBhc3N3b3JkRmllbGQiOworICAgIGNhc2UgQVRL
X1JPTEVfUFVTSF9CVVRUT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEJ1dHRvbiI7Cisg
ICAgY2FzZSBBVEtfUk9MRV9SQURJT19CVVRUT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WFJhZGlvQnV0dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1JPV19IRUFERVI6CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFJvd0hlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9SVUxFUjoKKyAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUnVsZXIiOworICAgIGNhc2UgQVRLX1JPTEVfU0NST0xM
X0JBUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2Nyb2xsQmFyIjsKKyAgICBjYXNlIEFU
S19ST0xFX1NDUk9MTF9QQU5FOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTY3JvbGxBcmVh
IjsKKyAgICBjYXNlIEFUS19ST0xFX1NFQ1RJT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WERpdiI7CisgICAgY2FzZSBBVEtfUk9MRV9TRVBBUkFUT1I6CisgICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWEhvcml6b250YWxSdWxlIjsKKyAgICBjYXNlIEFUS19ST0xFX1NMSURFUjoKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYU2xpZGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX1NQSU5fQlVU
VE9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTcGluQnV0dG9uIjsKKyAgICBjYXNlIEFU
S19ST0xFX1RBQkxFOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUYWJsZSI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9UQUJMRV9DRUxMOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDZWxsIjsK
KyAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NPTFVNTl9IRUFERVI6CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWENvbHVtbkhlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9ST1c6Cisg
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvdyI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9S
T1dfSEVBREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3dIZWFkZXIiOworICAgIGNh
c2UgQVRLX1JPTEVfVE9HR0xFX0JVVFRPTjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVG9n
Z2xlQnV0dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1RPT0xfQkFSOgorICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhUb29sYmFyIjsKKyAgICBjYXNlIEFUS19ST0xFX1RPT0xfVElQOgorICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhVc2VySW50ZXJmYWNlVG9vbHRpcCI7CisgICAgY2FzZSBBVEtf
Uk9MRV9UUkVFOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlIjsKKyAgICBjYXNlIEFU
S19ST0xFX1RSRUVfVEFCTEU6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRyZWVHcmlkIjsK
KyAgICBjYXNlIEFUS19ST0xFX1RSRUVfSVRFTToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
VHJlZUl0ZW0iOworICAgIGNhc2UgQVRLX1JPTEVfV0lORE9XOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhXaW5kb3ciOworICAgIGNhc2UgQVRLX1JPTEVfVU5LTk9XTjoKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYVW5rbm93biI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gV2Ugd2Fu
dCB0byBkaXN0aW5ndWlzaCBBVEtfUk9MRV9VTktOT1dOIGZyb20gYSBrbm93biBBdGtSb2xlIHdo
aWNoCisgICAgICAgIC8vIG91ciBEUlQgaXNuJ3QgcHJvcGVybHkgaGFuZGxpbmcuCisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBGSVhNRSBub3QgaWRlbnRpZmllZCI7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIGdjaGFyKiByZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3VsdHMoZ2NoYXIqIHN0cikK
K3sKKyAgICBTdHJpbmcgdVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoc3RyKTsKKworICAgIC8v
IFRoZSBvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIHBhc3NlZCBhbG9uZyB0byBBVHMg
c28gd2UgbmVlZCB0byBiZQorICAgIC8vIGFibGUgdG8gdGVzdCBmb3IgdGhlaXIgcHJlc2VuY2Ug
YW5kIGRvIHNvIHdpdGhvdXQgY2F1c2luZyB0ZXN0IGZhaWx1cmVzLgorICAgIHVTdHJpbmcucmVw
bGFjZShvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgIjxvYmo+Iik7CisKKyAgICAvLyBUaGUg
cHJlc2VuY2Ugb2YgbmV3bGluZSBjaGFyYWN0ZXJzIGluIGFjY2Vzc2libGUgdGV4dCBvZiBhIHNp
bmdsZSBvYmplY3QKKyAgICAvLyBpcyBhcHByb3ByaWF0ZSwgYnV0IGl0IG1ha2VzIHRlc3QgcmVz
dWx0cyAoZXNwZWNpYWxseSB0aGUgYWNjZXNzaWJsZSB0cmVlKQorICAgIC8vIGhhcmRlciB0byBy
ZWFkLgorICAgIHVTdHJpbmcucmVwbGFjZSgiXG4iLCAiPFxcbj4iKTsKKworICAgIHJldHVybiBn
X3N0cmR1cCh1U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCisg
ICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKK3sKKyAgICBpZiAobV9lbGVtZW50KQorICAgICAgICBn
X29iamVjdF9yZWYobV9lbGVtZW50KTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50JiBvdGhlcikK
KyAgICA6IG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCit7CisgICAgaWYgKG1fZWxlbWVudCkK
KyAgICAgICAgZ19vYmplY3RfcmVmKG1fZWxlbWVudCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KCkKK3sKKyAgICBpZiAobV9lbGVtZW50KQor
ICAgICAgICBnX29iamVjdF91bnJlZihtX2VsZW1lbnQpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+JiBlbGVtZW50cykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5rcyhWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4mKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4mIGNoaWxkcmVuKQoreworICAgIGludCBjb3VudCA9IGNoaWxkcmVuQ291bnQoKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0
KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQpLCBpKTsKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQoY2hpbGQpKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0
Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50
VmVjdG9yLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQoreworICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBp
KTsKKyAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChj
aGlsZCkpOworICAgIH0KK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50
KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NF
UlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOworCisgICAgcmV0dXJuIGF0a190YWJsZV9nZXRf
bl9yb3dzKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbHVtbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOworCisgICAgcmV0
dXJuIGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKK30KKwor
aW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQoKQoreworICAgIGlmICgh
bV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNU
KG1fZWxlbWVudCkpOworCisgICAgcmV0dXJuIGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9j
aGlsZHJlbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkK
K3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChhdGtfY29tcG9uZW50X3JlZl9hY2Nlc3NpYmxlX2F0X3Bv
aW50KEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgeCwgeSwgQVRLX1hZX1dJTkRPVykpOworfQor
CitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJ
RWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY2hpbGRyZW47CisgICAgZ2V0Q2hpbGRyZW5XaXRo
UmFuZ2UoY2hpbGRyZW4sIGluZGV4LCBpbmRleCArIDEpOworCisgICAgaWYgKGNoaWxkcmVuLnNp
emUoKSA9PSAxKQorICAgICAgICByZXR1cm4gY2hpbGRyZW4uYXQoMCk7CisKKyAgICByZXR1cm4g
MDsKK30KKwordW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCit7IAorICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gMDsKK30KKworZ2NoYXIqIGF0dHJpYnV0ZVNldFRvU3RyaW5nKEF0a0F0
dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0KQoreworICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5n
X25ldygwKTsKKyAgICBmb3IgKEdTTGlzdCogYXR0cmlidXRlcyA9IGF0dHJpYnV0ZVNldDsgYXR0
cmlidXRlczsgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMtPm5leHQpIHsKKyAgICAgICAgQXRrQXR0
cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihhdHRyaWJ1dGVz
LT5kYXRhKTsKKyAgICAgICAgR093blB0cjxnY2hhcj4gYXR0cmlidXRlRGF0YShnX3N0cmNvbmNh
dChhdHRyaWJ1dGUtPm5hbWUsICI6IiwgYXR0cmlidXRlLT52YWx1ZSwgTlVMTCkpOworICAgICAg
ICBnX3N0cmluZ19hcHBlbmQoc3RyLCBhdHRyaWJ1dGVEYXRhLmdldCgpKTsKKyAgICAgICAgaWYg
KGF0dHJpYnV0ZXMtPm5leHQpCisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiLCAi
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKK30KKwor
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCit7Cisg
ICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworCisgICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7Cisg
ICAgR093blB0cjxnY2hhcj4gYXR0cmlidXRlRGF0YShhdHRyaWJ1dGVTZXRUb1N0cmluZyhhdGtf
b2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1QobV9lbGVtZW50KSkpKTsKKyAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmlidXRlRGF0YS5nZXQoKSk7Cit9
CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtl
ZFVJRWxlbWVudHMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRpdGxlVUlFbGVtZW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBBdGtSZWxhdGlvblNldCogc2V0ID0gYXRrX29iamVjdF9yZWZfcmVsYXRp
b25fc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYgKCFzZXQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQXRrT2JqZWN0KiB0YXJnZXQgPSAwOworICAgIGludCBjb3VudCA9IGF0
a19yZWxhdGlvbl9zZXRfZ2V0X25fcmVsYXRpb25zKHNldCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEF0a1JlbGF0aW9uKiByZWxhdGlvbiA9IGF0a19y
ZWxhdGlvbl9zZXRfZ2V0X3JlbGF0aW9uKHNldCwgaSk7CisgICAgICAgIGlmIChhdGtfcmVsYXRp
b25fZ2V0X3JlbGF0aW9uX3R5cGUocmVsYXRpb24pID09IEFUS19SRUxBVElPTl9MQUJFTExFRF9C
WSkgeworICAgICAgICAgICAgR1B0ckFycmF5KiB0YXJnZXRMaXN0ID0gYXRrX3JlbGF0aW9uX2dl
dF90YXJnZXQocmVsYXRpb24pOworICAgICAgICAgICAgaWYgKHRhcmdldExpc3QtPmxlbikKKyAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihnX3B0cl9hcnJh
eV9pbmRleCh0YXJnZXRMaXN0LCAwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX29iamVj
dF91bnJlZihzZXQpOworICAgIHJldHVybiB0YXJnZXQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KHRhcmdldCkgOiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworCisg
ICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAgYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSk7CisgICAgcmV0dXJuIHBhcmVudCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
cGFyZW50KSA6IDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZkNoaWxkcmVuKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb2xlKCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19P
QkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYgKCFyb2xlKQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZyByb2xlU3RyaW5nID0g
cm9sZVRvU3RyaW5nKHJvbGUpOworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhyb2xlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUo
KQoreworICAgIGNvbnN0IGdjaGFyKiBuYW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShBVEtfT0JK
RUNUKG1fZWxlbWVudCkpOworICAgIEdPd25QdHI8Z2NoYXI+IGF4VGl0bGUoZ19zdHJkdXBfcHJp
bnRmKCJBWFRpdGxlOiAlcyIsIG5hbWUgPyBuYW1lIDogIiIpKTsKKworICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheFRpdGxlLmdldCgpKTsKK30KKworSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQoreworICAgIGNvbnN0IGdj
aGFyKiBkZXNjcmlwdGlvbiA9IGF0a19vYmplY3RfZ2V0X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSk7CisKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGF4
RGVzYyhnX3N0cmR1cF9wcmludGYoIkFYRGVzY3JpcHRpb246ICVzIiwgZGVzY3JpcHRpb24pKTsK
KworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheERlc2MuZ2V0KCkp
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgp
Cit7CisgICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19URVhUKG1fZWxlbWVudCkpCisgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgZ2No
YXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChtX2VsZW1lbnQpLCAwLCAtMSk7
CisgICAgR093blB0cjxnY2hhcj4gYXhWYWx1ZShnX3N0cmR1cF9wcmludGYoIkFYVmFsdWU6ICVz
IiwgcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKHRleHQpKSk7CisgICAgZ19mcmVlKHRleHQp
OworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4VmFsdWUuZ2V0
KCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgp
Cit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgLy8gSW4gQVRLLCB0aGUgZG9jdW1lbnQgbGFuZ3Vh
Z2UgaXMgZXhwb3NlZCBhcyB0aGUgZG9jdW1lbnQncyBsb2NhbGUuCisgICAgaWYgKGF0a19vYmpl
Y3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKSA9PSBBVEtfUk9MRV9ET0NVTUVOVF9G
UkFNRSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGdfc3Ry
ZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMiLCBhdGtfZG9jdW1lbnRfZ2V0X2xvY2FsZShBVEtf
RE9DVU1FTlQobV9lbGVtZW50KSkpKTsKKworICAgIC8vIEZvciBhbGwgb3RoZXIgb2JqZWN0cywg
dGhlIGxhbmd1YWdlIGlzIGV4cG9zZWQgYXMgYW4gQXRrVGV4dCBhdHRyaWJ1dGUuCisgICAgaWYg
KCFBVEtfSVNfVEVYVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGZvciAoR1NMaXN0KiB0ZXh0QXR0cmlidXRlcyA9
IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoQVRLX1RFWFQobV9lbGVtZW50KSk7IHRl
eHRBdHRyaWJ1dGVzOyB0ZXh0QXR0cmlidXRlcyA9IHRleHRBdHRyaWJ1dGVzLT5uZXh0KSB7Cisg
ICAgICAgIEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmli
dXRlKj4odGV4dEF0dHJpYnV0ZXMtPmRhdGEpOworICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRy
aWJ1dGUtPm5hbWUsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0xB
TkdVQUdFKSkpCisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdlOiAlcyIsIGF0a0F0dHJpYnV0ZS0+dmFsdWUp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngoKQoreworICAgIGludCB4
LCB5OworCisgICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2Vs
ZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOworCisgICAgcmV0dXJuIHg7Cit9CisKK2Rv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAg
IGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngs
ICZ5LCBBVEtfWFlfU0NSRUVOKTsKKworICAgIHJldHVybiB5OworfQorCitkb3VibGUgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0OworCisg
ICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0
aCwgJmhlaWdodCk7CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpoZWlnaHQoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0OworCisgICAg
YXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwg
JmhlaWdodCk7CisKKyAgICByZXR1cm4gaGVpZ2h0OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y2xpY2tQb2ludFgoKQoreworICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNv
bWV0aGluZyB3ZSBoYXZlIGluIEFUSy4KKyAgICByZXR1cm4gMC5mOworfQorCitkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkoKQoreworICAgIC8vIE5vdGU6IFRoaXMg
aXMgbm90IHNvbWV0aGluZyB3ZSBoYXZlIGluIEFUSy4KKyAgICByZXR1cm4gMC5mOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRW
YWx1ZSgpIGNvbnN0Cit7CisgICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKKwor
ICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOwor
CisgICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAm
dmFsdWUpOworICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gMC4wZjsKKyAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsKK30KKwor
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKCkKK3sKKyAgICBHVmFsdWUg
dmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1f
dmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisgICAgaWYgKCFHX1ZBTFVFX0hP
TERTX0ZMT0FUKCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiAwLjBmOworICAgIHJldHVybiBnX3Zh
bHVlX2dldF9mbG9hdCgmdmFsdWUpOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bWF4VmFsdWUoKQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07CisK
KyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMC4wZjsK
KworICAgIGF0a192YWx1ZV9nZXRfbWF4aW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwg
JnZhbHVlKTsKKyAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIDAuMGY7CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gaW1wbGVtZW50ZWQg
aW4gQVRLLgorICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcu
Y2dpP2lkPTY4NDU3NgorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworfQorCitzdGF0aWMgYm9vbCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxlbWVu
dCBlbGVtZW50LCBBdGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQoreworICAgIGlmICghQVRLX0lTX09C
SkVDVChlbGVtZW50KSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRr
U3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChB
VEtfT0JKRUNUKGVsZW1lbnQpKSk7CisgICAgcmV0dXJuIGF0a19zdGF0ZV9zZXRfY29udGFpbnNf
c3RhdGUoc3RhdGVTZXQuZ2V0KCksIHN0YXRlVHlwZSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUo
bV9lbGVtZW50LCBBVEtfU1RBVEVfRU5BQkxFRCk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5jcmVt
ZW50QWN0aW9uU3VwcG9ydGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50
QWN0aW9uU3VwcG9ydGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKK3sKKyAgICBp
ZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9y
ZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIGdib29sZWFuIGlzRm9j
dXNlZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19T
VEFURV9GT0NVU0VEKTsKKworICAgIHJldHVybiBpc0ZvY3VzZWQ7Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoZWNr
RWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKK30KKworaW50IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorIAorSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3Rz
KCkgY29uc3QKK3sgICAKKyAgICByZXR1cm4gMDsgCit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNFeHBhbmRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1f
ZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVT
ZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JK
RUNUKG1fZWxlbWVudCkpKTsKKyAgICBnYm9vbGVhbiBpc0V4cGFuZGVkID0gYXRrX3N0YXRlX3Nl
dF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0VYUEFOREVEKTsKKwor
ICAgIHJldHVybiBpc0V4cGFuZGVkOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzQ2hlY2tlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRl
U2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxl
bWVudCkpKTsKKyAgICBnYm9vbGVhbiBpc0NoZWNrZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5z
X3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfQ0hFQ0tFRCk7CisKKyAgICByZXR1cm4g
aXNDaGVja2VkOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mQ29sdW1ucygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZlZpc2libGVDZWxscygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgSlNT
dHJpbmdSZWYgaW5kZXhSYW5nZUluVGFibGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgYm9v
bCBpc1Jvd1JhbmdlKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHJhbmdlU3RyaW5nKGdfc3RyZHVw
KCJ7MCwgMH0iKSk7CisKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICBBU1NFUlQo
QVRLX0lTX09CSkVDVChlbGVtZW50KSk7CisKKyAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtf
b2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50KSk7CisgICAgaWYgKCFheFRhYmxl
IHx8ICFBVEtfSVNfVEFCTEUoYXhUYWJsZSkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICAvLyBMb29rIGZvciB0
aGUgY2VsbCBpbiB0aGUgdGFibGUuCisgICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVj
dF9nZXRfaW5kZXhfaW5fcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOworICAgIGlmIChpbmRl
eEluUGFyZW50ID09IC0xKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOworCisgICAgaW50IHJvdyA9IC0xOworICAgIGludCBj
b2x1bW4gPSAtMTsKKyAgICByb3cgPSBhdGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFC
TEUoYXhUYWJsZSksIGluZGV4SW5QYXJlbnQpOworICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRf
Y29sdW1uX2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisKKyAg
ICAvLyBHZXQgdGhlIGFjdHVhbCB2YWx1ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQg
dmFsdWVzLgorICAgIGlmIChyb3cgIT0gLTEgJiYgY29sdW1uICE9IC0xKSB7CisgICAgICAgIGlu
dCBiYXNlID0gMDsKKyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChpc1Jvd1Jh
bmdlKSB7CisgICAgICAgICAgICBiYXNlID0gcm93OworICAgICAgICAgICAgbGVuZ3RoID0gYXRr
X3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4p
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZSA9IGNvbHVtbjsKKyAgICAgICAg
ICAgIGxlbmd0aCA9IGF0a190YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhU
YWJsZSksIHJvdywgY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICByYW5nZVN0cmluZy5zZXQo
Z19zdHJkdXBfcHJpbnRmKCJ7JWQsICVkfSIsIGJhc2UsIGxlbmd0aCkpOworICAgIH0KKworICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7
Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2Uo
KQoreworICAgIC8vIFJhbmdlIGluIHRhYmxlIGZvciByb3dzLgorICAgIHJldHVybiBpbmRleFJh
bmdlSW5UYWJsZShtX2VsZW1lbnQsIHRydWUpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKCkKK3sKKyAgICAvLyBSYW5nZSBpbiB0YWJs
ZSBmb3IgY29sdW1ucy4KKyAgICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCBm
YWxzZSk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNp
Z25lZCkgCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfSAKKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlZFN0cmluZ1JhbmdlSXNNaXNzcGVsbGVkKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25l
ZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsK
K30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVs
ZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogc3RhcnRFbGVt
ZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNTdHJpbmdSZWYgc2VhcmNoS2V5LCBKU1N0cmlu
Z1JlZiBzZWFyY2hUZXh0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
MDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
ZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQoreworICAg
IGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNf
VEFCTEUobV9lbGVtZW50KSk7CisKKyAgICBBdGtPYmplY3QqIGZvdW5kQ2VsbCA9IGF0a190YWJs
ZV9yZWZfYXQoQVRLX1RBQkxFKG1fZWxlbWVudCksIHJvdywgY29sdW1uKTsKKyAgICByZXR1cm4g
Zm91bmRDZWxsID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChmb3VuZENlbGwpIDogMDsKK30KKwor
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRT
ZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQorewor
ICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVOYW1lID0gY29yZUF0dHJp
YnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKworICAgIGZvciAoR1NMaXN0KiBhdGtBdHRyaWJ1dGVzID0gYXRrX29iamVjdF9nZXRf
YXR0cmlidXRlcyhBVEtfT0JKRUNUKG1fZWxlbWVudCkpOyBhdGtBdHRyaWJ1dGVzOyBhdGtBdHRy
aWJ1dGVzID0gYXRrQXR0cmlidXRlcy0+bmV4dCkgeworICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0
a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0a0F0dHJpYnV0ZXMtPmRh
dGEpOworICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGF0a0F0dHJpYnV0
ZU5hbWUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoYXRrQXR0cmlidXRlLT52YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2RvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwLjBmOworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1Jl
ZiBhdHRyaWJ1dGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxl
KEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmli
dXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyB2b2lkIGFsdGVyQ3VycmVudFZhbHVlKFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQsIGludCBmYWN0b3IpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQoQVRLX0lTX1ZBTFVFKGVsZW1lbnQpKTsKKworICAgIEdWYWx1ZSBjdXJy
ZW50VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVl
KEFUS19WQUxVRShlbGVtZW50KSwgJmN1cnJlbnRWYWx1ZSk7CisKKyAgICBHVmFsdWUgaW5jcmVt
ZW50ID0gR19WQUxVRV9JTklUOworICAgIGF0a192YWx1ZV9nZXRfbWluaW11bV9pbmNyZW1lbnQo
QVRLX1ZBTFVFKGVsZW1lbnQpLCAmaW5jcmVtZW50KTsKKworICAgIEdWYWx1ZSBuZXdWYWx1ZSA9
IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVlX2luaXQoJm5ld1ZhbHVlLCBHX1RZUEVfRkxPQVQp
OworCisgICAgZ192YWx1ZV9zZXRfZmxvYXQoJm5ld1ZhbHVlLCBnX3ZhbHVlX2dldF9mbG9hdCgm
Y3VycmVudFZhbHVlKSArIGZhY3RvciAqIGdfdmFsdWVfZ2V0X2Zsb2F0KCZpbmNyZW1lbnQpKTsK
KyAgICBhdGtfdmFsdWVfc2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmbmV3
VmFsdWUpOworCisgICAgZ192YWx1ZV91bnNldCgmbmV3VmFsdWUpOworICAgIGdfdmFsdWVfdW5z
ZXQoJmluY3JlbWVudCk7CisgICAgZ192YWx1ZV91bnNldCgmY3VycmVudFZhbHVlKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQoKQoreworICAgIGFsdGVyQ3Vy
cmVudFZhbHVlKG1fZWxlbWVudCwgMSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZGVjcmVtZW50KCkKK3sKKyAgICBhbHRlckN1cnJlbnRWYWx1ZShtX2VsZW1lbnQsIC0xKTsK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcygpCit7CisgICAgaWYgKCFt
X2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1f
ZWxlbWVudCkpOworCisgICAgaWYgKCFBVEtfSVNfQUNUSU9OKG1fZWxlbWVudCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIE9ubHkgb25lIGFjdGlvbiBwZXIgb2JqZWN0IGlzIHN1cHBvcnRl
ZCBzbyBmYXIuCisgICAgYXRrX2FjdGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihtX2VsZW1lbnQp
LCAwKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSgpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7
CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAw
OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJv
d0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQor
eworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCit7Cisg
ICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVu
dCkpOworICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQorICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92
YWx1ZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSwgIkVuY29kaW5nIikpOworfQorCitKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCit7CisgICAgQXRrUm9s
ZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAg
IGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQorICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtf
RE9DVU1FTlQobV9lbGVtZW50KSwgIlVSSSIpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dXJsKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVu
Y3Rpb25DYWxsYmFjaykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlv
bkxpc3RlbmVyKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAoreworICAgIGlmICghQVRLX0lT
X09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRy
PEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9z
ZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7CisgICAgZ2Jvb2xlYW4gaXNGb2N1c2FibGUgPSBh
dGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfRk9D
VVNBQkxFKTsKKworICAgIHJldHVybiBpc0ZvY3VzYWJsZTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBjaGVja0Vs
ZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9TRUxFQ1RBQkxFKTsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX01VTFRJU0VMRUNU
QUJMRSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlv
bkFjdGl2ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNJZ25vcmVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxl
Y3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJG
b2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9H
bG9iYWxQb2ludChpbnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFj
a3MuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3Mu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzk4MWM3Li4wMDAwMDAwCi0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxs
YmFja3MuaCIKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgIldlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgotI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgIkR1bXBSZW5k
ZXJUcmVlQ2hyb21lLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsLmgiCi0jZW5kaWYKLQotc3RhdGljIGd1aW50IHN0YXRlQ2hhbmdlTGlzdGVuZXJJ
ZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1
aW50IGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQg
Y2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgcHJvcGVydHlDaGFu
Z2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVu
ZXJJZCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHByaW50QWNjZXNzaWJpbGl0eUV2ZW50KEF0a09iamVj
dCogYWNjZXNzaWJsZSwgY29uc3QgZ2NoYXIqIHNpZ25hbE5hbWUsIGNvbnN0IGdjaGFyKiBzaWdu
YWxWYWx1ZSkKLXsKLSAgICAvLyBEbyBub3QgaGFuZGxlIHN0YXRlLWNoYW5nZTpkZWZ1bmN0IHNp
Z25hbHMsIGFzIHRoZSBBdGtPYmplY3QKLSAgICAvLyBhc3NvY2lhdGVkIHRvIHRoZW0gd2lsbCBu
b3QgYmUgdmFsaWQgYXQgdGhpcyBwb2ludCBhbHJlYWR5LgotICAgIGlmICghc2lnbmFsTmFtZSB8
fCAhZ19zdHJjbXAwKHNpZ25hbE5hbWUsICJzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCIpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNz
aWJsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGdjaGFyKiBvYmplY3ROYW1lID0g
YXRrX29iamVjdF9nZXRfbmFtZShhY2Nlc3NpYmxlKTsKLSAgICBBdGtSb2xlIG9iamVjdFJvbGUg
PSBhdGtfb2JqZWN0X2dldF9yb2xlKGFjY2Vzc2libGUpOwotCi0gICAgLy8gVHJ5IHRvIGFsd2F5
cyBwcm92aWRlIGEgbmFtZSB0byBiZSBsb2dnZWQgZm9yIHRoZSBvYmplY3QuCi0gICAgaWYgKCFv
YmplY3ROYW1lIHx8ICpvYmplY3ROYW1lID09ICdcMCcpCi0gICAgICAgIG9iamVjdE5hbWUgPSAi
KE5vIG5hbWUpIjsKLQotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWVBbmRWYWx1ZShzaWdu
YWxWYWx1ZSA/IGdfc3RyZHVwX3ByaW50ZigiJXMgPSAlcyIsIHNpZ25hbE5hbWUsIHNpZ25hbFZh
bHVlKSA6IGdfc3RyZHVwKHNpZ25hbE5hbWUpKTsKLSAgICBwcmludGYoIkFjY2Vzc2liaWxpdHkg
b2JqZWN0IGVtaXR0ZWQgXCIlc1wiIC8gTmFtZTogXCIlc1wiIC8gUm9sZTogJWRcbiIsCi0gICAg
ICAgICAgIHNpZ25hbE5hbWVBbmRWYWx1ZS5nZXQoKSwgb2JqZWN0TmFtZSwgb2JqZWN0Um9sZSk7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlzdGVuZXIoR1NpZ25hbEludm9j
YXRpb25IaW50ICpzaWduYWxIaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndWludCBudW1QYXJhbVZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgR1ZhbHVlICpwYXJhbVZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBBdCBsZWFzdCB3ZSBz
aG91bGQgcmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4KLSAgICBpZiAo
bnVtUGFyYW1WYWx1ZXMgPCAxKQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIEF0a09iamVj
dCogYWNjZXNzaWJsZSA9IEFUS19PQkpFQ1QoZ192YWx1ZV9nZXRfb2JqZWN0KCZwYXJhbVZhbHVl
c1swXSkpOwotICAgIGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lTX09CSkVDVChhY2Nlc3NpYmxl
KSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBHU2lnbmFsUXVlcnkgc2lnbmFsX3F1ZXJ5
OwotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWU7Ci0gICAgR093blB0cjxnY2hhcj4gc2ln
bmFsVmFsdWU7Ci0KLSAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZz
aWduYWxfcXVlcnkpOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9u
YW1lLCAic3RhdGUtY2hhbmdlIikpIHsKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBf
cHJpbnRmKCJzdGF0ZS1jaGFuZ2U6JXMiLCBnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVz
WzFdKSkpOwotICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4oJnBhcmFtVmFsdWVzWzJdKSkpOwotICAgIH0gZWxzZSBpZiAoIWdf
c3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJmb2N1cy1ldmVudCIpKSB7Ci0gICAg
ICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKCJmb2N1cy1ldmVudCIpKTsKLSAgICAgICAgc2ln
bmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF9ib29sZWFuKCZw
YXJhbVZhbHVlc1sxXSkpKTsKLSAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5
LnNpZ25hbF9uYW1lLCAiY2hpbGRyZW4tY2hhbmdlZCIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUu
c2V0KGdfc3RyZHVwKCJjaGlsZHJlbi1jaGFuZ2VkIikpOwotICAgICAgICBzaWduYWxWYWx1ZS5z
ZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X3VpbnQoJnBhcmFtVmFsdWVzWzFd
KSkpOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUs
ICJwcm9wZXJ0eS1jaGFuZ2UiKSkgewotICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cF9w
cmludGYoInByb3BlcnR5LWNoYW5nZTolcyIsIGdfcXVhcmtfdG9fc3RyaW5nKHNpZ25hbEhpbnQt
PmRldGFpbCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXAo
c2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lKSk7Ci0KLSAgICBwcmludEFjY2Vzc2liaWxpdHlFdmVu
dChhY2Nlc3NpYmxlLCBzaWduYWxOYW1lLmdldCgpLCBzaWduYWxWYWx1ZS5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygp
Ci17Ci0gICAgLy8gRW5zdXJlIG5vIGNhbGxiYWNrcyBhcmUgY29ubmVjdGVkIGJlZm9yZS4KLSAg
ICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwotCi0gICAgLy8gRW5zdXJlIHRo
YXQgYWNjZXNzaWJpbGl0eSBpcyBpbml0aWFsaXplZCBmb3IgdGhlIFdlYlZpZXcgYnkgcXVlcnlp
bmcgZm9yCi0gICAgLy8gdGhlIHJvb3QgYWNjZXNzaWJsZSBvYmplY3QsIHdoaWNoIHdpbGwgY3Jl
YXRlIHRoZSBmdWxsIGhpZXJhcmNoeS4KLSNpZiBQTEFURk9STShHVEspCi0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpnZXRSb290QWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKLSNl
bGlmIFBMQVRGT1JNKEVGTCkKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJvb3RBY2Nl
c3NpYmxlRWxlbWVudChicm93c2VyLT5tYWluRnJhbWUoKSk7Ci0jZW5kaWYKLQotICAgIC8vIEFk
ZCBnbG9iYWwgbGlzdGVuZXJzIGZvciBBdGtPYmplY3QncyBzaWduYWxzLgotICAgIHN0YXRlQ2hh
bmdlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZl
bnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6c3RhdGUtY2hhbmdlIik7Ci0gICAgZm9jdXNFdmVu
dExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50
TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmZvY3VzLWV2ZW50Iik7Ci0gICAgYWN0aXZlRGVzY2Vu
ZGFudENoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhP
YmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDphY3RpdmUtZGVzY2VuZGFudC1jaGFu
Z2VkIik7Ci0gICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2
ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6Y2hpbGRy
ZW4tY2hhbmdlZCIpOwotICAgIHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2ds
b2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0
OnByb3BlcnR5LWNoYW5nZSIpOwotICAgIHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSBh
dGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6
QXRrT2JqZWN0OnZpc2libGUtZGF0YS1jaGFuZ2VkIik7Ci0KLSAgICAvLyBFbnN1cmUgdGhlIEF0
ayBpbnRlcmZhY2UgdHlwZXMgYXJlIHJlZ2lzdGVyZWQsIG90aGVyd2lzZQotICAgIC8vIHRoZSBB
dGtEb2N1bWVudCBzaWduYWwgaGFuZGxlcnMgYmVsb3cgd29uJ3QgZ2V0IHJlZ2lzdGVyZWQuCi0g
ICAgR09iamVjdCogZHVtbXlBeE9iamVjdCA9IEdfT0JKRUNUKGdfb2JqZWN0X25ldyhBVEtfVFlQ
RV9PQkpFQ1QsIDApKTsKLSAgICBBdGtPYmplY3QqIGR1bW15Tm9PcEF4T2JqZWN0ID0gYXRrX25v
X29wX29iamVjdF9uZXcoZHVtbXlBeE9iamVjdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoR19PQkpF
Q1QoZHVtbXlOb09wQXhPYmplY3QpKTsKLSAgICBnX29iamVjdF91bnJlZihkdW1teUF4T2JqZWN0
KTsKLX0KLQotdm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpCi17Ci0gICAg
Ly8gQXRrT2JqZWN0IHNpZ25hbHMuCi0gICAgaWYgKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCkgewot
ICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3Rl
bmVySWQpOwotICAgICAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBp
ZiAoZm9jdXNFdmVudExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoZm9jdXNFdmVudExpc3RlbmVySWQpOwotICAgICAgICBmb2N1c0V2ZW50TGlz
dGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3Rl
bmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYWN0aXZl
RGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgYWN0aXZlRGVzY2VuZGFudENo
YW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGNoaWxkcmVuQ2hhbmdlZExpc3Rl
bmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoY2hpbGRy
ZW5DaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQg
PSAwOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCkgewotICAgICAg
ICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5l
cklkKTsKLSAgICAgICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAg
IGlmICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVf
Z2xvYmFsX2V2ZW50X2xpc3RlbmVyKHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpOwotICAg
ICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci19Ci0KZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjI1NzU3Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzX2gKLSNkZWZpbmUgQWNjZXNzaWJpbGl0eUNhbGxi
YWNrc19oCi0KLXZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLXZvaWQgZGlz
Y29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApp
bmRleCA3MGYwODFhLi5iMjIzMDE0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKQEAgLTM3LDIyICszNyw2IEBA
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KIAotc3RhdGljIGJvb2wgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsK
LQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKLXsK
LX0KLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigp
Ci17Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKIHsKICAgICBBdGtPYmplY3QqIGFjY2Vzc2li
bGUgPSAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGb2N1c2VkQWNjZXNzaWJsZUVsZW1l
bnQobWFpbkZyYW1lKTsKQEAgLTExMywzOSArOTcsMyBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdS
ZQogICAgIHJldHVybiAwOwogCiB9Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNl
dExvZ0ZvY3VzRXZlbnRzKGJvb2wpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnNldExvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKGJvb2wpCi17Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1ZhbHVlQ2hhbmdlRXZlbnRzKGJvb2wpCi17Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMo
Ym9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKQotewotICAgIGlmIChsb2dBY2Nlc3NpYmlsaXR5
RXZlbnRzID09IGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWxvZ0FjY2Vzc2liaWxpdHlFdmVudHMpIHsKLSAgICAgICAgZGlzY29ubmVjdEFj
Y2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLSAgICAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVu
dHMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbm5lY3RBY2Nlc3Np
YmlsaXR5Q2FsbGJhY2tzKCk7Ci0gICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVl
OwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0
ZW5lcihKU09iamVjdFJlZikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKLXsKLX0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
R3RrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
R3RrLmNwcAppbmRleCA0YWI5OTk1Li4zMGY3YjY0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCkBAIC0zNyw0MDgg
KzM3LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
dW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi1zdGF0aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVU
b0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgc2l6ZV90IGJ1ZmZl
clNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKLSAg
ICBHT3duUHRyPGdjaGFyPiBidWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZm
ZXJTaXplKSkpOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIu
Z2V0KCksIGJ1ZmZlclNpemUpOwotCi0gICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmlu
Zzo6ZnJvbVVURjgoYnVmZmVyLmdldCgpKTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJB
WFBsYWNlaG9sZGVyVmFsdWUiKQotICAgICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOwot
Ci0gICAgcmV0dXJuICIiOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyByb2xlVG9TdHJpbmco
QXRrUm9sZSByb2xlKQotewotICAgIHN3aXRjaCAocm9sZSkgewotICAgIGNhc2UgQVRLX1JPTEVf
QUxFUlQ6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEFsZXJ0IjsKLSAgICBjYXNlIEFUS19S
T0xFX0NBTlZBUzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2FudmFzIjsKLSAgICBjYXNl
IEFUS19ST0xFX0NIRUNLX0JPWDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2hlY2tCb3gi
OwotICAgIGNhc2UgQVRLX1JPTEVfQ09MVU1OX0hFQURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYQ29sdW1uSGVhZGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX0NPTUJPX0JPWDoKLSAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYQ29tYm9Cb3giOwotICAgIGNhc2UgQVRLX1JPTEVfRE9DVU1F
TlRfRlJBTUU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFdlYkFyZWEiOwotICAgIGNhc2Ug
QVRLX1JPTEVfRU5UUlk6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRleHRGaWVsZCI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9GT09URVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEZvb3Rl
ciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9GT1JNOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhG
b3JtIjsKLSAgICBjYXNlIEFUS19ST0xFX0dST1VQSU5HOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhHcm91cCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9IRUFESU5HOgotICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhIZWFkaW5nIjsKLSAgICBjYXNlIEFUS19ST0xFX0lNQUdFOgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhJbWFnZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9JTUFHRV9NQVA6Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEltYWdlTWFwIjsKLSAgICBjYXNlIEFUS19ST0xFX0xB
QkVMOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMYWJlbCI7Ci0gICAgY2FzZSBBVEtfUk9M
RV9MSU5LOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaW5rIjsKLSAgICBjYXNlIEFUS19S
T0xFX0xJU1Q6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3QiOwotICAgIGNhc2UgQVRL
X1JPTEVfTElTVF9CT1g6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3RCb3giOwotICAg
IGNhc2UgQVRLX1JPTEVfTElTVF9JVEVNOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0
SXRlbSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9NRU5VOgotICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhNZW51IjsKLSAgICBjYXNlIEFUS19ST0xFX01FTlVfQkFSOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhNZW51QmFyIjsKLSAgICBjYXNlIEFUS19ST0xFX01FTlVfSVRFTToKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYTWVudUl0ZW0iOwotICAgIGNhc2UgQVRLX1JPTEVfUEFHRV9UQUI6
Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQUdF
X1RBQl9MSVNUOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUYWJHcm91cCI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9QQU5FTDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOwotICAg
IGNhc2UgQVRLX1JPTEVfUEFSQUdSQVBIOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXJh
Z3JhcGgiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFTU1dPUkRfVEVYVDoKLSAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYUGFzc3dvcmRGaWVsZCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QVVNIX0JVVFRP
TjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xF
X1JBRElPX0JVVFRPTjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUmFkaW9CdXR0b24iOwot
ICAgIGNhc2UgQVRLX1JPTEVfUk9XX0hFQURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
Um93SGVhZGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1JVTEVSOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhSdWxlciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TQ1JPTExfQkFSOgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhTY3JvbGxCYXIiOwotICAgIGNhc2UgQVRLX1JPTEVfU0NST0xMX1BB
TkU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNjcm9sbEFyZWEiOwotICAgIGNhc2UgQVRL
X1JPTEVfU0VDVElPTjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRGl2IjsKLSAgICBjYXNl
IEFUS19ST0xFX1NFUEFSQVRPUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSG9yaXpvbnRh
bFJ1bGUiOwotICAgIGNhc2UgQVRLX1JPTEVfU0xJREVSOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhTbGlkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfU1BJTl9CVVRUT046Ci0gICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFNwaW5CdXR0b24iOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEU6Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYmxlIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxF
X0NFTEw6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENlbGwiOwotICAgIGNhc2UgQVRLX1JP
TEVfVEFCTEVfQ09MVU1OX0hFQURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29sdW1u
SGVhZGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxFX1JPVzoKLSAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYUm93IjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxFX1JPV19IRUFERVI6Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWFJvd0hlYWRlciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UT0dH
TEVfQlVUVE9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUb2dnbGVCdXR0b24iOwotICAg
IGNhc2UgQVRLX1JPTEVfVE9PTF9CQVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvb2xi
YXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVE9PTF9USVA6Ci0gICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWFVzZXJJbnRlcmZhY2VUb29sdGlwIjsKLSAgICBjYXNlIEFUS19ST0xFX1RSRUU6Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWFRyZWUiOwotICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9UQUJM
RToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZUdyaWQiOwotICAgIGNhc2UgQVRLX1JP
TEVfVFJFRV9JVEVNOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlSXRlbSI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9XSU5ET1c6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFdpbmRvdyI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9VTktOT1dOOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhV
bmtub3duIjsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBXZSB3YW50IHRvIGRpc3Rpbmd1aXNo
IEFUS19ST0xFX1VOS05PV04gZnJvbSBhIGtub3duIEF0a1JvbGUgd2hpY2gKLSAgICAgICAgLy8g
b3VyIERSVCBpc24ndCBwcm9wZXJseSBoYW5kbGluZy4KLSAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEZJWE1FIG5vdCBpZGVudGlmaWVkIjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIq
IHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hhciogc3RyKQotewotICAgIFN0cmluZyB1
U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdHIpOwotCi0gICAgLy8gVGhlIG9iamVjdCByZXBs
YWNlbWVudCBjaGFyYWN0ZXIgaXMgcGFzc2VkIGFsb25nIHRvIEFUcyBzbyB3ZSBuZWVkIHRvIGJl
Ci0gICAgLy8gYWJsZSB0byB0ZXN0IGZvciB0aGVpciBwcmVzZW5jZSBhbmQgZG8gc28gd2l0aG91
dCBjYXVzaW5nIHRlc3QgZmFpbHVyZXMuCi0gICAgdVN0cmluZy5yZXBsYWNlKG9iamVjdFJlcGxh
Y2VtZW50Q2hhcmFjdGVyLCAiPG9iaj4iKTsKLQotICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBuZXds
aW5lIGNoYXJhY3RlcnMgaW4gYWNjZXNzaWJsZSB0ZXh0IG9mIGEgc2luZ2xlIG9iamVjdAotICAg
IC8vIGlzIGFwcHJvcHJpYXRlLCBidXQgaXQgbWFrZXMgdGVzdCByZXN1bHRzIChlc3BlY2lhbGx5
IHRoZSBhY2Nlc3NpYmxlIHRyZWUpCi0gICAgLy8gaGFyZGVyIHRvIHJlYWQuCi0gICAgdVN0cmlu
Zy5yZXBsYWNlKCJcbiIsICI8XFxuPiIpOwotCi0gICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcu
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChl
bGVtZW50KQotewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIGdfb2JqZWN0X3JlZihtX2Vs
ZW1lbnQpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQotICAgIDogbV9lbGVtZW50
KG90aGVyLm1fZWxlbWVudCkKLXsKLSAgICBpZiAobV9lbGVtZW50KQotICAgICAgICBnX29iamVj
dF9yZWYobV9lbGVtZW50KTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQoKQotewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIGdfb2JqZWN0
X3VucmVmKG1fZWxlbWVudCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0
TGlua2VkVUlFbGVtZW50cyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRz
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpnZXREb2N1bWVudExpbmtzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmdldENoaWxkcmVuKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgY2hpbGRy
ZW4pCi17Ci0gICAgaW50IGNvdW50ID0gY2hpbGRyZW5Db3VudCgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOwotICAg
ICAgICBjaGlsZHJlbi5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOwotICAg
IH0KLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5n
ZShWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkg
PCBlbmQ7IGkrKykgewotICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOwotICAgICAgICBlbGVt
ZW50VmVjdG9yLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7Ci0gICAgfQot
fQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291bnQoKQotewotICAgIGlmICgh
bV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUo
bV9lbGVtZW50KSk7Ci0KLSAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxF
KG1fZWxlbWVudCkpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291
bnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFT
U0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7Ci0KLSAgICByZXR1cm4gYXRrX3RhYmxlX2dl
dF9uX2NvbHVtbnMoQVRLX1RBQkxFKG1fZWxlbWVudCkpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7Ci0K
LSAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKEFUS19PQkpF
Q1QobV9lbGVtZW50KSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5KQotewotICAgIGlmICghbV9l
bGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50KGF0a19jb21wb25lbnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQoQVRLX0NPTVBPTkVO
VChtX2VsZW1lbnQpLCB4LCB5LCBBVEtfWFlfV0lORE9XKSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCh1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0
Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBjaGlsZHJlbjsKLSAgICBnZXRDaGlsZHJlbldpdGhSYW5nZShjaGlsZHJlbiwg
aW5kZXgsIGluZGV4ICsgMSk7Ci0KLSAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAg
ICAgIHJldHVybiBjaGlsZHJlbi5hdCgwKTsKLQotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25l
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleE9mQ2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogZWxlbWVudCkKLXsgCi0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAw
OwotfQotCi1nY2hhciogYXR0cmlidXRlU2V0VG9TdHJpbmcoQXRrQXR0cmlidXRlU2V0KiBhdHRy
aWJ1dGVTZXQpCi17Ci0gICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOwotICAgIGZv
ciAoR1NMaXN0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1
dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewotICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0
ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAg
ICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGdfc3RyY29uY2F0KGF0dHJpYnV0ZS0+bmFt
ZSwgIjoiLCBhdHRyaWJ1dGUtPnZhbHVlLCBOVUxMKSk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVu
ZChzdHIsIGF0dHJpYnV0ZURhdGEuZ2V0KCkpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy0+bmV4
dCkKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICIsICIpOwotICAgIH0KLQotICAg
IHJldHVybiBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0UpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKLXsKLSAgICBpZiAoIW1fZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0K
LSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBHT3duUHRyPGdjaGFy
PiBhdHRyaWJ1dGVEYXRhKGF0dHJpYnV0ZVNldFRvU3RyaW5nKGF0a19vYmplY3RfZ2V0X2F0dHJp
YnV0ZXMoQVRLX09CSkVDVChtX2VsZW1lbnQpKSkpOwotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVEYXRhLmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1l
bnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEF0
a1JlbGF0aW9uU2V0KiBzZXQgPSBhdGtfb2JqZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVD
VChtX2VsZW1lbnQpKTsKLSAgICBpZiAoIXNldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBB
dGtPYmplY3QqIHRhcmdldCA9IDA7Ci0gICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9uX3NldF9n
ZXRfbl9yZWxhdGlvbnMoc2V0KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKLSAgICAgICAgQXRrUmVsYXRpb24qIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRf
cmVsYXRpb24oc2V0LCBpKTsKLSAgICAgICAgaWYgKGF0a19yZWxhdGlvbl9nZXRfcmVsYXRpb25f
dHlwZShyZWxhdGlvbikgPT0gQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKSB7Ci0gICAgICAgICAg
ICBHUHRyQXJyYXkqIHRhcmdldExpc3QgPSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChyZWxhdGlv
bik7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0TGlzdC0+bGVuKQotICAgICAgICAgICAgICAgIHRh
cmdldCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdfcHRyX2FycmF5X2luZGV4KHRhcmdldExp
c3QsIDApKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdfb2JqZWN0X3VucmVmKHNldCk7Ci0g
ICAgcmV0dXJuIHRhcmdldCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQodGFyZ2V0KSA6IDA7Ci19
Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50
RWxlbWVudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICBBdGtPYmplY3QqIHBh
cmVudCA9ICBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAg
ICByZXR1cm4gcGFyZW50ID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChwYXJlbnQpIDogMDsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRy
ZW4oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQotewotICAg
IEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQp
KTsKLSAgICBpZiAoIXJvbGUpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOwotCi0gICAgU3RyaW5nIHJvbGVTdHJpbmcgPSByb2xlVG9TdHJpbmcocm9s
ZSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJvbGVTdHJpbmcu
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN1YnJvbGUoKQotewotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQotewotICAgIHJldHVybiAwOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCi17Ci0gICAgY29uc3Qg
Z2NoYXIqIG5hbWUgPSBhdGtfb2JqZWN0X2dldF9uYW1lKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7
Ci0gICAgR093blB0cjxnY2hhcj4gYXhUaXRsZShnX3N0cmR1cF9wcmludGYoIkFYVGl0bGU6ICVz
IiwgbmFtZSA/IG5hbWUgOiAiIikpOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGF4VGl0bGUuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCi17Ci0gICAgY29uc3QgZ2NoYXIqIGRlc2NyaXB0aW9u
ID0gYXRrX29iamVjdF9nZXRfZGVzY3JpcHRpb24oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLQot
ICAgIGlmICghZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOwotCi0gICAgR093blB0cjxnY2hhcj4gYXhEZXNjKGdfc3RyZHVwX3By
aW50ZigiQVhEZXNjcmlwdGlvbjogJXMiLCBkZXNjcmlwdGlvbikpOwotCi0gICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4RGVzYy5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKLXsKLSAgICBpZiAoIW1f
ZWxlbWVudCB8fCAhQVRLX0lTX1RFWFQobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBnY2hhciogdGV4dCA9IGF0a190
ZXh0X2dldF90ZXh0KEFUS19URVhUKG1fZWxlbWVudCksIDAsIC0xKTsKLSAgICBHT3duUHRyPGdj
aGFyPiBheFZhbHVlKGdfc3RyZHVwX3ByaW50ZigiQVhWYWx1ZTogJXMiLCByZXBsYWNlQ2hhcmFj
dGVyc0ZvclJlc3VsdHModGV4dCkpKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhWYWx1ZS5nZXQoKSk7Ci19Ci0KLUpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKLXsKLSAgICBpZiAoIW1f
ZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Ci0KLSAgICAvLyBJbiBBVEssIHRoZSBkb2N1bWVudCBsYW5ndWFnZSBpcyBleHBvc2VkIGFz
IHRoZSBkb2N1bWVudCdzIGxvY2FsZS4KLSAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShBVEtf
T0JKRUNUKG1fZWxlbWVudCkpID09IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQotICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBWExh
bmd1YWdlOiAlcyIsIGF0a19kb2N1bWVudF9nZXRfbG9jYWxlKEFUS19ET0NVTUVOVChtX2VsZW1l
bnQpKSkpOwotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBvYmplY3RzLCB0aGUgbGFuZ3VhZ2UgaXMg
ZXhwb3NlZCBhcyBhbiBBdGtUZXh0IGF0dHJpYnV0ZS4KLSAgICBpZiAoIUFUS19JU19URVhUKG1f
ZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOwotCi0gICAgZm9yIChHU0xpc3QqIHRleHRBdHRyaWJ1dGVzID0gYXRrX3RleHRfZ2V0X2Rl
ZmF1bHRfYXR0cmlidXRlcyhBVEtfVEVYVChtX2VsZW1lbnQpKTsgdGV4dEF0dHJpYnV0ZXM7IHRl
eHRBdHRyaWJ1dGVzID0gdGV4dEF0dHJpYnV0ZXMtPm5leHQpIHsKLSAgICAgICAgQXRrQXR0cmli
dXRlKiBhdGtBdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPih0ZXh0QXR0cmli
dXRlcy0+ZGF0YSk7Ci0gICAgICAgIGlmICghc3RyY21wKGF0a0F0dHJpYnV0ZS0+bmFtZSwgYXRr
X3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfTEFOR1VBR0UpKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhnX3N0cmR1cF9wcmlu
dGYoIkFYTGFuZ3VhZ2U6ICVzIiwgYXRrQXR0cmlidXRlLT52YWx1ZSkpOwotICAgIH0KLQotICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCiBKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2VsZW1lbnQpCkBAIC00NTAsNjA5ICs0OCwzIEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKICAgICBHT3duUHRyPGdjaGFyPiBheEhlbHBU
ZXh0KGdfc3RyZHVwX3ByaW50ZigiQVhIZWxwOiAlcyIsIGhlbHBUZXh0LmRhdGEoKSkpOwogICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheEhlbHBUZXh0LmdldCgpKTsK
IH0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngoKQotewotICAgIGludCB4LCB5
OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1l
bnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLWRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIGF0
a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5
LCBBVEtfWFlfU0NSRUVOKTsKLQotICAgIHJldHVybiB5OwotfQotCi1kb3VibGUgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6d2lkdGgoKQotewotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotCi0gICAg
YXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwg
JmhlaWdodCk7Ci0KLSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpoZWlnaHQoKQotewotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgYXRr
X2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhl
aWdodCk7Ci0KLSAgICByZXR1cm4gaGVpZ2h0OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y2xpY2tQb2ludFgoKQotewotICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0
aGluZyB3ZSBoYXZlIGluIEFUSy4KLSAgICByZXR1cm4gMC5mOwotfQotCi1kb3VibGUgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkoKQotewotICAgIC8vIE5vdGU6IFRoaXMgaXMg
bm90IHNvbWV0aGluZyB3ZSBoYXZlIGluIEFUSy4KLSAgICByZXR1cm4gMC5mOwotfQotCi1KU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1
ZSgpIGNvbnN0Ci17Ci0gICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKLQotICAg
IGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0g
ICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFs
dWUpOwotICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQotICAgICAgICByZXR1
cm4gMC4wZjsKLSAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsKLX0KLQotZG91
YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKCkKLXsKLSAgICBHVmFsdWUgdmFs
dWUgPSB7IDAsIHsgeyAwIH0gfSB9OwotCi0gICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1fdmFs
dWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERT
X0ZMT0FUKCZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiAwLjBmOwotICAgIHJldHVybiBnX3ZhbHVl
X2dldF9mbG9hdCgmdmFsdWUpOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bWF4VmFsdWUoKQotewotICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07Ci0KLSAg
ICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gMC4wZjsKLQot
ICAgIGF0a192YWx1ZV9nZXRfbWF4aW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZh
bHVlKTsKLSAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKLSAgICAgICAgcmV0
dXJuIDAuMGY7Ci0gICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci19Ci0KLUpT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4g
QVRLLgotICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dp
P2lkPTY4NDU3NgotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OwotfQotCi1zdGF0aWMgYm9vbCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBl
bGVtZW50LCBBdGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQotewotICAgIGlmICghQVRLX0lTX09CSkVD
VChlbGVtZW50KSkKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3Rh
dGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtf
T0JKRUNUKGVsZW1lbnQpKSk7Ci0gICAgcmV0dXJuIGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3Rh
dGUoc3RhdGVTZXQuZ2V0KCksIHN0YXRlVHlwZSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9l
bGVtZW50LCBBVEtfU1RBVEVfRU5BQkxFRCk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1By
ZXNzQWN0aW9uU3VwcG9ydGVkKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5jcmVtZW50
QWN0aW9uU3VwcG9ydGVkKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0
aW9uU3VwcG9ydGVkKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKLXsKLSAgICBpZiAo
IUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
R1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZf
c3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOwotICAgIGdib29sZWFuIGlzRm9jdXNl
ZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFU
RV9GT0NVU0VEKTsKLQotICAgIHJldHVybiBpc0ZvY3VzZWQ7Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxl
bWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKLX0KLQotaW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
IAotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkg
Y29uc3QKLXsgICAKLSAgICByZXR1cm4gMDsgCi19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNFeHBhbmRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxl
bWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+
IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNU
KG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVhbiBpc0V4cGFuZGVkID0gYXRrX3N0YXRlX3NldF9j
b250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0VYUEFOREVEKTsKLQotICAg
IHJldHVybiBpc0V4cGFuZGVkOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Q2hlY2tlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0
ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVu
dCkpKTsKLSAgICBnYm9vbGVhbiBpc0NoZWNrZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0
YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfQ0hFQ0tFRCk7Ci0KLSAgICByZXR1cm4gaXND
aGVja2VkOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZDb2x1bW5IZWFkZXJzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mQ29sdW1ucygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZlZpc2libGVDZWxscygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgSlNTdHJp
bmdSZWYgaW5kZXhSYW5nZUluVGFibGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgYm9vbCBp
c1Jvd1JhbmdlKQotewotICAgIEdPd25QdHI8Z2NoYXI+IHJhbmdlU3RyaW5nKGdfc3RyZHVwKCJ7
MCwgMH0iKSk7Ci0KLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICBBU1NFUlQoQVRL
X0lTX09CSkVDVChlbGVtZW50KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2Jq
ZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50KSk7Ci0gICAgaWYgKCFheFRhYmxlIHx8
ICFBVEtfSVNfVEFCTEUoYXhUYWJsZSkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUg
Y2VsbCBpbiB0aGUgdGFibGUuCi0gICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVjdF9n
ZXRfaW5kZXhfaW5fcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOwotICAgIGlmIChpbmRleElu
UGFyZW50ID09IC0xKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwotCi0gICAgaW50IHJvdyA9IC0xOwotICAgIGludCBjb2x1
bW4gPSAtMTsKLSAgICByb3cgPSBhdGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFCTEUo
YXhUYWJsZSksIGluZGV4SW5QYXJlbnQpOwotICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRfY29s
dW1uX2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0KLSAgICAv
LyBHZXQgdGhlIGFjdHVhbCB2YWx1ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQgdmFs
dWVzLgotICAgIGlmIChyb3cgIT0gLTEgJiYgY29sdW1uICE9IC0xKSB7Ci0gICAgICAgIGludCBi
YXNlID0gMDsKLSAgICAgICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgICAgIGlmIChpc1Jvd1Jhbmdl
KSB7Ci0gICAgICAgICAgICBiYXNlID0gcm93OwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3Rh
YmxlX2dldF9yb3dfZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFzZSA9IGNvbHVtbjsKLSAgICAgICAgICAg
IGxlbmd0aCA9IGF0a190YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJs
ZSksIHJvdywgY29sdW1uKTsKLSAgICAgICAgfQotICAgICAgICByYW5nZVN0cmluZy5zZXQoZ19z
dHJkdXBfcHJpbnRmKCJ7JWQsICVkfSIsIGJhc2UsIGxlbmd0aCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQot
ewotICAgIC8vIFJhbmdlIGluIHRhYmxlIGZvciByb3dzLgotICAgIHJldHVybiBpbmRleFJhbmdl
SW5UYWJsZShtX2VsZW1lbnQsIHRydWUpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKCkKLXsKLSAgICAvLyBSYW5nZSBpbiB0YWJsZSBm
b3IgY29sdW1ucy4KLSAgICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCBmYWxz
ZSk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50KQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25l
ZCkgCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfSAKLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlZFN0cmluZ1JhbmdlSXNNaXNzcGVsbGVkKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1l
bnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogc3RhcnRFbGVtZW50
LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNTdHJpbmdSZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1Jl
ZiBzZWFyY2hUZXh0KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsK
LX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxs
Rm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQotewotICAgIGlm
ICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfVEFC
TEUobV9lbGVtZW50KSk7Ci0KLSAgICBBdGtPYmplY3QqIGZvdW5kQ2VsbCA9IGF0a190YWJsZV9y
ZWZfYXQoQVRLX1RBQkxFKG1fZWxlbWVudCksIHJvdywgY29sdW1uKTsKLSAgICByZXR1cm4gZm91
bmRDZWxsID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChmb3VuZENlbGwpIDogMDsKLX0KLQotSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxl
Y3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAg
IGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLQotICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0
ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0gICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKLQotICAgIGZvciAoR1NMaXN0KiBhdGtBdHRyaWJ1dGVzID0gYXRrX29iamVjdF9nZXRfYXR0
cmlidXRlcyhBVEtfT0JKRUNUKG1fZWxlbWVudCkpOyBhdGtBdHRyaWJ1dGVzOyBhdGtBdHRyaWJ1
dGVzID0gYXRrQXR0cmlidXRlcy0+bmV4dCkgewotICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0
dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0a0F0dHJpYnV0ZXMtPmRhdGEp
OwotICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGF0a0F0dHJpYnV0ZU5h
bWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoYXRrQXR0cmlidXRlLT52YWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwLjBmOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBh
dHRyaWJ1dGUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRl
U3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXN0YXRpYyB2b2lkIGFsdGVyQ3VycmVudFZhbHVlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1l
bnQsIGludCBmYWN0b3IpCi17Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoQVRLX0lTX1ZBTFVFKGVsZW1lbnQpKTsKLQotICAgIEdWYWx1ZSBjdXJyZW50
VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFU
S19WQUxVRShlbGVtZW50KSwgJmN1cnJlbnRWYWx1ZSk7Ci0KLSAgICBHVmFsdWUgaW5jcmVtZW50
ID0gR19WQUxVRV9JTklUOwotICAgIGF0a192YWx1ZV9nZXRfbWluaW11bV9pbmNyZW1lbnQoQVRL
X1ZBTFVFKGVsZW1lbnQpLCAmaW5jcmVtZW50KTsKLQotICAgIEdWYWx1ZSBuZXdWYWx1ZSA9IEdf
VkFMVUVfSU5JVDsKLSAgICBnX3ZhbHVlX2luaXQoJm5ld1ZhbHVlLCBHX1RZUEVfRkxPQVQpOwot
Ci0gICAgZ192YWx1ZV9zZXRfZmxvYXQoJm5ld1ZhbHVlLCBnX3ZhbHVlX2dldF9mbG9hdCgmY3Vy
cmVudFZhbHVlKSArIGZhY3RvciAqIGdfdmFsdWVfZ2V0X2Zsb2F0KCZpbmNyZW1lbnQpKTsKLSAg
ICBhdGtfdmFsdWVfc2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmbmV3VmFs
dWUpOwotCi0gICAgZ192YWx1ZV91bnNldCgmbmV3VmFsdWUpOwotICAgIGdfdmFsdWVfdW5zZXQo
JmluY3JlbWVudCk7Ci0gICAgZ192YWx1ZV91bnNldCgmY3VycmVudFZhbHVlKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQoKQotewotICAgIGFsdGVyQ3VycmVu
dFZhbHVlKG1fZWxlbWVudCwgMSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZGVjcmVtZW50KCkKLXsKLSAgICBhbHRlckN1cnJlbnRWYWx1ZShtX2VsZW1lbnQsIC0xKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcygpCi17Ci0gICAgaWYgKCFtX2Vs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxl
bWVudCkpOwotCi0gICAgaWYgKCFBVEtfSVNfQUNUSU9OKG1fZWxlbWVudCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIE9ubHkgb25lIGFjdGlvbiBwZXIgb2JqZWN0IGlzIHN1cHBvcnRlZCBz
byBmYXIuCi0gICAgYXRrX2FjdGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihtX2VsZW1lbnQpLCAw
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSgpCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VsZWN0ZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwot
fQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0F0
SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQotewot
ICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
Y2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCi17Ci0gICAg
QXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkp
OwotICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQotICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1
ZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSwgIkVuY29kaW5nIikpOwotfQotCi1KU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCi17Ci0gICAgQXRrUm9sZSBy
b2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIGlm
IChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQotICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9D
VU1FTlQobV9lbGVtZW50KSwgIlVSSSIpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dXJsKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rp
b25DYWxsYmFjaykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAotewotICAgIGlmICghQVRLX0lTX09C
SkVDVChtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0
a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQo
QVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Ci0gICAgZ2Jvb2xlYW4gaXNGb2N1c2FibGUgPSBhdGtf
c3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNB
QkxFKTsKLQotICAgIHJldHVybiBpc0ZvY3VzYWJsZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBjaGVja0VsZW1l
bnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9TRUxFQ1RBQkxFKTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX01VTFRJU0VMRUNUQUJM
RSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFj
dGl2ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNJZ25vcmVkKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rp
b24oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
Y3JvbGxUb01ha2VWaXNpYmxlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1
cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9i
YWxQb2ludChpbnQgeCwgaW50IHkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184755</attachid>
            <date>2013-01-25 08:21:16 -0800</date>
            <delta_ts>2013-01-30 01:21:39 -0800</delta_ts>
            <desc>[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</desc>
            <filename>a11y-share-rest-a11y.patch</filename>
            <type>text/plain</type>
            <size>71842</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2OThk
MmZkLi4yZTBkMjgzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC01LDYgKzUsMTUyIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCiAKKyAgICAgICAgU2hhcmVzIHNwZWNpZmljIEFUSydzIGFjY2Vzc2liaWxpdHkgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIEtlZXBzIHBsYXRmb3JtIHNwZWNpZmljIG1ldGhvZHMgaW4g
R1RLJ3MgZGlyZWN0b3J5LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyQXRrLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcC4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nRm9jdXNFdmVudHMpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnNldExvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dWYWx1ZUNoYW5nZUV2ZW50cyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxp
c3RlbmVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudEF0ay5jcHA6IENvcGllZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50R3RrLmNwcC4KKyAgICAgICAgKGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJp
YnV0ZSk6CisgICAgICAgIChyb2xlVG9TdHJpbmcpOgorICAgICAgICAocmVwbGFjZUNoYXJhY3Rl
cnNGb3JSZXN1bHRzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0
TGlua2VkVUlFbGVtZW50cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRE
b2N1bWVudExpbmtzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxk
cmVuKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJh
bmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50KToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpnZXRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5kZXhPZkNoaWxkKToKKyAgICAgICAgKGF0dHJpYnV0ZVNldFRvU3RyaW5nKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cyk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c3Vicm9sZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
b2xlRGVzY3JpcHRpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24pOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6eCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlj
a1BvaW50WCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbik6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjptaW5WYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjptYXhWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKGNoZWNrRWxlbWVudFN0YXRlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNQcmVzc0FjdGlvblN1cHBvcnRlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0luY3JlbWVudEFjdGlvblN1cHBvcnRlZCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZCk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzRm9jdXNlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NlbGVjdGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNo
aWNhbExldmVsKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFJc0dyYWJi
ZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcik6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGUpOgorICAgICAgICAoaW5kZXhSYW5nZUluVGFi
bGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleCk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ1JhbmdlSXNNaXNzcGVsbGVkKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0ZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0dHJpYnV0ZVZhbHVlKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKToKKyAgICAgICAg
KGFsdGVyQ3VycmVudFZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
Y3JlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZWNyZW1lbnQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2hvd01lbnUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZGlzY2xvc2VkUm93QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cm93QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
aXNjbG9zZWRCeVJvdyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3Np
YmlsaXR5VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRF
bmNvZGluZyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNWaXNpYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
T2ZmU2NyZWVuKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2Vk
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGFrZVNlbGVjdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRT
ZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0
aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2li
bGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJs
ZVdpdGhTdWJGb2N1cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxU
b0dsb2JhbFBvaW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxl
bWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1l
bnRCeUlkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudEd0ay5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCk6
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKKzIwMTMtMDEtMjUgIEtyenlzenRvZiBDemVj
aCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS11bRUZMXSBTaGFyZXMgV2Vi
S2l0LUdUSydzIER1bXBSZW5kZXJUcmVlIGFjY2Vzc2liaWxpdHkgaW1wbGVtZW50YXRpb24gd2l0
aCBvdGhlciBXZWJraXQgcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNTAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNoYXJlcyBzcGVjaWZpYyBBVEsncyBhY2Nlc3NpYmlsaXR5IGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBJc29sYXRlcyBHVEsncyBEdW1wUmVuZGVyVHJlZSBjb2RlLiBBZGRz
IGNvbmRpdGlvbmFsCisgICAgICAgIGNvbXBpbGF0aW9uIGNoZWNrcyBmb3IgR1RLIGFuZCBFRkwu
CisKICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5o
OiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxs
YmFja3MuaC4KICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxi
YWNrc0F0ay5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNz
aWJpbGl0eUNhbGxiYWNrcy5jcHAuCiAgICAgICAgIChwcmludEFjY2Vzc2liaWxpdHlFdmVudCk6
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJBdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyQXRrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEwMzE5
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyQXRrLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCisKKyNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisKKyNpbmNsdWRlIDxh
dGsvYXRrLmg+CisKK3N0YXRpYyBib29sIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFs
c2U7CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigp
Cit7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorICAgIHJldHVybiAwOworfQorCisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnNldExvZ0ZvY3VzRXZlbnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnNldExvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1ZhbHVlQ2hhbmdlRXZlbnRzKGJvb2wpCit7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVu
dHMoYm9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKQoreworICAgIGlmIChsb2dBY2Nlc3NpYmls
aXR5RXZlbnRzID09IGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIWxvZ0FjY2Vzc2liaWxpdHlFdmVudHMpIHsKKyAgICAgICAgZGlzY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKKyAgICAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlF
dmVudHMgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbm5lY3RBY2Nl
c3NpYmlsaXR5Q2FsbGJhY2tzKCk7CisgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0
cnVlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25M
aXN0ZW5lcihKU09iamVjdFJlZikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEF0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
M2U3YzBlYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtMCwwICsxLDEwNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuaCIKKworI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8YXRrL2F0ay5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworc3RhdGljIFN0cmluZyBjb3JlQXR0cmli
dXRlVG9BdGtBdHRyaWJ1dGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIHNpemVfdCBi
dWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGF0dHJpYnV0ZSk7
CisgICAgR093blB0cjxnY2hhcj4gYnVmZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2Mo
YnVmZmVyU2l6ZSkpKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGF0dHJpYnV0ZSwgYnVm
ZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKworICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7CisgICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9
PSAiQVhQbGFjZWhvbGRlclZhbHVlIikKKyAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0
IjsKKworICAgIHJldHVybiAiIjsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgcm9sZVRvU3Ry
aW5nKEF0a1JvbGUgcm9sZSkKK3sKKyAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICBjYXNlIEFUS19S
T0xFX0FMRVJUOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhBbGVydCI7CisgICAgY2FzZSBB
VEtfUk9MRV9DQU5WQVM6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENhbnZhcyI7CisgICAg
Y2FzZSBBVEtfUk9MRV9DSEVDS19CT1g6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENoZWNr
Qm94IjsKKyAgICBjYXNlIEFUS19ST0xFX0NPTFVNTl9IRUFERVI6CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWENvbHVtbkhlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9DT01CT19CT1g6Cisg
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbWJvQm94IjsKKyAgICBjYXNlIEFUS19ST0xFX0RP
Q1VNRU5UX0ZSQU1FOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhXZWJBcmVhIjsKKyAgICBj
YXNlIEFUS19ST0xFX0VOVFJZOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUZXh0RmllbGQi
OworICAgIGNhc2UgQVRLX1JPTEVfRk9PVEVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhG
b290ZXIiOworICAgIGNhc2UgQVRLX1JPTEVfRk9STToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYRm9ybSI7CisgICAgY2FzZSBBVEtfUk9MRV9HUk9VUElORzoKKyAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYR3JvdXAiOworICAgIGNhc2UgQVRLX1JPTEVfSEVBRElORzoKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYSGVhZGluZyI7CisgICAgY2FzZSBBVEtfUk9MRV9JTUFHRToKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYSW1hZ2UiOworICAgIGNhc2UgQVRLX1JPTEVfSU1BR0VfTUFQ
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhJbWFnZU1hcCI7CisgICAgY2FzZSBBVEtfUk9M
RV9MQUJFTDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGFiZWwiOworICAgIGNhc2UgQVRL
X1JPTEVfTElOSzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGluayI7CisgICAgY2FzZSBB
VEtfUk9MRV9MSVNUOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0IjsKKyAgICBjYXNl
IEFUS19ST0xFX0xJU1RfQk9YOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0Qm94IjsK
KyAgICBjYXNlIEFUS19ST0xFX0xJU1RfSVRFTToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
TGlzdEl0ZW0iOworICAgIGNhc2UgQVRLX1JPTEVfTUVOVToKKyAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYTWVudSI7CisgICAgY2FzZSBBVEtfUk9MRV9NRU5VX0JBUjoKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYTWVudUJhciI7CisgICAgY2FzZSBBVEtfUk9MRV9NRU5VX0lURU06CisgICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnVJdGVtIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBR0Vf
VEFCOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUYWIiOworICAgIGNhc2UgQVRLX1JPTEVf
UEFHRV9UQUJfTElTVDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFiR3JvdXAiOworICAg
IGNhc2UgQVRLX1JPTEVfUEFORUw6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsK
KyAgICBjYXNlIEFUS19ST0xFX1BBUkFHUkFQSDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
UGFyYWdyYXBoIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBU1NXT1JEX1RFWFQ6CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFBhc3N3b3JkRmllbGQiOworICAgIGNhc2UgQVRLX1JPTEVfUFVTSF9C
VVRUT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEJ1dHRvbiI7CisgICAgY2FzZSBBVEtf
Uk9MRV9SQURJT19CVVRUT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJhZGlvQnV0dG9u
IjsKKyAgICBjYXNlIEFUS19ST0xFX1JPV19IRUFERVI6CisgICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWFJvd0hlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9SVUxFUjoKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYUnVsZXIiOworICAgIGNhc2UgQVRLX1JPTEVfU0NST0xMX0JBUjoKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYU2Nyb2xsQmFyIjsKKyAgICBjYXNlIEFUS19ST0xFX1NDUk9M
TF9QQU5FOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTY3JvbGxBcmVhIjsKKyAgICBjYXNl
IEFUS19ST0xFX1NFQ1RJT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWERpdiI7CisgICAg
Y2FzZSBBVEtfUk9MRV9TRVBBUkFUT1I6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhvcml6
b250YWxSdWxlIjsKKyAgICBjYXNlIEFUS19ST0xFX1NMSURFUjoKKyAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYU2xpZGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX1NQSU5fQlVUVE9OOgorICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhTcGluQnV0dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1RBQkxF
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUYWJsZSI7CisgICAgY2FzZSBBVEtfUk9MRV9U
QUJMRV9DRUxMOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDZWxsIjsKKyAgICBjYXNlIEFU
S19ST0xFX1RBQkxFX0NPTFVNTl9IRUFERVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENv
bHVtbkhlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9ST1c6CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWFJvdyI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9ST1dfSEVBREVSOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3dIZWFkZXIiOworICAgIGNhc2UgQVRLX1JPTEVf
VE9HR0xFX0JVVFRPTjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVG9nZ2xlQnV0dG9uIjsK
KyAgICBjYXNlIEFUS19ST0xFX1RPT0xfQkFSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhU
b29sYmFyIjsKKyAgICBjYXNlIEFUS19ST0xFX1RPT0xfVElQOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhVc2VySW50ZXJmYWNlVG9vbHRpcCI7CisgICAgY2FzZSBBVEtfUk9MRV9UUkVFOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlIjsKKyAgICBjYXNlIEFUS19ST0xFX1RSRUVf
VEFCTEU6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRyZWVHcmlkIjsKKyAgICBjYXNlIEFU
S19ST0xFX1RSRUVfSVRFTToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZUl0ZW0iOwor
ICAgIGNhc2UgQVRLX1JPTEVfV0lORE9XOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhXaW5k
b3ciOworICAgIGNhc2UgQVRLX1JPTEVfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYVW5rbm93biI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkaXN0aW5n
dWlzaCBBVEtfUk9MRV9VTktOT1dOIGZyb20gYSBrbm93biBBdGtSb2xlIHdoaWNoCisgICAgICAg
IC8vIG91ciBEUlQgaXNuJ3QgcHJvcGVybHkgaGFuZGxpbmcuCisgICAgICAgIHJldHVybiAiQVhS
b2xlOiBGSVhNRSBub3QgaWRlbnRpZmllZCI7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGdj
aGFyKiByZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3VsdHMoZ2NoYXIqIHN0cikKK3sKKyAgICBTdHJp
bmcgdVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoc3RyKTsKKworICAgIC8vIFRoZSBvYmplY3Qg
cmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIHBhc3NlZCBhbG9uZyB0byBBVHMgc28gd2UgbmVlZCB0
byBiZQorICAgIC8vIGFibGUgdG8gdGVzdCBmb3IgdGhlaXIgcHJlc2VuY2UgYW5kIGRvIHNvIHdp
dGhvdXQgY2F1c2luZyB0ZXN0IGZhaWx1cmVzLgorICAgIHVTdHJpbmcucmVwbGFjZShvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciwgIjxvYmo+Iik7CisKKyAgICAvLyBUaGUgcHJlc2VuY2Ugb2Yg
bmV3bGluZSBjaGFyYWN0ZXJzIGluIGFjY2Vzc2libGUgdGV4dCBvZiBhIHNpbmdsZSBvYmplY3QK
KyAgICAvLyBpcyBhcHByb3ByaWF0ZSwgYnV0IGl0IG1ha2VzIHRlc3QgcmVzdWx0cyAoZXNwZWNp
YWxseSB0aGUgYWNjZXNzaWJsZSB0cmVlKQorICAgIC8vIGhhcmRlciB0byByZWFkLgorICAgIHVT
dHJpbmcucmVwbGFjZSgiXG4iLCAiPFxcbj4iKTsKKworICAgIHJldHVybiBnX3N0cmR1cCh1U3Ry
aW5nLnV0ZjgoKS5kYXRhKCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCisgICAgOiBtX2VsZW1l
bnQoZWxlbWVudCkKK3sKKyAgICBpZiAobV9lbGVtZW50KQorICAgICAgICBnX29iamVjdF9yZWYo
bV9lbGVtZW50KTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudChjb25zdCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50JiBvdGhlcikKKyAgICA6IG1fZWxl
bWVudChvdGhlci5tX2VsZW1lbnQpCit7CisgICAgaWYgKG1fZWxlbWVudCkKKyAgICAgICAgZ19v
YmplY3RfcmVmKG1fZWxlbWVudCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KCkKK3sKKyAgICBpZiAobV9lbGVtZW50KQorICAgICAgICBnX29i
amVjdF91bnJlZihtX2VsZW1lbnQpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldExpbmtlZFVJRWxlbWVudHMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVt
ZW50cykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5rcyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4mKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpnZXRDaGlsZHJlbihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNo
aWxkcmVuKQoreworICAgIGludCBjb3VudCA9IGNoaWxkcmVuQ291bnQoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsK
KyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRo
UmFuZ2UoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50VmVjdG9yLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0
OyBpIDwgZW5kOyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsKKyAgICAgICAg
ZWxlbWVudFZlY3Rvci5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOworICAg
IH0KK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50KCkKK3sKKyAgICBp
ZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX1RB
QkxFKG1fZWxlbWVudCkpOworCisgICAgcmV0dXJuIGF0a190YWJsZV9nZXRfbl9yb3dzKEFUS19U
QUJMRShtX2VsZW1lbnQpKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVt
bkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOworCisgICAgcmV0dXJuIGF0a190YWJs
ZV9nZXRfbl9jb2x1bW5zKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKK30KKworaW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQoKQoreworICAgIGlmICghbV9lbGVtZW50KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkp
OworCisgICAgcmV0dXJuIGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihBVEtf
T0JKRUNUKG1fZWxlbWVudCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICBpZiAo
IW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudChhdGtfY29tcG9uZW50X3JlZl9hY2Nlc3NpYmxlX2F0X3BvaW50KEFUS19DT01Q
T05FTlQobV9lbGVtZW50KSwgeCwgeSwgQVRLX1hZX1dJTkRPVykpOworfQorCitBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5k
ZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldENoaWxkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gY2hpbGRyZW47CisgICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRy
ZW4sIGluZGV4LCBpbmRleCArIDEpOworCisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQor
ICAgICAgICByZXR1cm4gY2hpbGRyZW4uYXQoMCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordW5z
aWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIGVsZW1lbnQpCit7IAorICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1
cm4gMDsKK30KKworZ2NoYXIqIGF0dHJpYnV0ZVNldFRvU3RyaW5nKEF0a0F0dHJpYnV0ZVNldCog
YXR0cmlidXRlU2V0KQoreworICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKKyAg
ICBmb3IgKEdTTGlzdCogYXR0cmlidXRlcyA9IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0
cmlidXRlcyA9IGF0dHJpYnV0ZXMtPm5leHQpIHsKKyAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRy
aWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKKyAg
ICAgICAgR093blB0cjxnY2hhcj4gYXR0cmlidXRlRGF0YShnX3N0cmNvbmNhdChhdHRyaWJ1dGUt
Pm5hbWUsICI6IiwgYXR0cmlidXRlLT52YWx1ZSwgTlVMTCkpOworICAgICAgICBnX3N0cmluZ19h
cHBlbmQoc3RyLCBhdHRyaWJ1dGVEYXRhLmdldCgpKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMt
Pm5leHQpCisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiLCAiKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCit7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCisgICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgR093blB0cjxn
Y2hhcj4gYXR0cmlidXRlRGF0YShhdHRyaWJ1dGVTZXRUb1N0cmluZyhhdGtfb2JqZWN0X2dldF9h
dHRyaWJ1dGVzKEFUS19PQkpFQ1QobV9lbGVtZW50KSkpKTsKKyAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmlidXRlRGF0YS5nZXQoKSk7Cit9CisKK0pTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQor
CitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlF
bGVtZW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBBdGtSZWxhdGlvblNldCogc2V0ID0gYXRrX29iamVjdF9yZWZfcmVsYXRpb25fc2V0KEFUS19P
QkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYgKCFzZXQpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgQXRrT2JqZWN0KiB0YXJnZXQgPSAwOworICAgIGludCBjb3VudCA9IGF0a19yZWxhdGlvbl9z
ZXRfZ2V0X25fcmVsYXRpb25zKHNldCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7CisgICAgICAgIEF0a1JlbGF0aW9uKiByZWxhdGlvbiA9IGF0a19yZWxhdGlvbl9zZXRf
Z2V0X3JlbGF0aW9uKHNldCwgaSk7CisgICAgICAgIGlmIChhdGtfcmVsYXRpb25fZ2V0X3JlbGF0
aW9uX3R5cGUocmVsYXRpb24pID09IEFUS19SRUxBVElPTl9MQUJFTExFRF9CWSkgeworICAgICAg
ICAgICAgR1B0ckFycmF5KiB0YXJnZXRMaXN0ID0gYXRrX3JlbGF0aW9uX2dldF90YXJnZXQocmVs
YXRpb24pOworICAgICAgICAgICAgaWYgKHRhcmdldExpc3QtPmxlbikKKyAgICAgICAgICAgICAg
ICB0YXJnZXQgPSBzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihnX3B0cl9hcnJheV9pbmRleCh0YXJn
ZXRMaXN0LCAwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX29iamVjdF91bnJlZihzZXQp
OworICAgIHJldHVybiB0YXJnZXQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHRhcmdldCkgOiAw
OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBh
cmVudEVsZW1lbnQoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgQXRrT2JqZWN0
KiBwYXJlbnQgPSAgYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7
CisgICAgcmV0dXJuIHBhcmVudCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7
Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNo
aWxkcmVuKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKK3sK
KyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSk7CisgICAgaWYgKCFyb2xlKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZyByb2xlU3RyaW5nID0gcm9sZVRvU3RyaW5n
KHJvbGUpOworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyb2xlU3Ry
aW5nLnV0ZjgoKS5kYXRhKCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdWJyb2xlKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkKK3sKKyAgICByZXR1cm4gMDsKK30K
KworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQoreworICAgIGNv
bnN0IGdjaGFyKiBuYW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVu
dCkpOworICAgIEdPd25QdHI8Z2NoYXI+IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRpdGxl
OiAlcyIsIG5hbWUgPyBuYW1lIDogIiIpKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhheFRpdGxlLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQoreworICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlw
dGlvbiA9IGF0a19vYmplY3RfZ2V0X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7
CisKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIEdPd25QdHI8Z2NoYXI+IGF4RGVzYyhnX3N0cmR1
cF9wcmludGYoIkFYRGVzY3JpcHRpb246ICVzIiwgZGVzY3JpcHRpb24pKTsKKworICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheERlc2MuZ2V0KCkpOworfQorCitKU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCit7CisgICAgaWYg
KCFtX2VsZW1lbnQgfHwgIUFUS19JU19URVhUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgZ2NoYXIqIHRleHQgPSBh
dGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChtX2VsZW1lbnQpLCAwLCAtMSk7CisgICAgR093blB0
cjxnY2hhcj4gYXhWYWx1ZShnX3N0cmR1cF9wcmludGYoIkFYVmFsdWU6ICVzIiwgcmVwbGFjZUNo
YXJhY3RlcnNGb3JSZXN1bHRzKHRleHQpKSk7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4VmFsdWUuZ2V0KCkpOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCit7CisgICAgaWYg
KCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworCisgICAgLy8gSW4gQVRLLCB0aGUgZG9jdW1lbnQgbGFuZ3VhZ2UgaXMgZXhwb3Nl
ZCBhcyB0aGUgZG9jdW1lbnQncyBsb2NhbGUuCisgICAgaWYgKGF0a19vYmplY3RfZ2V0X3JvbGUo
QVRLX09CSkVDVChtX2VsZW1lbnQpKSA9PSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKKyAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGdfc3RyZHVwX3ByaW50Zigi
QVhMYW5ndWFnZTogJXMiLCBhdGtfZG9jdW1lbnRfZ2V0X2xvY2FsZShBVEtfRE9DVU1FTlQobV9l
bGVtZW50KSkpKTsKKworICAgIC8vIEZvciBhbGwgb3RoZXIgb2JqZWN0cywgdGhlIGxhbmd1YWdl
IGlzIGV4cG9zZWQgYXMgYW4gQXRrVGV4dCBhdHRyaWJ1dGUuCisgICAgaWYgKCFBVEtfSVNfVEVY
VChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKKworICAgIGZvciAoR1NMaXN0KiB0ZXh0QXR0cmlidXRlcyA9IGF0a190ZXh0X2dl
dF9kZWZhdWx0X2F0dHJpYnV0ZXMoQVRLX1RFWFQobV9lbGVtZW50KSk7IHRleHRBdHRyaWJ1dGVz
OyB0ZXh0QXR0cmlidXRlcyA9IHRleHRBdHRyaWJ1dGVzLT5uZXh0KSB7CisgICAgICAgIEF0a0F0
dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4odGV4dEF0
dHJpYnV0ZXMtPmRhdGEpOworICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0xBTkdVQUdFKSkpCisg
ICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ19zdHJkdXBf
cHJpbnRmKCJBWExhbmd1YWdlOiAlcyIsIGF0a0F0dHJpYnV0ZS0+dmFsdWUpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworZG91
YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngoKQoreworICAgIGludCB4LCB5OworCisgICAg
YXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwg
JnksIEFUS19YWV9TQ1JFRU4pOworCisgICAgcmV0dXJuIHg7Cit9CisKK2RvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp5KCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAgIGF0a19jb21wb25l
bnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlf
U0NSRUVOKTsKKworICAgIHJldHVybiB5OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6d2lkdGgoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0OworCisgICAgYXRrX2NvbXBv
bmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7
CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoZWlnaHQoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0OworCisgICAgYXRrX2NvbXBvbmVu
dF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7CisK
KyAgICByZXR1cm4gaGVpZ2h0OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2xpY2tQb2ludFgoKQoreworICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBo
YXZlIGluIEFUSy4KKyAgICByZXR1cm4gMC5mOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y2xpY2tQb2ludFkoKQoreworICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0
aGluZyB3ZSBoYXZlIGluIEFUSy4KKyAgICByZXR1cm4gMC5mOworfQorCitKU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDA7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0
Cit7CisgICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKKworICAgIGlmICghQVRL
X0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3Zh
bHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworICAg
IGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQorICAgICAgICByZXR1cm4gMC4wZjsK
KyAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsKK30KKworZG91YmxlIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKCkKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAs
IHsgeyAwIH0gfSB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1fdmFsdWUoQVRLX1ZB
TFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisgICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2
YWx1ZSkpCisgICAgICAgIHJldHVybiAwLjBmOworICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9h
dCgmdmFsdWUpOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUo
KQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07CisKKyAgICBpZiAoIUFU
S19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0a192
YWx1ZV9nZXRfbWF4aW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKKyAg
ICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4gQVRLLgorICAg
IC8vIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDU3
NgorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitz
dGF0aWMgYm9vbCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBB
dGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQoreworICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50
KSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0
YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKGVs
ZW1lbnQpKSk7CisgICAgcmV0dXJuIGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVT
ZXQuZ2V0KCksIHN0YXRlVHlwZSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBB
VEtfU1RBVEVfRU5BQkxFRCk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNl
cnRpb25Qb2ludExpbmVOdW1iZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gMDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9u
U3VwcG9ydGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5jcmVtZW50QWN0aW9uU3Vw
cG9ydGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9y
dGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIUFUS19JU19P
QkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxB
dGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0
KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIGdib29sZWFuIGlzRm9jdXNlZCA9IGF0a19z
dGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0VE
KTsKKworICAgIHJldHVybiBpc0ZvY3VzZWQ7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRl
KG1fZWxlbWVudCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXJpYUlzR3JhYmJlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorIAorSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKK3sg
ICAKKyAgICByZXR1cm4gMDsgCit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNF
eHBhbmRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0
ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVu
dCkpKTsKKyAgICBnYm9vbGVhbiBpc0V4cGFuZGVkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19z
dGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0VYUEFOREVEKTsKKworICAgIHJldHVybiBp
c0V4cGFuZGVkOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgp
IGNvbnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRH
UmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAg
ICBnYm9vbGVhbiBpc0NoZWNrZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRl
U2V0LmdldCgpLCBBVEtfU1RBVEVfQ0hFQ0tFRCk7CisKKyAgICByZXR1cm4gaXNDaGVja2VkOwor
fQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1
bW5IZWFkZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
Q29sdW1ucygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVD
ZWxscygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwor
aW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgSlNTdHJpbmdSZWYgaW5k
ZXhSYW5nZUluVGFibGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgYm9vbCBpc1Jvd1Jhbmdl
KQoreworICAgIEdPd25QdHI8Z2NoYXI+IHJhbmdlU3RyaW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7
CisKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVD
VChlbGVtZW50KSk7CisKKyAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9w
YXJlbnQoQVRLX09CSkVDVChlbGVtZW50KSk7CisgICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNf
VEFCTEUoYXhUYWJsZSkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0
aGUgdGFibGUuCisgICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhf
aW5fcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOworICAgIGlmIChpbmRleEluUGFyZW50ID09
IC0xKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VT
dHJpbmcuZ2V0KCkpOworCisgICAgaW50IHJvdyA9IC0xOworICAgIGludCBjb2x1bW4gPSAtMTsK
KyAgICByb3cgPSBhdGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSks
IGluZGV4SW5QYXJlbnQpOworICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2lu
ZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisKKyAgICAvLyBHZXQgdGhl
IGFjdHVhbCB2YWx1ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQgdmFsdWVzLgorICAg
IGlmIChyb3cgIT0gLTEgJiYgY29sdW1uICE9IC0xKSB7CisgICAgICAgIGludCBiYXNlID0gMDsK
KyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChpc1Jvd1JhbmdlKSB7CisgICAg
ICAgICAgICBiYXNlID0gcm93OworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9y
b3dfZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYmFzZSA9IGNvbHVtbjsKKyAgICAgICAgICAgIGxlbmd0aCA9
IGF0a190YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywg
Y29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICByYW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJp
bnRmKCJ7JWQsICVkfSIsIGJhc2UsIGxlbmd0aCkpOworICAgIH0KKworICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Cit9CisKK0pTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQoreworICAgIC8v
IFJhbmdlIGluIHRhYmxlIGZvciByb3dzLgorICAgIHJldHVybiBpbmRleFJhbmdlSW5UYWJsZSht
X2VsZW1lbnQsIHRydWUpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpjb2x1bW5JbmRleFJhbmdlKCkKK3sKKyAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3IgY29sdW1u
cy4KKyAgICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCBmYWxzZSk7Cit9CisK
K2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50KQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworfSAKKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmlu
Z1JhbmdlSXNNaXNzcGVsbGVkKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFy
Y2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogc3RhcnRFbGVtZW50LCBib29sIGlz
RGlyZWN0aW9uTmV4dCwgSlNTdHJpbmdSZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hU
ZXh0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1u
QW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQoreworICAgIGlmICghbV9lbGVt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVt
ZW50KSk7CisKKyAgICBBdGtPYmplY3QqIGZvdW5kQ2VsbCA9IGF0a190YWJsZV9yZWZfYXQoQVRL
X1RBQkxFKG1fZWxlbWVudCksIHJvdywgY29sdW1uKTsKKyAgICByZXR1cm4gZm91bmRDZWxsID8g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChmb3VuZENlbGwpIDogMDsKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRS
YW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Ry
aW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIGlmICghbV9l
bGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKKworICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0
cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IGZvciAoR1NMaXN0KiBhdGtBdHRyaWJ1dGVzID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhB
VEtfT0JKRUNUKG1fZWxlbWVudCkpOyBhdGtBdHRyaWJ1dGVzOyBhdGtBdHRyaWJ1dGVzID0gYXRr
QXR0cmlidXRlcy0+bmV4dCkgeworICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9
IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0a0F0dHJpYnV0ZXMtPmRhdGEpOworICAgICAg
ICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGF0a0F0dHJpYnV0ZU5hbWUudXRmOCgp
LmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoYXRrQXR0cmlidXRlLT52YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwLjBmOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUp
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVm
IGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVk
KEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIGFsdGVyQ3VycmVudFZhbHVlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGludCBm
YWN0b3IpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQoQVRLX0lTX1ZBTFVFKGVsZW1lbnQpKTsKKworICAgIEdWYWx1ZSBjdXJyZW50VmFsdWUgPSBH
X1ZBTFVFX0lOSVQ7CisgICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShl
bGVtZW50KSwgJmN1cnJlbnRWYWx1ZSk7CisKKyAgICBHVmFsdWUgaW5jcmVtZW50ID0gR19WQUxV
RV9JTklUOworICAgIGF0a192YWx1ZV9nZXRfbWluaW11bV9pbmNyZW1lbnQoQVRLX1ZBTFVFKGVs
ZW1lbnQpLCAmaW5jcmVtZW50KTsKKworICAgIEdWYWx1ZSBuZXdWYWx1ZSA9IEdfVkFMVUVfSU5J
VDsKKyAgICBnX3ZhbHVlX2luaXQoJm5ld1ZhbHVlLCBHX1RZUEVfRkxPQVQpOworCisgICAgZ192
YWx1ZV9zZXRfZmxvYXQoJm5ld1ZhbHVlLCBnX3ZhbHVlX2dldF9mbG9hdCgmY3VycmVudFZhbHVl
KSArIGZhY3RvciAqIGdfdmFsdWVfZ2V0X2Zsb2F0KCZpbmNyZW1lbnQpKTsKKyAgICBhdGtfdmFs
dWVfc2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmbmV3VmFsdWUpOworCisg
ICAgZ192YWx1ZV91bnNldCgmbmV3VmFsdWUpOworICAgIGdfdmFsdWVfdW5zZXQoJmluY3JlbWVu
dCk7CisgICAgZ192YWx1ZV91bnNldCgmY3VycmVudFZhbHVlKTsKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQoKQoreworICAgIGFsdGVyQ3VycmVudFZhbHVlKG1f
ZWxlbWVudCwgMSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50
KCkKK3sKKyAgICBhbHRlckN1cnJlbnRWYWx1ZShtX2VsZW1lbnQsIC0xKTsKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcygpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwor
CisgICAgaWYgKCFBVEtfSVNfQUNUSU9OKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIE9ubHkgb25lIGFjdGlvbiBwZXIgb2JqZWN0IGlzIHN1cHBvcnRlZCBzbyBmYXIuCisg
ICAgYXRrX2FjdGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihtX2VsZW1lbnQpLCAwKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSgpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJu
IDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXJpYU93bnNFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsK
K30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphcmlh
Rmxvd1RvRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9
CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0
ZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCitBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgodW5z
aWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQoreworICAgIHJldHVy
biAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmls
aXR5VmFsdWUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCit7CisgICAgQXRrUm9sZSBy
b2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlm
IChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9D
VU1FTlQobV9lbGVtZW50KSwgIkVuY29kaW5nIikpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCit7CisgICAgQXRrUm9sZSByb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlmIChyb2xlICE9
IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQobV9l
bGVtZW50KSwgIlVSSSIpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dXJsKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFj
aykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAoreworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEF0a1N0YXRlU2V0
PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVD
VChtX2VsZW1lbnQpKSk7CisgICAgZ2Jvb2xlYW4gaXNGb2N1c2FibGUgPSBhdGtfc3RhdGVfc2V0
X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNBQkxFKTsKKwor
ICAgIHJldHVybiBpc0ZvY3VzYWJsZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NlbGVjdGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZSht
X2VsZW1lbnQsIEFUS19TVEFURV9TRUxFQ1RBQkxFKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoZWNr
RWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX01VTFRJU0VMRUNUQUJMRSk7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDb2xsYXBzZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVk
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphZGRTZWxlY3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01h
a2VWaXNpYmxlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChp
bnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ckd0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJHdGsuY3BwCmluZGV4IDcwZjA4MWEuLjg0OGJhYTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApAQCAtMzcs
NDAgKzM3LDYgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CiAjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgogCi1zdGF0aWMgYm9vbCBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50
cyA9IGZhbHNlOwotCi1BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIoKQotewotfQotCi1BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5KQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQoKQotewotICAgIEF0a09iamVj
dCogYWNjZXNzaWJsZSA9ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldEZvY3VzZWRBY2Nl
c3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwotICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxl
KTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQoKQotewotICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9IER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7Ci0gICAg
aWYgKCFhY2Nlc3NpYmxlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOwotfQotCiBzdGF0aWMgQXRrT2JqZWN0KiBjaGls
ZEVsZW1lbnRCeUlkKEF0a09iamVjdCogcGFyZW50LCBjb25zdCBjaGFyKiBpZCkKIHsKICAgICBp
ZiAoIUFUS19JU19PQkpFQ1QocGFyZW50KSkKQEAgLTk2LDYgKzYyLDI0IEBAIHN0YXRpYyBBdGtP
YmplY3QqIGNoaWxkRWxlbWVudEJ5SWQoQXRrT2JqZWN0KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGlk
KQogICAgIHJldHVybiAwOwogfQogCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCit7CisgICAgQXRrT2JqZWN0KiBhY2Nlc3Np
YmxlID0gIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Rm9jdXNlZEFjY2Vzc2libGVFbGVt
ZW50KG1haW5GcmFtZSk7CisgICAgaWYgKCFhY2Nlc3NpYmxlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOworfQorCitB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVu
dCgpCit7CisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpnZXRSb290QWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKKyAgICBpZiAoIWFjY2Vz
c2libGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoYWNjZXNzaWJsZSk7Cit9CisKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZCkKIHsK
ICAgICBBdGtPYmplY3QqIHJvb3QgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RB
Y2Nlc3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwpAQCAtMTEzLDM5ICs5NywzIEBAIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50
QnlJZChKU1N0cmluZ1JlCiAgICAgcmV0dXJuIDA7CiAKIH0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6c2V0TG9nRm9jdXNFdmVudHMoYm9vbCkKLXsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMoYm9vbCkKLXsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nVmFsdWVDaGFuZ2VFdmVudHMo
Ym9vbCkKLXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nQWNjZXNz
aWJpbGl0eUV2ZW50cyhib29sIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHMpCi17Ci0gICAgaWYgKGxv
Z0FjY2Vzc2liaWxpdHlFdmVudHMgPT0gbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbG9nQWNjZXNzaWJpbGl0eUV2ZW50cykgewotICAgICAg
ICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwotICAgICAgICBsb2dnaW5nQWNj
ZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLSAgICBsb2dnaW5nQWNjZXNzaWJpbGl0
eUV2ZW50cyA9IHRydWU7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXIoKQotewotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRHdGsuY3BwCmluZGV4IDRhYjk5OTUuLjMwZjdiNjQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5j
cHAKQEAgLTM3LDQwOCArMzcsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKLXN0YXRpYyBTdHJpbmcg
Y29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAg
ICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShh
dHRyaWJ1dGUpOwotICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcihzdGF0aWNfY2FzdDxnY2hhcio+
KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhhdHRy
aWJ1dGUsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0KLSAgICBTdHJpbmcgYXR0cmlidXRl
U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIuZ2V0KCkpOwotICAgIGlmIChhdHRyaWJ1
dGVTdHJpbmcgPT0gIkFYUGxhY2Vob2xkZXJWYWx1ZSIpCi0gICAgICAgIHJldHVybiAicGxhY2Vo
b2xkZXItdGV4dCI7Ci0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5n
IHJvbGVUb1N0cmluZyhBdGtSb2xlIHJvbGUpCi17Ci0gICAgc3dpdGNoIChyb2xlKSB7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9BTEVSVDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQWxlcnQiOwot
ICAgIGNhc2UgQVRLX1JPTEVfQ0FOVkFTOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDYW52
YXMiOwotICAgIGNhc2UgQVRLX1JPTEVfQ0hFQ0tfQk9YOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhDaGVja0JveCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DT0xVTU5fSEVBREVSOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhDb2x1bW5IZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfQ09N
Qk9fQk9YOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb21ib0JveCI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9ET0NVTUVOVF9GUkFNRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2ViQXJl
YSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9FTlRSWToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
VGV4dEZpZWxkIjsKLSAgICBjYXNlIEFUS19ST0xFX0ZPT1RFUjoKLSAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYRm9vdGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX0ZPUk06Ci0gICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWEZvcm0iOwotICAgIGNhc2UgQVRLX1JPTEVfR1JPVVBJTkc6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsKLSAgICBjYXNlIEFUS19ST0xFX0hFQURJTkc6Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhlYWRpbmciOwotICAgIGNhc2UgQVRLX1JPTEVfSU1B
R0U6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEltYWdlIjsKLSAgICBjYXNlIEFUS19ST0xF
X0lNQUdFX01BUDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSW1hZ2VNYXAiOwotICAgIGNh
c2UgQVRLX1JPTEVfTEFCRUw6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExhYmVsIjsKLSAg
ICBjYXNlIEFUS19ST0xFX0xJTks6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpbmsiOwot
ICAgIGNhc2UgQVRLX1JPTEVfTElTVDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdCI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9MSVNUX0JPWDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
TGlzdEJveCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MSVNUX0lURU06Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWExpc3RJdGVtIjsKLSAgICBjYXNlIEFUS19ST0xFX01FTlU6Ci0gICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWE1lbnUiOwotICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9CQVI6Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnVCYXIiOwotICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9J
VEVNOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51SXRlbSI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9QQUdFX1RBQjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFiIjsKLSAgICBjYXNl
IEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYkdy
b3VwIjsKLSAgICBjYXNlIEFUS19ST0xFX1BBTkVMOgotICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhHcm91cCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQVJBR1JBUEg6Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWFBhcmFncmFwaCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQVNTV09SRF9URVhUOgot
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXNzd29yZEZpZWxkIjsKLSAgICBjYXNlIEFUS19S
T0xFX1BVU0hfQlVUVE9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhCdXR0b24iOwotICAg
IGNhc2UgQVRLX1JPTEVfUkFESU9fQlVUVE9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhS
YWRpb0J1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9ST1dfSEVBREVSOgotICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhSb3dIZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfUlVMRVI6Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWFJ1bGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9C
QVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNjcm9sbEJhciI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9TQ1JPTExfUEFORToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2Nyb2xsQXJlYSI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9TRUNUSU9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhE
aXYiOwotICAgIGNhc2UgQVRLX1JPTEVfU0VQQVJBVE9SOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhIb3Jpem9udGFsUnVsZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TTElERVI6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFNsaWRlciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TUElOX0JVVFRP
TjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU3BpbkJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9UQUJMRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFibGUiOwotICAgIGNhc2Ug
QVRLX1JPTEVfVEFCTEVfQ0VMTDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2VsbCI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9DT0xVTU5fSEVBREVSOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhDb2x1bW5IZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3ciOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9X
X0hFQURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93SGVhZGVyIjsKLSAgICBjYXNl
IEFUS19ST0xFX1RPR0dMRV9CVVRUT046Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvZ2ds
ZUJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UT09MX0JBUjoKLSAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYVG9vbGJhciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UT09MX1RJUDoKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYVXNlckludGVyZmFjZVRvb2x0aXAiOwotICAgIGNhc2UgQVRLX1JP
TEVfVFJFRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZSI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9UUkVFX1RBQkxFOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlR3JpZCI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9UUkVFX0lURU06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRy
ZWVJdGVtIjsKLSAgICBjYXNlIEFUS19ST0xFX1dJTkRPVzoKLSAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYV2luZG93IjsKLSAgICBjYXNlIEFUS19ST0xFX1VOS05PV046Ci0gICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWFVua25vd24iOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFdlIHdhbnQg
dG8gZGlzdGluZ3Vpc2ggQVRLX1JPTEVfVU5LTk9XTiBmcm9tIGEga25vd24gQXRrUm9sZSB3aGlj
aAotICAgICAgICAvLyBvdXIgRFJUIGlzbid0IHByb3Blcmx5IGhhbmRsaW5nLgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogRklYTUUgbm90IGlkZW50aWZpZWQiOwotICAgIH0KLX0KLQotc3RhdGlj
IGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCi17
Ci0gICAgU3RyaW5nIHVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0KLSAgICAvLyBU
aGUgb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBwYXNzZWQgYWxvbmcgdG8gQVRzIHNv
IHdlIG5lZWQgdG8gYmUKLSAgICAvLyBhYmxlIHRvIHRlc3QgZm9yIHRoZWlyIHByZXNlbmNlIGFu
ZCBkbyBzbyB3aXRob3V0IGNhdXNpbmcgdGVzdCBmYWlsdXJlcy4KLSAgICB1U3RyaW5nLnJlcGxh
Y2Uob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsICI8b2JqPiIpOwotCi0gICAgLy8gVGhlIHBy
ZXNlbmNlIG9mIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBhY2Nlc3NpYmxlIHRleHQgb2YgYSBzaW5n
bGUgb2JqZWN0Ci0gICAgLy8gaXMgYXBwcm9wcmlhdGUsIGJ1dCBpdCBtYWtlcyB0ZXN0IHJlc3Vs
dHMgKGVzcGVjaWFsbHkgdGhlIGFjY2Vzc2libGUgdHJlZSkKLSAgICAvLyBoYXJkZXIgdG8gcmVh
ZC4KLSAgICB1U3RyaW5nLnJlcGxhY2UoIlxuIiwgIjxcXG4+Iik7Ci0KLSAgICByZXR1cm4gZ19z
dHJkdXAodVN0cmluZy51dGY4KCkuZGF0YSgpKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQotICAg
IDogbV9lbGVtZW50KGVsZW1lbnQpCi17Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgZ19v
YmplY3RfcmVmKG1fZWxlbWVudCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCi0g
ICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQotewotICAgIGlmIChtX2VsZW1lbnQpCi0g
ICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudCgpCi17Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAg
ICAgICAgZ19vYmplY3RfdW5yZWYobV9lbGVtZW50KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpnZXRMaW5rZWRVSUVsZW1lbnRzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiYgZWxlbWVudHMpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+JikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+JiBjaGlsZHJlbikKLXsKLSAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIEF0a09iamVjdCog
Y2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSwgaSk7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KGNoaWxkKSk7Ci0gICAgfQotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENo
aWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudFZl
Y3RvciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7Ci0gICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7
Ci0gICAgICAgIGVsZW1lbnRWZWN0b3IuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hp
bGQpKTsKLSAgICB9Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCgp
Ci17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJU
KEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQotICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25f
cm93cyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpjb2x1bW5Db3VudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQotICAgIHJldHVy
biBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Ci19Ci0KLWlu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKLXsKLSAgICBpZiAoIW1f
ZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQpKTsKLQotICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hp
bGRyZW4oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCi17
Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoYXRrX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2lu
dChBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksIHgsIHksIEFUS19YWV9XSU5ET1cpKTsKLX0KLQot
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVs
ZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgVmVjdG9y
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGNoaWxkcmVuOwotICAgIGdldENoaWxkcmVuV2l0aFJh
bmdlKGNoaWxkcmVuLCBpbmRleCwgaW5kZXggKyAxKTsKLQotICAgIGlmIChjaGlsZHJlbi5zaXpl
KCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmF0KDApOwotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4T2ZDaGlsZChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQoteyAKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWdjaGFyKiBhdHRyaWJ1dGVTZXRUb1N0cmluZyhBdGtBdHRy
aWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCkKLXsKLSAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19u
ZXcoMCk7Ci0gICAgZm9yIChHU0xpc3QqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJp
YnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7Ci0gICAgICAgIEF0a0F0dHJp
YnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRlcy0+
ZGF0YSk7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25jYXQo
YXR0cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKLSAgICAgICAg
Z19zdHJpbmdfYXBwZW5kKHN0ciwgYXR0cmlidXRlRGF0YS5nZXQoKSk7Ci0gICAgICAgIGlmIChh
dHRyaWJ1dGVzLT5uZXh0KQotICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgIiwgIik7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Ci19Ci0KLUpT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQotewotICAg
IGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLQotICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwotICAg
IEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoYXR0cmlidXRlU2V0VG9TdHJpbmcoYXRrX29i
amVjdF9nZXRfYXR0cmlidXRlcyhBVEtfT0JKRUNUKG1fZWxlbWVudCkpKSk7Ci0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJpYnV0ZURhdGEuZ2V0KCkpOwotfQot
Ci1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0aXRsZVVJRWxlbWVudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgQXRrUmVsYXRpb25TZXQqIHNldCA9IGF0a19vYmplY3RfcmVmX3JlbGF0aW9u
X3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIGlmICghc2V0KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIEF0a09iamVjdCogdGFyZ2V0ID0gMDsKLSAgICBpbnQgY291bnQgPSBhdGtf
cmVsYXRpb25fc2V0X2dldF9uX3JlbGF0aW9ucyhzZXQpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgewotICAgICAgICBBdGtSZWxhdGlvbiogcmVsYXRpb24gPSBhdGtfcmVs
YXRpb25fc2V0X2dldF9yZWxhdGlvbihzZXQsIGkpOwotICAgICAgICBpZiAoYXRrX3JlbGF0aW9u
X2dldF9yZWxhdGlvbl90eXBlKHJlbGF0aW9uKSA9PSBBVEtfUkVMQVRJT05fTEFCRUxMRURfQlkp
IHsKLSAgICAgICAgICAgIEdQdHJBcnJheSogdGFyZ2V0TGlzdCA9IGF0a19yZWxhdGlvbl9nZXRf
dGFyZ2V0KHJlbGF0aW9uKTsKLSAgICAgICAgICAgIGlmICh0YXJnZXRMaXN0LT5sZW4pCi0gICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8QXRrT2JqZWN0Kj4oZ19wdHJfYXJyYXlf
aW5kZXgodGFyZ2V0TGlzdCwgMCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZ19vYmplY3Rf
dW5yZWYoc2V0KTsKLSAgICByZXR1cm4gdGFyZ2V0ID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCh0
YXJnZXQpIDogMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwYXJlbnRFbGVtZW50KCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKLQotICAg
IEF0a09iamVjdCogcGFyZW50ID0gIGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOwotICAgIHJldHVybiBwYXJlbnQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHBh
cmVudCkgOiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDaGlsZHJlbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm9sZSgpCi17Ci0gICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JK
RUNUKG1fZWxlbWVudCkpOwotICAgIGlmICghcm9sZSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBTdHJpbmcgcm9sZVN0cmluZyA9IHJv
bGVUb1N0cmluZyhyb2xlKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcocm9sZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCi17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkK
LXsKLSAgICBjb25zdCBnY2hhciogbmFtZSA9IGF0a19vYmplY3RfZ2V0X25hbWUoQVRLX09CSkVD
VChtX2VsZW1lbnQpKTsKLSAgICBHT3duUHRyPGdjaGFyPiBheFRpdGxlKGdfc3RyZHVwX3ByaW50
ZigiQVhUaXRsZTogJXMiLCBuYW1lID8gbmFtZSA6ICIiKSk7Ci0KLSAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhUaXRsZS5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKLXsKLSAgICBjb25zdCBnY2hh
ciogZGVzY3JpcHRpb24gPSBhdGtfb2JqZWN0X2dldF9kZXNjcmlwdGlvbihBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOwotCi0gICAgaWYgKCFkZXNjcmlwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBheERl
c2MoZ19zdHJkdXBfcHJpbnRmKCJBWERlc2NyaXB0aW9uOiAlcyIsIGRlc2NyaXB0aW9uKSk7Ci0K
LSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhEZXNjLmdldCgpKTsK
LX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQot
ewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfVEVYVChtX2VsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIGdjaGFy
KiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQobV9lbGVtZW50KSwgMCwgLTEpOwot
ICAgIEdPd25QdHI8Z2NoYXI+IGF4VmFsdWUoZ19zdHJkdXBfcHJpbnRmKCJBWFZhbHVlOiAlcyIs
IHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyh0ZXh0KSkpOwotICAgIGdfZnJlZSh0ZXh0KTsK
LQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheFZhbHVlLmdldCgp
KTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQot
ewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKLQotICAgIC8vIEluIEFUSywgdGhlIGRvY3VtZW50IGxhbmd1YWdl
IGlzIGV4cG9zZWQgYXMgdGhlIGRvY3VtZW50J3MgbG9jYWxlLgotICAgIGlmIChhdGtfb2JqZWN0
X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSkgPT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJB
TUUpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhnX3N0cmR1
cF9wcmludGYoIkFYTGFuZ3VhZ2U6ICVzIiwgYXRrX2RvY3VtZW50X2dldF9sb2NhbGUoQVRLX0RP
Q1VNRU5UKG1fZWxlbWVudCkpKSk7Ci0KLSAgICAvLyBGb3IgYWxsIG90aGVyIG9iamVjdHMsIHRo
ZSBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIGFuIEF0a1RleHQgYXR0cmlidXRlLgotICAgIGlmICgh
QVRLX0lTX1RFWFQobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBmb3IgKEdTTGlzdCogdGV4dEF0dHJpYnV0ZXMgPSBh
dGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEFUS19URVhUKG1fZWxlbWVudCkpOyB0ZXh0
QXR0cmlidXRlczsgdGV4dEF0dHJpYnV0ZXMgPSB0ZXh0QXR0cmlidXRlcy0+bmV4dCkgewotICAg
ICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0
ZSo+KHRleHRBdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgaWYgKCFzdHJjbXAoYXRrQXR0cmli
dXRlLT5uYW1lLCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9MQU5H
VUFHRSkpKQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGdfc3RyZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMiLCBhdGtBdHRyaWJ1dGUtPnZhbHVlKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci19Ci0KIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29u
c3QKIHsKICAgICBpZiAoIW1fZWxlbWVudCkKQEAgLTQ1MCw2MDkgKzQ4LDMgQEAgSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdAogICAgIEdPd25QdHI8
Z2NoYXI+IGF4SGVscFRleHQoZ19zdHJkdXBfcHJpbnRmKCJBWEhlbHA6ICVzIiwgaGVscFRleHQu
ZGF0YSgpKSk7CiAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4SGVs
cFRleHQuZ2V0KCkpOwogfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCi17
Ci0gICAgaW50IHgsIHk7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09N
UE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7Ci0KLSAgICByZXR1cm4g
eDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkoKQotewotICAgIGludCB4
LCB5OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2Vs
ZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOwotCi0gICAgcmV0dXJuIHk7Ci19Ci0KLWRv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCgpCi17Ci0gICAgaW50IHdpZHRoLCBo
ZWlnaHQ7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVt
ZW50KSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAgIHJldHVybiB3aWR0aDsKLX0KLQotZG91Ymxl
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCgpCi17Ci0gICAgaW50IHdpZHRoLCBoZWln
aHQ7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVtZW50
KSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAgIHJldHVybiBoZWlnaHQ7Ci19Ci0KLWRvdWJsZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WCgpCi17Ci0gICAgLy8gTm90ZTogVGhp
cyBpcyBub3Qgc29tZXRoaW5nIHdlIGhhdmUgaW4gQVRLLgotICAgIHJldHVybiAwLmY7Ci19Ci0K
LWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WSgpCi17Ci0gICAgLy8g
Tm90ZTogVGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlIGhhdmUgaW4gQVRLLgotICAgIHJldHVybiAw
LmY7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmludFZhbHVlKCkgY29uc3QKLXsKLSAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAw
IH0gfSB9OwotCi0gICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKLSAgICAgICAgcmV0
dXJuIDAuMGY7Ci0KLSAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKG1f
ZWxlbWVudCksICZ2YWx1ZSk7Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkp
Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9hdCgmdmFs
dWUpOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUoKQotewot
ICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07Ci0KLSAgICBpZiAoIUFUS19JU19W
QUxVRShtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIGF0a192YWx1ZV9n
ZXRfbWluaW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKLSAgICBpZiAo
IUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAg
cmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCi17Ci0gICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsg
MCB9IH0gfTsKLQotICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCi0gICAgICAgIHJl
dHVybiAwLjBmOwotCi0gICAgYXRrX3ZhbHVlX2dldF9tYXhpbXVtX3ZhbHVlKEFUS19WQUxVRSht
X2VsZW1lbnQpLCAmdmFsdWUpOwotICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUp
KQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZh
bHVlKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCBhZnRlciBpdCBoYXMgYmVlbiBp
bXBsZW1lbnRlZCBpbiBBVEsuCi0gICAgLy8gU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTc2Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Ci19Ci0KLXN0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRlKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCi17Ci0gICAgaWYg
KCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQotICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
R1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZf
c3RhdGVfc2V0KEFUS19PQkpFQ1QoZWxlbWVudCkpKTsKLSAgICByZXR1cm4gYXRrX3N0YXRlX3Nl
dF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKLX0KLQotYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQotewotICAgIHJldHVybiBjaGVja0Vs
ZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9FTkFCTEVEKTsKLX0KLQotaW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcigpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNS
ZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWQoKSBjb25z
dAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihh
dGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Ci0gICAgZ2Jv
b2xlYW4gaXNGb2N1c2VkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5n
ZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTRUQpOwotCi0gICAgcmV0dXJuIGlzRm9jdXNlZDsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVfU0VMRUNURUQpOwot
fQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGllcmFyY2hpY2FsTGV2ZWwoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0gCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphcmlh
RHJvcEVmZmVjdHMoKSBjb25zdAoteyAgIAotICAgIHJldHVybiAwOyAKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIUFUS19J
U19PQkpFQ1QobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0
cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVf
c2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOwotICAgIGdib29sZWFuIGlzRXhwYW5kZWQgPSBh
dGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfRVhQ
QU5ERUQpOwotCi0gICAgcmV0dXJuIGlzRXhwYW5kZWQ7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1Qo
bV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0
ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19P
QkpFQ1QobV9lbGVtZW50KSkpOwotICAgIGdib29sZWFuIGlzQ2hlY2tlZCA9IGF0a19zdGF0ZV9z
ZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9DSEVDS0VEKTsKLQot
ICAgIHJldHVybiBpc0NoZWNrZWQ7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVh
ZGVycygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0K
LUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJ
blRhYmxlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXN0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBl
bGVtZW50LCBib29sIGlzUm93UmFuZ2UpCi17Ci0gICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJp
bmcoZ19zdHJkdXAoInswLCAwfSIpKTsKLQotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLQot
ICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKTsKLQotICAgIEF0a09iamVjdCogYXhU
YWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQpKTsKLSAgICBp
ZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKLSAgICAgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLQotICAgIC8v
IExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KLSAgICBnaW50IGluZGV4SW5QYXJlbnQg
PSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50KSk7Ci0g
ICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICBpbnQgcm93ID0gLTE7
Ci0gICAgaW50IGNvbHVtbiA9IC0xOwotICAgIHJvdyA9IGF0a190YWJsZV9nZXRfcm93X2F0X2lu
ZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0gICAgY29sdW1uID0gYXRr
X3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRleEluUGFy
ZW50KTsKLQotICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFuZCBjb2x1bW5z
IGFyZSB2YWxpZCB2YWx1ZXMuCi0gICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4gIT0gLTEpIHsK
LSAgICAgICAgaW50IGJhc2UgPSAwOwotICAgICAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICAgICAg
aWYgKGlzUm93UmFuZ2UpIHsKLSAgICAgICAgICAgIGJhc2UgPSByb3c7Ci0gICAgICAgICAgICBs
ZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFibGUpLCBy
b3csIGNvbHVtbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYXNlID0gY29sdW1u
OwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0KEFU
S19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9Ci0gICAgICAgIHJhbmdl
U3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVuZ3RoKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3Ry
aW5nLmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93
SW5kZXhSYW5nZSgpCi17Ci0gICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9yIHJvd3MuCi0gICAgcmV0
dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudCwgdHJ1ZSk7Ci19Ci0KLUpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UoKQotewotICAgIC8vIFJh
bmdlIGluIHRhYmxlIGZvciBjb2x1bW5zLgotICAgIHJldHVybiBpbmRleFJhbmdlSW5UYWJsZSht
X2VsZW1lbnQsIGZhbHNlKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVG
b3JJbmRleChpbnQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwot
fQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1
bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UodW5z
aWduZWQsIHVuc2lnbmVkKSAKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19IAotCi1KU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UodW5zaWduZWQs
IHVuc2lnbmVkKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQodW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0ZShBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KiBzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25OZXh0LCBKU1N0cmluZ1JlZiBzZWFyY2hL
ZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAot
ICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNpZ25lZCBy
b3cpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNT
RVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQotICAgIEF0a09iamVjdCogZm91bmRDZWxs
ID0gYXRrX3RhYmxlX3JlZl9hdChBVEtfVEFCTEUobV9lbGVtZW50KSwgcm93LCBjb2x1bW4pOwot
ICAgIHJldHVybiBmb3VuZENlbGwgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGZvdW5kQ2VsbCkg
OiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRl
eHRSYW5nZSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRy
aWJ1dGUpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgU3RyaW5nIGF0a0F0dHJpYnV0ZU5hbWUg
PSBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLSAgICBpZiAoYXRrQXR0
cmlidXRlTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOwotCi0gICAgZm9yIChHU0xpc3QqIGF0a0F0dHJpYnV0ZXMgPSBhdGtf
b2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7IGF0a0F0dHJpYnV0
ZXM7IGF0a0F0dHJpYnV0ZXMgPSBhdGtBdHRyaWJ1dGVzLT5uZXh0KSB7Ci0gICAgICAgIEF0a0F0
dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXRrQXR0
cmlidXRlcy0+ZGF0YSk7Ci0gICAgICAgIGlmICghc3RyY21wKGF0a0F0dHJpYnV0ZS0+bmFtZSwg
YXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtBdHRyaWJ1dGUtPnZhbHVlKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotZG91
YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5n
UmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDAu
MGY7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVl
KEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmli
dXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1V
SUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKLXsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChBVEtfSVNfVkFMVUUoZWxlbWVudCkpOwotCi0gICAg
R1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgICBhdGtfdmFsdWVfZ2V0X2N1
cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKLQotICAgIEdW
YWx1ZSBpbmNyZW1lbnQgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgYXRrX3ZhbHVlX2dldF9taW5pbXVt
X2luY3JlbWVudChBVEtfVkFMVUUoZWxlbWVudCksICZpbmNyZW1lbnQpOwotCi0gICAgR1ZhbHVl
IG5ld1ZhbHVlID0gR19WQUxVRV9JTklUOwotICAgIGdfdmFsdWVfaW5pdCgmbmV3VmFsdWUsIEdf
VFlQRV9GTE9BVCk7Ci0KLSAgICBnX3ZhbHVlX3NldF9mbG9hdCgmbmV3VmFsdWUsIGdfdmFsdWVf
Z2V0X2Zsb2F0KCZjdXJyZW50VmFsdWUpICsgZmFjdG9yICogZ192YWx1ZV9nZXRfZmxvYXQoJmlu
Y3JlbWVudCkpOwotICAgIGF0a192YWx1ZV9zZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxl
bWVudCksICZuZXdWYWx1ZSk7Ci0KLSAgICBnX3ZhbHVlX3Vuc2V0KCZuZXdWYWx1ZSk7Ci0gICAg
Z192YWx1ZV91bnNldCgmaW5jcmVtZW50KTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZjdXJyZW50VmFs
dWUpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCi17Ci0g
ICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAxKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpkZWNyZW1lbnQoKQotewotICAgIGFsdGVyQ3VycmVudFZhbHVlKG1fZWxl
bWVudCwgLTEpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNzKCkKLXsK
LSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKEFUS19J
U19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICBpZiAoIUFUS19JU19BQ1RJT04obV9lbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBvbmUgYWN0aW9uIHBlciBvYmplY3Qg
aXMgc3VwcG9ydGVkIHNvIGZhci4KLSAgICBhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtfQUNUSU9O
KG1fZWxlbWVudCksIDApOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dN
ZW51KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkUm93QXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGlu
ZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRl
eCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0K
LQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9z
ZWRCeVJvdygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29k
aW5nKCkKLXsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpF
Q1QobV9lbGVtZW50KSk7Ci0gICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUp
Ci0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0g
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVudF9nZXRf
YXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiRW5jb2RpbmciKSk7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKLXsK
LSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSk7Ci0gICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCi0gICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVudF9nZXRfYXR0cmlidXRl
X3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiVVJJIikpOwotfQotCi1KU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09i
amVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3Rf
cmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVhbiBpc0Zv
Y3VzYWJsZSA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFU
S19TVEFURV9GT0NVU0FCTEUpOwotCi0gICAgcmV0dXJuIGlzRm9jdXNhYmxlOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX1NFTEVDVEFCTEUpOwot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVf
TVVMVElTRUxFQ1RBQkxFKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlz
aWJsZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGFzUG9wdXAoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGFrZVNlbGVjdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVj
dGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNp
YmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci19CmRpZmYgLS1naXQgYS9Ub29scy9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL0dOVW1h
a2VmaWxlLmFtCmluZGV4IDQzYTRhYmMuLmNhZGEwMTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC0xNDYsNiArMTQ2LDggQEAg
UHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlUb29scy9EdW1wUmVuZGVyVHJl
ZS9jb25maWcuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxs
YmFja3MuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFj
a3NBdGsuY3BwIFwKKyAgICAJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQXRrLmNwcCBcCisJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRBdGsuY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1
bXBTdXBwb3J0Q2Fpcm8uY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1
bXBTdXBwb3J0Q2Fpcm8uaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyR3RrLmNwcCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184757</attachid>
            <date>2013-01-25 08:23:33 -0800</date>
            <delta_ts>2013-01-30 01:30:39 -0800</delta_ts>
            <desc>[GTK][EFL] Isolates GTK&apos;s DumpRenderTree code.</desc>
            <filename>a11y-share-a11y-callbacks.patch</filename>
            <type>text/plain</type>
            <size>22448</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGMx
NmUzLi42OThkMmZkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMDEtMjUgIEtyenlzenRvZiBDemVjaCAgPGsu
Y3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS11bRUZMXSBTaGFyZXMgV2ViS2l0LUdU
SydzIER1bXBSZW5kZXJUcmVlIGFjY2Vzc2liaWxpdHkgaW1wbGVtZW50YXRpb24gd2l0aCBvdGhl
ciBXZWJraXQgcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNTAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaDogUmVu
YW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
LmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NB
dGsuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxp
dHlDYWxsYmFja3MuY3BwLgorICAgICAgICAocHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQpOgorICAg
ICAgICAoYXhPYmplY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKGNvbm5lY3RBY2Nlc3NpYmls
aXR5Q2FsbGJhY2tzKToKKyAgICAgICAgKGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6IEFkZHMgQVRL
IGhlYWRlcnMsIGxpYnJhcmllcywgbmV3IHNvdXJjZXMuCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IEFkZHMgcmVuYW1lZCBzb3VyY2VzLgorCiAyMDEzLTAxLTIzICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2V0IHN2bjplb2wtc3R5bGUg
dG8gQ1JMRiBvbiBXaW5kb3dzIC5zbG4gZmlsZXMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43MjI1NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApAQCAtMCwwICsxLDM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzX2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eUNhbGxiYWNrc19oCisKK3ZvaWQgY29ubmVjdEFj
Y2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKK3ZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxs
YmFja3MoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOGVlMTg2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJ
VFkpCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJXZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZUNocm9tZS5oIgorI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbC5oIgorI2VuZGlmCisKK3N0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAw
Oworc3RhdGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWludCBh
Y3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IGNoaWxk
cmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdlZExp
c3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQg
PSAwOworCitzdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmplY3QqIGFj
Y2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hhciogc2lnbmFsVmFs
dWUpCit7CisgICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCBzaWduYWxz
LCBhcyB0aGUgQXRrT2JqZWN0CisgICAgLy8gYXNzb2NpYXRlZCB0byB0aGVtIHdpbGwgbm90IGJl
IHZhbGlkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KKyAgICBpZiAoIXNpZ25hbE5hbWUgfHwgIWdf
c3RyY21wMChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBnY2hhciogb2JqZWN0TmFtZSA9IGF0a19v
YmplY3RfZ2V0X25hbWUoYWNjZXNzaWJsZSk7CisgICAgQXRrUm9sZSBvYmplY3RSb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKKworICAgIC8vIFRyeSB0byBhbHdheXMgcHJv
dmlkZSBhIG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgorICAgIGlmICghb2JqZWN0
TmFtZSB8fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQorICAgICAgICBvYmplY3ROYW1lID0gIihObyBu
YW1lKSI7CisKKyAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFsdWUoc2lnbmFsVmFs
dWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBzaWduYWxWYWx1ZSkg
OiBnX3N0cmR1cChzaWduYWxOYW1lKSk7CisgICAgcHJpbnRmKCJBY2Nlc3NpYmlsaXR5IG9iamVj
dCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLAorICAgICAgICAg
ICBzaWduYWxOYW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9u
SGludCAqc2lnbmFsSGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3VpbnQgbnVtUGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxk
IHJlY2VpdmUgdGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCisgICAgaWYgKG51bVBh
cmFtVmFsdWVzIDwgMSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBBdGtPYmplY3QqIGFj
Y2Vzc2libGUgPSBBVEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFyYW1WYWx1ZXNbMF0p
KTsKKyAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCisg
ICAgICAgIHJldHVybiBUUlVFOworCisgICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKKyAg
ICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lOworICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbFZh
bHVlOworCisgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFs
X3F1ZXJ5KTsKKworICAgIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSwg
InN0YXRlLWNoYW5nZSIpKSB7CisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50
Zigic3RhdGUtY2hhbmdlOiVzIiwgZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVlc1sxXSkp
KTsKKyAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVl
X2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1syXSkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNt
cDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiZm9jdXMtZXZlbnQiKSkgeworICAgICAgICBz
aWduYWxOYW1lLnNldChnX3N0cmR1cCgiZm9jdXMtZXZlbnQiKSk7CisgICAgICAgIHNpZ25hbFZh
bHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigmcGFyYW1W
YWx1ZXNbMV0pKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWdu
YWxfbmFtZSwgImNoaWxkcmVuLWNoYW5nZWQiKSkgeworICAgICAgICBzaWduYWxOYW1lLnNldChn
X3N0cmR1cCgiY2hpbGRyZW4tY2hhbmdlZCIpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdf
c3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF91aW50KCZwYXJhbVZhbHVlc1sxXSkpKTsK
KyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAicHJv
cGVydHktY2hhbmdlIikpIHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRm
KCJwcm9wZXJ0eS1jaGFuZ2U6JXMiLCBnX3F1YXJrX3RvX3N0cmluZyhzaWduYWxIaW50LT5kZXRh
aWwpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKHNpZ25h
bF9xdWVyeS5zaWduYWxfbmFtZSkpOworCisgICAgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoYWNj
ZXNzaWJsZSwgc2lnbmFsTmFtZS5nZXQoKSwgc2lnbmFsVmFsdWUuZ2V0KCkpOworCisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3ZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQorewor
ICAgIC8vIEVuc3VyZSBubyBjYWxsYmFja3MgYXJlIGNvbm5lY3RlZCBiZWZvcmUuCisgICAgZGlz
Y29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFj
Y2Vzc2liaWxpdHkgaXMgaW5pdGlhbGl6ZWQgZm9yIHRoZSBXZWJWaWV3IGJ5IHF1ZXJ5aW5nIGZv
cgorICAgIC8vIHRoZSByb290IGFjY2Vzc2libGUgb2JqZWN0LCB3aGljaCB3aWxsIGNyZWF0ZSB0
aGUgZnVsbCBoaWVyYXJjaHkuCisjaWYgUExBVEZPUk0oR1RLKQorICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7CisjZWxpZiBQ
TEFURk9STShFRkwpCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyb290QWNjZXNzaWJs
ZUVsZW1lbnQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOworI2VuZGlmCisKKyAgICAvLyBBZGQgZ2xv
YmFsIGxpc3RlbmVycyBmb3IgQXRrT2JqZWN0J3Mgc2lnbmFscy4KKyAgICBzdGF0ZUNoYW5nZUxp
c3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlz
dGVuZXIsICJBVEs6QXRrT2JqZWN0OnN0YXRlLWNoYW5nZSIpOworICAgIGZvY3VzRXZlbnRMaXN0
ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3Rl
bmVyLCAiQVRLOkF0a09iamVjdDpmb2N1cy1ldmVudCIpOworICAgIGFjdGl2ZURlc2NlbmRhbnRD
aGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0
RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIp
OworICAgIGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9s
aXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmNoaWxkcmVuLWNo
YW5nZWQiKTsKKyAgICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxf
ZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpwcm9w
ZXJ0eS1jaGFuZ2UiKTsKKyAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2Fk
ZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09i
amVjdDp2aXNpYmxlLWRhdGEtY2hhbmdlZCIpOworCisgICAgLy8gRW5zdXJlIHRoZSBBdGsgaW50
ZXJmYWNlIHR5cGVzIGFyZSByZWdpc3RlcmVkLCBvdGhlcndpc2UKKyAgICAvLyB0aGUgQXRrRG9j
dW1lbnQgc2lnbmFsIGhhbmRsZXJzIGJlbG93IHdvbid0IGdldCByZWdpc3RlcmVkLgorICAgIEdP
YmplY3QqIGR1bW15QXhPYmplY3QgPSBHX09CSkVDVChnX29iamVjdF9uZXcoQVRLX1RZUEVfT0JK
RUNULCAwKSk7CisgICAgQXRrT2JqZWN0KiBkdW1teU5vT3BBeE9iamVjdCA9IGF0a19ub19vcF9v
YmplY3RfbmV3KGR1bW15QXhPYmplY3QpOworICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGR1
bW15Tm9PcEF4T2JqZWN0KSk7CisgICAgZ19vYmplY3RfdW5yZWYoZHVtbXlBeE9iamVjdCk7Cit9
CisKK3ZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQoreworICAgIC8vIEF0
a09iamVjdCBzaWduYWxzLgorICAgIGlmIChzdGF0ZUNoYW5nZUxpc3RlbmVySWQpIHsKKyAgICAg
ICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoc3RhdGVDaGFuZ2VMaXN0ZW5lcklk
KTsKKyAgICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKGZv
Y3VzRXZlbnRMaXN0ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGZvY3VzRXZlbnRMaXN0ZW5lcklkKTsKKyAgICAgICAgZm9jdXNFdmVudExpc3RlbmVy
SWQgPSAwOworICAgIH0KKyAgICBpZiAoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklk
KSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGFjdGl2ZURlc2Nl
bmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCk7CisgICAgICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2Vk
TGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlmIChjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklk
KSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGNoaWxkcmVuQ2hh
bmdlZExpc3RlbmVySWQpOworICAgICAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsK
KyAgICB9CisgICAgaWYgKHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCk7
CisgICAgICAgIHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAo
dmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2Jh
bF9ldmVudF9saXN0ZW5lcih2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAg
dmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CisgICAgfQorfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAppbmRleCBjMDY4ZWE3Li42N2Y5MDVk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsNSBA
QAogc2V0KER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKKyAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwCiAgICAgJHtUT09MU19ESVJ9
L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAogICAgICR7VE9PTFNfRElS
fS9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwCiAgICAgJHtUT09MU19E
SVJ9L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTg4LDYgKzg5LDcgQEAgc2V0
KER1bXBSZW5kZXJUcmVlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vcnVudGltZQogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9Gb3J3YXJkaW5nSGVhZGVy
cwogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZQorICAgICR7VE9PTFNfRElSfS9EdW1w
UmVuZGVyVHJlZS9hdGsKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvY2Fpcm8KICAg
ICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsCiAgICAgJHtXVEZfRElSfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJjODAyLi4wMDAwMDAwCi0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxsYmFja3Mu
aCIKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotc3RhdGljIGd1aW50IHN0
YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgZm9jdXNFdmVudExpc3RlbmVy
SWQgPSAwOwotc3RhdGljIGd1aW50IGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9
IDA7Ci1zdGF0aWMgZ3VpbnQgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMg
Z3VpbnQgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgdmlzaWJs
ZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHByaW50QWNjZXNzaWJp
bGl0eUV2ZW50KEF0a09iamVjdCogYWNjZXNzaWJsZSwgY29uc3QgZ2NoYXIqIHNpZ25hbE5hbWUs
IGNvbnN0IGdjaGFyKiBzaWduYWxWYWx1ZSkKLXsKLSAgICAvLyBEbyBub3QgaGFuZGxlIHN0YXRl
LWNoYW5nZTpkZWZ1bmN0IHNpZ25hbHMsIGFzIHRoZSBBdGtPYmplY3QKLSAgICAvLyBhc3NvY2lh
dGVkIHRvIHRoZW0gd2lsbCBub3QgYmUgdmFsaWQgYXQgdGhpcyBwb2ludCBhbHJlYWR5LgotICAg
IGlmICghc2lnbmFsTmFtZSB8fCAhZ19zdHJjbXAwKHNpZ25hbE5hbWUsICJzdGF0ZS1jaGFuZ2U6
ZGVmdW5jdCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFU
S19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGdj
aGFyKiBvYmplY3ROYW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShhY2Nlc3NpYmxlKTsKLSAgICBB
dGtSb2xlIG9iamVjdFJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGFjY2Vzc2libGUpOwotCi0g
ICAgLy8gVHJ5IHRvIGFsd2F5cyBwcm92aWRlIGEgbmFtZSB0byBiZSBsb2dnZWQgZm9yIHRoZSBv
YmplY3QuCi0gICAgaWYgKCFvYmplY3ROYW1lIHx8ICpvYmplY3ROYW1lID09ICdcMCcpCi0gICAg
ICAgIG9iamVjdE5hbWUgPSAiKE5vIG5hbWUpIjsKLQotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25h
bE5hbWVBbmRWYWx1ZShzaWduYWxWYWx1ZSA/IGdfc3RyZHVwX3ByaW50ZigiJXMgPSAlcyIsIHNp
Z25hbE5hbWUsIHNpZ25hbFZhbHVlKSA6IGdfc3RyZHVwKHNpZ25hbE5hbWUpKTsKLSAgICBwcmlu
dGYoIkFjY2Vzc2liaWxpdHkgb2JqZWN0IGVtaXR0ZWQgXCIlc1wiIC8gTmFtZTogXCIlc1wiIC8g
Um9sZTogJWRcbiIsCi0gICAgICAgICAgIHNpZ25hbE5hbWVBbmRWYWx1ZS5nZXQoKSwgb2JqZWN0
TmFtZSwgb2JqZWN0Um9sZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlz
dGVuZXIoR1NpZ25hbEludm9jYXRpb25IaW50ICpzaWduYWxIaW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndWludCBudW1QYXJhbVZhbHVlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICpwYXJhbVZhbHVlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICAvLyBBdCBsZWFzdCB3ZSBzaG91bGQgcmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhl
IHNpZ25hbC4KLSAgICBpZiAobnVtUGFyYW1WYWx1ZXMgPCAxKQotICAgICAgICByZXR1cm4gVFJV
RTsKLQotICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9IEFUS19PQkpFQ1QoZ192YWx1ZV9nZXRf
b2JqZWN0KCZwYXJhbVZhbHVlc1swXSkpOwotICAgIGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lT
X09CSkVDVChhY2Nlc3NpYmxlKSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBHU2lnbmFs
UXVlcnkgc2lnbmFsX3F1ZXJ5OwotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWU7Ci0gICAg
R093blB0cjxnY2hhcj4gc2lnbmFsVmFsdWU7Ci0KLSAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxI
aW50LT5zaWduYWxfaWQsICZzaWduYWxfcXVlcnkpOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoc2ln
bmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAic3RhdGUtY2hhbmdlIikpIHsKLSAgICAgICAgc2lnbmFs
TmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCJzdGF0ZS1jaGFuZ2U6JXMiLCBnX3ZhbHVlX2dldF9z
dHJpbmcoJnBhcmFtVmFsdWVzWzFdKSkpOwotICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJk
dXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnBhcmFtVmFsdWVzWzJdKSkpOwot
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJmb2N1
cy1ldmVudCIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKCJmb2N1cy1ldmVu
dCIpKTsKLSAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3Zh
bHVlX2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1sxXSkpKTsKLSAgICB9IGVsc2UgaWYgKCFnX3N0
cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiY2hpbGRyZW4tY2hhbmdlZCIpKSB7Ci0g
ICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKCJjaGlsZHJlbi1jaGFuZ2VkIikpOwotICAg
ICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X3Vp
bnQoJnBhcmFtVmFsdWVzWzFdKSkpOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxf
cXVlcnkuc2lnbmFsX25hbWUsICJwcm9wZXJ0eS1jaGFuZ2UiKSkgewotICAgICAgICBzaWduYWxO
YW1lLnNldChnX3N0cmR1cF9wcmludGYoInByb3BlcnR5LWNoYW5nZTolcyIsIGdfcXVhcmtfdG9f
c3RyaW5nKHNpZ25hbEhpbnQtPmRldGFpbCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2lnbmFs
TmFtZS5zZXQoZ19zdHJkdXAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lKSk7Ci0KLSAgICBwcmlu
dEFjY2Vzc2liaWxpdHlFdmVudChhY2Nlc3NpYmxlLCBzaWduYWxOYW1lLmdldCgpLCBzaWduYWxW
YWx1ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBjb25uZWN0QWNjZXNz
aWJpbGl0eUNhbGxiYWNrcygpCi17Ci0gICAgLy8gRW5zdXJlIG5vIGNhbGxiYWNrcyBhcmUgY29u
bmVjdGVkIGJlZm9yZS4KLSAgICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwot
Ci0gICAgLy8gRW5zdXJlIHRoYXQgYWNjZXNzaWJpbGl0eSBpcyBpbml0aWFsaXplZCBmb3IgdGhl
IFdlYlZpZXcgYnkgcXVlcnlpbmcgZm9yCi0gICAgLy8gdGhlIHJvb3QgYWNjZXNzaWJsZSBvYmpl
Y3QsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBmdWxsIGhpZXJhcmNoeS4KLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwotCi0g
ICAgLy8gQWRkIGdsb2JhbCBsaXN0ZW5lcnMgZm9yIEF0a09iamVjdCdzIHNpZ25hbHMuCi0gICAg
c3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhP
YmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09iamVjdDpzdGF0ZS1jaGFuZ2UiKTsKLSAgICBm
b2N1c0V2ZW50TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2Jq
ZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpBdGtPYmplY3Q6Zm9jdXMtZXZlbnQiKTsKLSAgICBhY3Rp
dmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0
ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJHdGs6QXRrT2JqZWN0OmFjdGl2ZS1kZXNjZW5k
YW50LWNoYW5nZWQiKTsKLSAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09iamVj
dDpjaGlsZHJlbi1jaGFuZ2VkIik7Ci0gICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0
a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpB
dGtPYmplY3Q6cHJvcGVydHktY2hhbmdlIik7Ci0gICAgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVu
ZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5l
ciwgIkd0azpBdGtPYmplY3Q6dmlzaWJsZS1kYXRhLWNoYW5nZWQiKTsKLQotICAgIC8vIEVuc3Vy
ZSB0aGUgQXRrIGludGVyZmFjZSB0eXBlcyBhcmUgcmVnaXN0ZXJlZCwgb3RoZXJ3aXNlCi0gICAg
Ly8gdGhlIEF0a0RvY3VtZW50IHNpZ25hbCBoYW5kbGVycyBiZWxvdyB3b24ndCBnZXQgcmVnaXN0
ZXJlZC4KLSAgICBHT2JqZWN0KiBkdW1teUF4T2JqZWN0ID0gR19PQkpFQ1QoZ19vYmplY3RfbmV3
KEFUS19UWVBFX09CSkVDVCwgMCkpOwotICAgIEF0a09iamVjdCogZHVtbXlOb09wQXhPYmplY3Qg
PSBhdGtfbm9fb3Bfb2JqZWN0X25ldyhkdW1teUF4T2JqZWN0KTsKLSAgICBnX29iamVjdF91bnJl
ZihHX09CSkVDVChkdW1teU5vT3BBeE9iamVjdCkpOwotICAgIGdfb2JqZWN0X3VucmVmKGR1bW15
QXhPYmplY3QpOwotfQotCi12b2lkIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkK
LXsKLSAgICAvLyBBdGtPYmplY3Qgc2lnbmFscy4KLSAgICBpZiAoc3RhdGVDaGFuZ2VMaXN0ZW5l
cklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHN0YXRlQ2hh
bmdlTGlzdGVuZXJJZCk7Ci0gICAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7Ci0gICAg
fQotICAgIGlmIChmb2N1c0V2ZW50TGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2ds
b2JhbF9ldmVudF9saXN0ZW5lcihmb2N1c0V2ZW50TGlzdGVuZXJJZCk7Ci0gICAgICAgIGZvY3Vz
RXZlbnRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGFjdGl2ZURlc2NlbmRhbnRDaGFu
Z2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQpOwotICAgICAgICBhY3RpdmVEZXNj
ZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAoY2hpbGRyZW5DaGFu
Z2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkTGlz
dGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKSB7
Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHByb3BlcnR5Q2hhbmdl
ZExpc3RlbmVySWQpOwotICAgICAgICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAg
ICB9Ci0gICAgaWYgKHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIodmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJ
ZCk7Ci0gICAgICAgIHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLX0K
LQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxs
YmFja3MuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMjU3NTcuLjAwMDAwMDAKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaAorKysgL2Rl
di9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEFjY2Vzc2liaWxpdHlDYWxsYmFja3NfaAotI2RlZmluZSBBY2Nlc3NpYmls
aXR5Q2FsbGJhY2tzX2gKLQotdm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwot
dm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXgg
Yjk5NjEwOC4uNDNhNGFiYyAxMDA2NDQKLS0tIGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIv
VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTEwNCw2ICsxMDQsNyBAQCBQcm9ncmFtc19EdW1wUmVu
ZGVyVHJlZV9DUFBGTEFHUyA9IFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAogCS1EVE9QX0xFVkVM
X0RJUj1cIiR7c2hlbGwgcHdkfS8ke3NyY2Rpcn1cIiBcCiAJLUkkKHNyY2RpcikvVG9vbHMvRHVt
cFJlbmRlclRyZWUgXAorCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ayBcCiAJ
LUkkKHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsg
XApAQCAtMTQzLDEwICsxNDQsMTAgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9
IFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUuaCBcCiAJVG9vbHMvRHVtcFJlbmRl
clRyZWUvV29ya1F1ZXVlSXRlbS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jb25maWcuaCBc
CisJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBcCisJ
VG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCBcCi0J
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBcCi0JVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwIFwKIAlUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIFwKIAlU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAgXAog
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185432</attachid>
            <date>2013-01-30 01:21:39 -0800</date>
            <delta_ts>2013-02-04 03:53:11 -0800</delta_ts>
            <desc>[GTK][EFL] Share WebKit-GTK&apos;s DumpRenderTree accessibility implementation with other Webkit ports.</desc>
            <filename>a11y-share-drt.patch</filename>
            <type>text/plain</type>
            <size>71510</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2OThk
MmZkLi43MzZjMDg5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQ1IEBACisyMDEzLTAxLTMwICBLcnp5c3p0b2YgQ3plY2ggIDxr
LmN6ZWNoQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtHVEtdW0VGTF0gU2hhcmVzIFdlYktpdC1H
VEsncyBEdW1wUmVuZGVyVHJlZSBhY2Nlc3NpYmlsaXR5IGltcGxlbWVudGF0aW9uIHdpdGggb3Ro
ZXIgV2Via2l0IHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDUwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTaGFyZXMgc3BlY2lmaWMgQVRLJ3MgYWNjZXNzaWJpbGl0eSBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgS2VlcHMgcGxhdGZvcm0gc3BlY2lmaWMgbWV0aG9kcyBpbiBHVEsncyBkaXJl
Y3RvcnkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJBdGsuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwLgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzZXRMb2dGb2N1c0V2ZW50cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6c2V0TG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnNldExvZ1ZhbHVlQ2hhbmdlRXZlbnRzKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNw
cDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRHdGsuY3BwLgorICAgICAgICAoY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKToKKyAg
ICAgICAgKHJvbGVUb1N0cmluZyk6CisgICAgICAgIChyZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3Vs
dHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRMaW5rZWRVSUVs
ZW1lbnRzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlu
a3MpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4pOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291bnQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjplbGVtZW50QXRQb2ludCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5r
ZWRVSUVsZW1lbnRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omdl
dENoaWxkQXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleE9m
Q2hpbGQpOgorICAgICAgICAoYXR0cmlidXRlU2V0VG9TdHJpbmcpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cm9sZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzdWJyb2xlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlw
dGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbik6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6d2lkdGgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGVpZ2h0KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om1pblZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVl
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24pOgor
ICAgICAgICAoY2hlY2tFbGVtZW50U3RhdGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNFbmFibGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2Vy
dGlvblBvaW50TGluZU51bWJlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1ByZXNzQWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNGb2N1c2VkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0
ZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGllcmFyY2hpY2FsTGV2ZWwp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0NoZWNrZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mUm93cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmluZGV4SW5UYWJsZSk6CisgICAgICAgIChpbmRleFJhbmdlSW5UYWJsZSk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnN0cmluZ0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRlKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQpOgorICAgICAgICAoYWx0ZXJDdXJy
ZW50VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzaG93TWVudSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNj
bG9zZWRSb3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFP
d25zRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJp
YUZsb3dUb0VsZW1lbnRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNlbGVjdGVkUm93QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
b3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZEJ5
Um93KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1
ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc1NlbGVjdGFibGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNNdWx0aVNlbGVjdGFibGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNT
ZWxlY3RlZE9wdGlvbkFjdGl2ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1Zpc2libGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4p
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRha2VGb2N1cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbik6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24pOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZv
Y3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9p
bnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ckd0ay5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1l
bnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KToKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKwogMjAxMy0wMS0yNSAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVj
aEBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXVtFRkxdIFNoYXJlcyBXZWJLaXQtR1RLJ3Mg
RHVtcFJlbmRlclRyZWUgYWNjZXNzaWJpbGl0eSBpbXBsZW1lbnRhdGlvbiB3aXRoIG90aGVyIFdl
YmtpdCBwb3J0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyQXRrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlckF0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDUxMDMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorCisjaWYgSEFWRShBQ0NFU1NJQklM
SVRZKQorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorCisj
aW5jbHVkZSA8YXRrL2F0ay5oPgorCitzdGF0aWMgYm9vbCBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2
ZW50cyA9IGZhbHNlOworCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKCkKK3sKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5KQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lkIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpzZXRMb2dGb2N1c0V2ZW50cyhib29sKQoreworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpzZXRMb2dTY3JvbGxpbmdTdGFydEV2ZW50cyhib29sKQoreworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dWYWx1ZUNoYW5nZUV2ZW50cyhi
b29sKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3Np
YmlsaXR5RXZlbnRzKGJvb2wgbG9nQWNjZXNzaWJpbGl0eUV2ZW50cykKK3sKKyAgICBpZiAobG9n
QWNjZXNzaWJpbGl0eUV2ZW50cyA9PSBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKSB7CisgICAgICAg
IGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7CisgICAgICAgIGxvZ2dpbmdBY2Nl
c3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
b25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOworICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5
RXZlbnRzID0gdHJ1ZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90
aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5l
cigpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRr
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRr
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjNlN2MwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKQEAgLTAsMCArMSwxMDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkp
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPGF0
ay9hdGsuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKK3N0YXRpYyBTdHJpbmcg
Y29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAg
ICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShh
dHRyaWJ1dGUpOworICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcihzdGF0aWNfY2FzdDxnY2hhcio+
KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhhdHRy
aWJ1dGUsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisKKyAgICBTdHJpbmcgYXR0cmlidXRl
U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIuZ2V0KCkpOworICAgIGlmIChhdHRyaWJ1
dGVTdHJpbmcgPT0gIkFYUGxhY2Vob2xkZXJWYWx1ZSIpCisgICAgICAgIHJldHVybiAicGxhY2Vo
b2xkZXItdGV4dCI7CisKKyAgICByZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5n
IHJvbGVUb1N0cmluZyhBdGtSb2xlIHJvbGUpCit7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAg
Y2FzZSBBVEtfUk9MRV9BTEVSVDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQWxlcnQiOwor
ICAgIGNhc2UgQVRLX1JPTEVfQ0FOVkFTOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDYW52
YXMiOworICAgIGNhc2UgQVRLX1JPTEVfQ0hFQ0tfQk9YOgorICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhDaGVja0JveCI7CisgICAgY2FzZSBBVEtfUk9MRV9DT0xVTU5fSEVBREVSOgorICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhDb2x1bW5IZWFkZXIiOworICAgIGNhc2UgQVRLX1JPTEVfQ09N
Qk9fQk9YOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb21ib0JveCI7CisgICAgY2FzZSBB
VEtfUk9MRV9ET0NVTUVOVF9GUkFNRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2ViQXJl
YSI7CisgICAgY2FzZSBBVEtfUk9MRV9FTlRSWToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
VGV4dEZpZWxkIjsKKyAgICBjYXNlIEFUS19ST0xFX0ZPT1RFUjoKKyAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYRm9vdGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX0ZPUk06CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWEZvcm0iOworICAgIGNhc2UgQVRLX1JPTEVfR1JPVVBJTkc6CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsKKyAgICBjYXNlIEFUS19ST0xFX0hFQURJTkc6Cisg
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhlYWRpbmciOworICAgIGNhc2UgQVRLX1JPTEVfSU1B
R0U6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEltYWdlIjsKKyAgICBjYXNlIEFUS19ST0xF
X0lNQUdFX01BUDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSW1hZ2VNYXAiOworICAgIGNh
c2UgQVRLX1JPTEVfTEFCRUw6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExhYmVsIjsKKyAg
ICBjYXNlIEFUS19ST0xFX0xJTks6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpbmsiOwor
ICAgIGNhc2UgQVRLX1JPTEVfTElTVDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdCI7
CisgICAgY2FzZSBBVEtfUk9MRV9MSVNUX0JPWDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
TGlzdEJveCI7CisgICAgY2FzZSBBVEtfUk9MRV9MSVNUX0lURU06CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWExpc3RJdGVtIjsKKyAgICBjYXNlIEFUS19ST0xFX01FTlU6CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWE1lbnUiOworICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9CQVI6CisgICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnVCYXIiOworICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9J
VEVNOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51SXRlbSI7CisgICAgY2FzZSBBVEtf
Uk9MRV9QQUdFX1RBQjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFiIjsKKyAgICBjYXNl
IEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYkdy
b3VwIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBTkVMOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhHcm91cCI7CisgICAgY2FzZSBBVEtfUk9MRV9QQVJBR1JBUEg6CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWFBhcmFncmFwaCI7CisgICAgY2FzZSBBVEtfUk9MRV9QQVNTV09SRF9URVhUOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXNzd29yZEZpZWxkIjsKKyAgICBjYXNlIEFUS19S
T0xFX1BVU0hfQlVUVE9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhCdXR0b24iOworICAg
IGNhc2UgQVRLX1JPTEVfUkFESU9fQlVUVE9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhS
YWRpb0J1dHRvbiI7CisgICAgY2FzZSBBVEtfUk9MRV9ST1dfSEVBREVSOgorICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhSb3dIZWFkZXIiOworICAgIGNhc2UgQVRLX1JPTEVfUlVMRVI6CisgICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWFJ1bGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9C
QVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNjcm9sbEJhciI7CisgICAgY2FzZSBBVEtf
Uk9MRV9TQ1JPTExfUEFORToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2Nyb2xsQXJlYSI7
CisgICAgY2FzZSBBVEtfUk9MRV9TRUNUSU9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhE
aXYiOworICAgIGNhc2UgQVRLX1JPTEVfU0VQQVJBVE9SOgorICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhIb3Jpem9udGFsUnVsZSI7CisgICAgY2FzZSBBVEtfUk9MRV9TTElERVI6CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFNsaWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9TUElOX0JVVFRP
TjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU3BpbkJ1dHRvbiI7CisgICAgY2FzZSBBVEtf
Uk9MRV9UQUJMRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGFibGUiOworICAgIGNhc2Ug
QVRLX1JPTEVfVEFCTEVfQ0VMTDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2VsbCI7Cisg
ICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9DT0xVTU5fSEVBREVSOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhDb2x1bW5IZWFkZXIiOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XOgorICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3ciOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9X
X0hFQURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93SGVhZGVyIjsKKyAgICBjYXNl
IEFUS19ST0xFX1RPR0dMRV9CVVRUT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvZ2ds
ZUJ1dHRvbiI7CisgICAgY2FzZSBBVEtfUk9MRV9UT09MX0JBUjoKKyAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYVG9vbGJhciI7CisgICAgY2FzZSBBVEtfUk9MRV9UT09MX1RJUDoKKyAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYVXNlckludGVyZmFjZVRvb2x0aXAiOworICAgIGNhc2UgQVRLX1JP
TEVfVFJFRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZSI7CisgICAgY2FzZSBBVEtf
Uk9MRV9UUkVFX1RBQkxFOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlR3JpZCI7Cisg
ICAgY2FzZSBBVEtfUk9MRV9UUkVFX0lURU06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRy
ZWVJdGVtIjsKKyAgICBjYXNlIEFUS19ST0xFX1dJTkRPVzoKKyAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYV2luZG93IjsKKyAgICBjYXNlIEFUS19ST0xFX1VOS05PV046CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWFVua25vd24iOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFdlIHdhbnQg
dG8gZGlzdGluZ3Vpc2ggQVRLX1JPTEVfVU5LTk9XTiBmcm9tIGEga25vd24gQXRrUm9sZSB3aGlj
aAorICAgICAgICAvLyBvdXIgRFJUIGlzbid0IHByb3Blcmx5IGhhbmRsaW5nLgorICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogRklYTUUgbm90IGlkZW50aWZpZWQiOworICAgIH0KK30KKworc3RhdGlj
IGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCit7
CisgICAgU3RyaW5nIHVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0cik7CisKKyAgICAvLyBU
aGUgb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBwYXNzZWQgYWxvbmcgdG8gQVRzIHNv
IHdlIG5lZWQgdG8gYmUKKyAgICAvLyBhYmxlIHRvIHRlc3QgZm9yIHRoZWlyIHByZXNlbmNlIGFu
ZCBkbyBzbyB3aXRob3V0IGNhdXNpbmcgdGVzdCBmYWlsdXJlcy4KKyAgICB1U3RyaW5nLnJlcGxh
Y2Uob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsICI8b2JqPiIpOworCisgICAgLy8gVGhlIHBy
ZXNlbmNlIG9mIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBhY2Nlc3NpYmxlIHRleHQgb2YgYSBzaW5n
bGUgb2JqZWN0CisgICAgLy8gaXMgYXBwcm9wcmlhdGUsIGJ1dCBpdCBtYWtlcyB0ZXN0IHJlc3Vs
dHMgKGVzcGVjaWFsbHkgdGhlIGFjY2Vzc2libGUgdHJlZSkKKyAgICAvLyBoYXJkZXIgdG8gcmVh
ZC4KKyAgICB1U3RyaW5nLnJlcGxhY2UoIlxuIiwgIjxcXG4+Iik7CisKKyAgICByZXR1cm4gZ19z
dHJkdXAodVN0cmluZy51dGY4KCkuZGF0YSgpKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQorICAg
IDogbV9lbGVtZW50KGVsZW1lbnQpCit7CisgICAgaWYgKG1fZWxlbWVudCkKKyAgICAgICAgZ19v
YmplY3RfcmVmKG1fZWxlbWVudCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCisg
ICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQoreworICAgIGlmIChtX2VsZW1lbnQpCisg
ICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudCgpCit7CisgICAgaWYgKG1fZWxlbWVudCkKKyAg
ICAgICAgZ19vYmplY3RfdW5yZWYobV9lbGVtZW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpnZXRMaW5rZWRVSUVsZW1lbnRzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiYgZWxlbWVudHMpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+JikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+JiBjaGlsZHJlbikKK3sKKyAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCog
Y2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSwgaSk7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KGNoaWxkKSk7CisgICAgfQorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENo
aWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudFZl
Y3RvciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7
CisgICAgICAgIGVsZW1lbnRWZWN0b3IuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hp
bGQpKTsKKyAgICB9Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCgp
Cit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJU
KEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25f
cm93cyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpjb2x1bW5Db3VudCgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKKworICAgIHJldHVy
biBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Cit9CisKK2lu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKK3sKKyAgICBpZiAoIW1f
ZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hp
bGRyZW4oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCit7
CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoYXRrX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2lu
dChBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksIHgsIHksIEFUS19YWV9XSU5ET1cpKTsKK30KKwor
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5rZWRVSUVs
ZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgVmVjdG9y
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGNoaWxkcmVuOworICAgIGdldENoaWxkcmVuV2l0aFJh
bmdlKGNoaWxkcmVuLCBpbmRleCwgaW5kZXggKyAxKTsKKworICAgIGlmIChjaGlsZHJlbi5zaXpl
KCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmF0KDApOworCisgICAgcmV0dXJuIDA7
Cit9CisKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4T2ZDaGlsZChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQoreyAKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIDA7Cit9CisKK2djaGFyKiBhdHRyaWJ1dGVTZXRUb1N0cmluZyhBdGtBdHRy
aWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCkKK3sKKyAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19u
ZXcoMCk7CisgICAgZm9yIChHU0xpc3QqIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJp
YnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0KSB7CisgICAgICAgIEF0a0F0dHJp
YnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4oYXR0cmlidXRlcy0+
ZGF0YSk7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoZ19zdHJjb25jYXQo
YXR0cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFsdWUsIE5VTEwpKTsKKyAgICAgICAg
Z19zdHJpbmdfYXBwZW5kKHN0ciwgYXR0cmlidXRlRGF0YS5nZXQoKSk7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVzLT5uZXh0KQorICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgIiwgIik7
CisgICAgfQorCisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQoreworICAg
IGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworICAg
IEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoYXR0cmlidXRlU2V0VG9TdHJpbmcoYXRrX29i
amVjdF9nZXRfYXR0cmlidXRlcyhBVEtfT0JKRUNUKG1fZWxlbWVudCkpKSk7CisgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJpYnV0ZURhdGEuZ2V0KCkpOworfQor
CitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRV
SUVsZW1lbnRzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0aXRsZVVJRWxlbWVudCgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgQXRrUmVsYXRpb25TZXQqIHNldCA9IGF0a19vYmplY3RfcmVmX3JlbGF0aW9u
X3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlmICghc2V0KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEF0a09iamVjdCogdGFyZ2V0ID0gMDsKKyAgICBpbnQgY291bnQgPSBhdGtf
cmVsYXRpb25fc2V0X2dldF9uX3JlbGF0aW9ucyhzZXQpOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgeworICAgICAgICBBdGtSZWxhdGlvbiogcmVsYXRpb24gPSBhdGtfcmVs
YXRpb25fc2V0X2dldF9yZWxhdGlvbihzZXQsIGkpOworICAgICAgICBpZiAoYXRrX3JlbGF0aW9u
X2dldF9yZWxhdGlvbl90eXBlKHJlbGF0aW9uKSA9PSBBVEtfUkVMQVRJT05fTEFCRUxMRURfQlkp
IHsKKyAgICAgICAgICAgIEdQdHJBcnJheSogdGFyZ2V0TGlzdCA9IGF0a19yZWxhdGlvbl9nZXRf
dGFyZ2V0KHJlbGF0aW9uKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXRMaXN0LT5sZW4pCisgICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8QXRrT2JqZWN0Kj4oZ19wdHJfYXJyYXlf
aW5kZXgodGFyZ2V0TGlzdCwgMCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZ19vYmplY3Rf
dW5yZWYoc2V0KTsKKyAgICByZXR1cm4gdGFyZ2V0ID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCh0
YXJnZXQpIDogMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwYXJlbnRFbGVtZW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAg
IEF0a09iamVjdCogcGFyZW50ID0gIGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOworICAgIHJldHVybiBwYXJlbnQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHBh
cmVudCkgOiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDaGlsZHJlbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm9sZSgpCit7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JK
RUNUKG1fZWxlbWVudCkpOworICAgIGlmICghcm9sZSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBTdHJpbmcgcm9sZVN0cmluZyA9IHJv
bGVUb1N0cmluZyhyb2xlKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcocm9sZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCit7CisgICAgcmV0
dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkK
K3sKKyAgICBjb25zdCBnY2hhciogbmFtZSA9IGF0a19vYmplY3RfZ2V0X25hbWUoQVRLX09CSkVD
VChtX2VsZW1lbnQpKTsKKyAgICBHT3duUHRyPGdjaGFyPiBheFRpdGxlKGdfc3RyZHVwX3ByaW50
ZigiQVhUaXRsZTogJXMiLCBuYW1lID8gbmFtZSA6ICIiKSk7CisKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhUaXRsZS5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKK3sKKyAgICBjb25zdCBnY2hh
ciogZGVzY3JpcHRpb24gPSBhdGtfb2JqZWN0X2dldF9kZXNjcmlwdGlvbihBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOworCisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBHT3duUHRyPGdjaGFyPiBheERl
c2MoZ19zdHJkdXBfcHJpbnRmKCJBWERlc2NyaXB0aW9uOiAlcyIsIGRlc2NyaXB0aW9uKSk7CisK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhEZXNjLmdldCgpKTsK
K30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQor
eworICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfVEVYVChtX2VsZW1lbnQpKQorICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGdjaGFy
KiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQobV9lbGVtZW50KSwgMCwgLTEpOwor
ICAgIEdPd25QdHI8Z2NoYXI+IGF4VmFsdWUoZ19zdHJkdXBfcHJpbnRmKCJBWFZhbHVlOiAlcyIs
IHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyh0ZXh0KSkpOworICAgIGdfZnJlZSh0ZXh0KTsK
KworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheFZhbHVlLmdldCgp
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQor
eworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKKworICAgIC8vIEluIEFUSywgdGhlIGRvY3VtZW50IGxhbmd1YWdl
IGlzIGV4cG9zZWQgYXMgdGhlIGRvY3VtZW50J3MgbG9jYWxlLgorICAgIGlmIChhdGtfb2JqZWN0
X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSkgPT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJB
TUUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhnX3N0cmR1
cF9wcmludGYoIkFYTGFuZ3VhZ2U6ICVzIiwgYXRrX2RvY3VtZW50X2dldF9sb2NhbGUoQVRLX0RP
Q1VNRU5UKG1fZWxlbWVudCkpKSk7CisKKyAgICAvLyBGb3IgYWxsIG90aGVyIG9iamVjdHMsIHRo
ZSBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIGFuIEF0a1RleHQgYXR0cmlidXRlLgorICAgIGlmICgh
QVRLX0lTX1RFWFQobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBmb3IgKEdTTGlzdCogdGV4dEF0dHJpYnV0ZXMgPSBh
dGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEFUS19URVhUKG1fZWxlbWVudCkpOyB0ZXh0
QXR0cmlidXRlczsgdGV4dEF0dHJpYnV0ZXMgPSB0ZXh0QXR0cmlidXRlcy0+bmV4dCkgeworICAg
ICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0
ZSo+KHRleHRBdHRyaWJ1dGVzLT5kYXRhKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoYXRrQXR0cmli
dXRlLT5uYW1lLCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9MQU5H
VUFHRSkpKQorICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGdfc3RyZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMiLCBhdGtBdHRyaWJ1dGUtPnZhbHVlKSk7
CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkKK3sKKyAgICBpbnQgeCwg
eTsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVt
ZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKKworICAgIHJldHVybiB4OworfQorCitkb3Vi
bGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSgpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBh
dGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAm
eSwgQVRLX1hZX1NDUkVFTik7CisKKyAgICByZXR1cm4geTsKK30KKworZG91YmxlIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKK3sKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKworICAg
IGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgs
ICZoZWlnaHQpOworCisgICAgcmV0dXJuIHdpZHRoOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aGVpZ2h0KCkKK3sKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKworICAgIGF0
a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZo
ZWlnaHQpOworCisgICAgcmV0dXJuIGhlaWdodDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNsaWNrUG9pbnRYKCkKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGlzIG5vdCBzb21l
dGhpbmcgd2UgaGF2ZSBpbiBBVEsuCisgICAgcmV0dXJuIDAuZjsKK30KKworZG91YmxlIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGlz
IG5vdCBzb21ldGhpbmcgd2UgaGF2ZSBpbiBBVEsuCisgICAgcmV0dXJuIDAuZjsKK30KKworSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiAwOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFs
dWUoKSBjb25zdAoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07CisKKyAg
ICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMC4wZjsKKwor
ICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZh
bHVlKTsKKyAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIDAuMGY7CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Cit9CisKK2Rv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSgpCit7CisgICAgR1ZhbHVlIHZh
bHVlID0geyAwLCB7IHsgMCB9IH0gfTsKKworICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX3Zh
bHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworICAgIGlmICghR19WQUxVRV9IT0xE
U19GTE9BVCgmdmFsdWUpKQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICByZXR1cm4gZ192YWx1
ZV9nZXRfZmxvYXQoJnZhbHVlKTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Om1heFZhbHVlKCkKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OworCisg
ICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisK
KyAgICBhdGtfdmFsdWVfZ2V0X21heGltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2
YWx1ZSk7CisgICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCisgICAgICAgIHJl
dHVybiAwLjBmOworICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUpOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50IGFmdGVyIGl0IGhhcyBiZWVuIGltcGxlbWVudGVkIGlu
IEFUSy4KKyAgICAvLyBTZWU6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODQ1NzYKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVsZW1lbnQg
ZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKK3sKKyAgICBpZiAoIUFUS19JU19PQkpF
Q1QoZWxlbWVudCkpCisgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEF0a1N0
YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRL
X09CSkVDVChlbGVtZW50KSkpOworICAgIHJldHVybiBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0
YXRlKHN0YXRlU2V0LmdldCgpLCBzdGF0ZVR5cGUpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1f
ZWxlbWVudCwgQVRLX1NUQVRFX0VOQUJMRUQpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNQ
cmVzc0FjdGlvblN1cHBvcnRlZCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luY3JlbWVu
dEFjdGlvblN1cHBvcnRlZCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFj
dGlvblN1cHBvcnRlZCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0Cit7CisgICAgaWYg
KCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVm
X3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAgICBnYm9vbGVhbiBpc0ZvY3Vz
ZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RB
VEVfRk9DVVNFRCk7CisKKyAgICByZXR1cm4gaXNGb2N1c2VkOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBjaGVja0Vs
ZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9TRUxFQ1RFRCk7Cit9CisKK2ludCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KyAKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygp
IGNvbnN0Cit7ICAgCisgICAgcmV0dXJuIDA7IAorfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRXhwYW5kZWQoKSBjb25zdAoreworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEF0a1N0YXRlU2V0
PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVD
VChtX2VsZW1lbnQpKSk7CisgICAgZ2Jvb2xlYW4gaXNFeHBhbmRlZCA9IGF0a19zdGF0ZV9zZXRf
Y29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9FWFBBTkRFRCk7CisKKyAg
ICByZXR1cm4gaXNFeHBhbmRlZDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0NoZWNrZWQoKSBjb25zdAoreworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNl
dCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1l
bnQpKSk7CisgICAgZ2Jvb2xlYW4gaXNDaGVja2VkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19z
dGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0NIRUNLRUQpOworCisgICAgcmV0dXJuIGlz
Q2hlY2tlZDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1uSGVhZGVycygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZkNvbHVtbnMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZWaXNpYmxlQ2VsbHMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGUoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIEpTU3Ry
aW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wg
aXNSb3dSYW5nZSkKK3sKKyAgICBHT3duUHRyPGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgi
ezAsIDB9IikpOworCisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOworCisgICAgQVNTRVJUKEFU
S19JU19PQkpFQ1QoZWxlbWVudCkpOworCisgICAgQXRrT2JqZWN0KiBheFRhYmxlID0gYXRrX29i
amVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOworICAgIGlmICghYXhUYWJsZSB8
fCAhQVRLX0lTX1RBQkxFKGF4VGFibGUpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOworCisgICAgLy8gTG9vayBmb3IgdGhl
IGNlbGwgaW4gdGhlIHRhYmxlLgorICAgIGdpbnQgaW5kZXhJblBhcmVudCA9IGF0a19vYmplY3Rf
Z2V0X2luZGV4X2luX3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQpKTsKKyAgICBpZiAoaW5kZXhJ
blBhcmVudCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKworICAgIGludCByb3cgPSAtMTsKKyAgICBpbnQgY29s
dW1uID0gLTE7CisgICAgcm93ID0gYXRrX3RhYmxlX2dldF9yb3dfYXRfaW5kZXgoQVRLX1RBQkxF
KGF4VGFibGUpLCBpbmRleEluUGFyZW50KTsKKyAgICBjb2x1bW4gPSBhdGtfdGFibGVfZ2V0X2Nv
bHVtbl9hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4SW5QYXJlbnQpOworCisgICAg
Ly8gR2V0IHRoZSBhY3R1YWwgdmFsdWVzLCBpZiByb3cgYW5kIGNvbHVtbnMgYXJlIHZhbGlkIHZh
bHVlcy4KKyAgICBpZiAocm93ICE9IC0xICYmIGNvbHVtbiAhPSAtMSkgeworICAgICAgICBpbnQg
YmFzZSA9IDA7CisgICAgICAgIGludCBsZW5ndGggPSAwOworICAgICAgICBpZiAoaXNSb3dSYW5n
ZSkgeworICAgICAgICAgICAgYmFzZSA9IHJvdzsKKyAgICAgICAgICAgIGxlbmd0aCA9IGF0a190
YWJsZV9nZXRfcm93X2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2UgPSBjb2x1bW47CisgICAgICAgICAg
ICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFi
bGUpLCByb3csIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgcmFuZ2VTdHJpbmcuc2V0KGdf
c3RyZHVwX3ByaW50ZigieyVkLCAlZH0iLCBiYXNlLCBsZW5ndGgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwor
fQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlKCkK
K3sKKyAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3Igcm93cy4KKyAgICByZXR1cm4gaW5kZXhSYW5n
ZUluVGFibGUobV9lbGVtZW50LCB0cnVlKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZSgpCit7CisgICAgLy8gUmFuZ2UgaW4gdGFibGUg
Zm9yIGNvbHVtbnMuCisgICAgcmV0dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudCwgZmFs
c2UpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0
aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWdu
ZWQpIAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30gCisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZWRTdHJpbmdSYW5nZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVt
ZW50Rm9yU2VhcmNoUHJlZGljYXRlKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVu
dCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIEpTU3RyaW5nUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdS
ZWYgc2VhcmNoVGV4dCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7
Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2Vs
bEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdykKK3sKKyAgICBp
ZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX1RB
QkxFKG1fZWxlbWVudCkpOworCisgICAgQXRrT2JqZWN0KiBmb3VuZENlbGwgPSBhdGtfdGFibGVf
cmVmX2F0KEFUS19UQUJMRShtX2VsZW1lbnQpLCByb3csIGNvbHVtbik7CisgICAgcmV0dXJuIGZv
dW5kQ2VsbCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoZm91bmRDZWxsKSA6IDA7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2Vs
ZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAg
ICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7CisKKyAgICBTdHJpbmcgYXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1
dGVUb0F0a0F0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7CisKKyAgICBmb3IgKEdTTGlzdCogYXRrQXR0cmlidXRlcyA9IGF0a19vYmplY3RfZ2V0X2F0
dHJpYnV0ZXMoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsgYXRrQXR0cmlidXRlczsgYXRrQXR0cmli
dXRlcyA9IGF0a0F0dHJpYnV0ZXMtPm5leHQpIHsKKyAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtB
dHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihhdGtBdHRyaWJ1dGVzLT5kYXRh
KTsKKyAgICAgICAgaWYgKCFzdHJjbXAoYXRrQXR0cmlidXRlLT5uYW1lLCBhdGtBdHRyaWJ1dGVO
YW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGF0a0F0dHJpYnV0ZS0+dmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitkb3VibGUgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRl
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMC4wZjsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib29sQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYg
YXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZShK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0
ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitzdGF0aWMgdm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVt
ZW50LCBpbnQgZmFjdG9yKQoreworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKEFUS19JU19WQUxVRShlbGVtZW50KSk7CisKKyAgICBHVmFsdWUgY3VycmVu
dFZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShB
VEtfVkFMVUUoZWxlbWVudCksICZjdXJyZW50VmFsdWUpOworCisgICAgR1ZhbHVlIGluY3JlbWVu
dCA9IEdfVkFMVUVfSU5JVDsKKyAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1faW5jcmVtZW50KEFU
S19WQUxVRShlbGVtZW50KSwgJmluY3JlbWVudCk7CisKKyAgICBHVmFsdWUgbmV3VmFsdWUgPSBH
X1ZBTFVFX0lOSVQ7CisgICAgZ192YWx1ZV9pbml0KCZuZXdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsK
KworICAgIGdfdmFsdWVfc2V0X2Zsb2F0KCZuZXdWYWx1ZSwgZ192YWx1ZV9nZXRfZmxvYXQoJmN1
cnJlbnRWYWx1ZSkgKyBmYWN0b3IgKiBnX3ZhbHVlX2dldF9mbG9hdCgmaW5jcmVtZW50KSk7Cisg
ICAgYXRrX3ZhbHVlX3NldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJm5ld1Zh
bHVlKTsKKworICAgIGdfdmFsdWVfdW5zZXQoJm5ld1ZhbHVlKTsKKyAgICBnX3ZhbHVlX3Vuc2V0
KCZpbmNyZW1lbnQpOworICAgIGdfdmFsdWVfdW5zZXQoJmN1cnJlbnRWYWx1ZSk7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkKK3sKKyAgICBhbHRlckN1cnJl
bnRWYWx1ZShtX2VsZW1lbnQsIDEpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRlY3JlbWVudCgpCit7CisgICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAtMSk7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQoreworICAgIGlmICghbV9l
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQpKTsKKworICAgIGlmICghQVRLX0lTX0FDVElPTihtX2VsZW1lbnQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBPbmx5IG9uZSBhY3Rpb24gcGVyIG9iamVjdCBpcyBzdXBwb3J0ZWQg
c28gZmFyLgorICAgIGF0a19hY3Rpb25fZG9fYWN0aW9uKEFUS19BQ1RJT04obV9lbGVtZW50KSwg
MCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2hvd01lbnUoKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQorewor
ICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJl
dHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkUm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsK
K30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dB
dEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZEJ5Um93KCkKK3sK
KyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cisg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQoreworICAg
IEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQp
KTsKKyAgICBpZiAocm9sZSAhPSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRrX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFs
dWUoQVRLX0RPQ1VNRU5UKG1fZWxlbWVudCksICJFbmNvZGluZyIpKTsKK30KKworSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkoKQoreworICAgIEF0a1JvbGUg
cm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICBp
ZiAocm9sZSAhPSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKKyAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoYXRrX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWUoQVRLX0RP
Q1VNRU5UKG1fZWxlbWVudCksICJVUkkiKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnVybCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0
aW9uQ2FsbGJhY2spCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIUFUS19JU19P
QkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxB
dGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0
KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIGdib29sZWFuIGlzRm9jdXNhYmxlID0gYXRr
X3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VT
QUJMRSk7CisKKyAgICByZXR1cm4gaXNGb2N1c2FibGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tFbGVt
ZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVfU0VMRUNUQUJMRSk7Cit9CisKK2Jvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAoreworICAgIHJl
dHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9NVUxUSVNFTEVDVEFC
TEUpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25B
Y3RpdmUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzSWdub3JlZCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCgpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0
aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9j
dXMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xv
YmFsUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyR3RrLmNwcAppbmRleCA3MGYwODFhLi44NDhiYWExIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5j
cHAKQEAgLTM3LDQwICszNyw2IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgogI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAotc3RhdGljIGJvb2wgbG9nZ2luZ0FjY2Vzc2li
aWxpdHlFdmVudHMgPSBmYWxzZTsKLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcigpCi17Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKLXsKLSAg
ICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRG
b2N1c2VkQWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKLSAgICBpZiAoIWFjY2Vzc2libGUp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
YWNjZXNzaWJsZSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKLXsKLSAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxlRWxlbWVudChtYWluRnJh
bWUpOwotICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKLX0KLQogc3RhdGljIEF0a09i
amVjdCogY2hpbGRFbGVtZW50QnlJZChBdGtPYmplY3QqIHBhcmVudCwgY29uc3QgY2hhciogaWQp
CiB7CiAgICAgaWYgKCFBVEtfSVNfT0JKRUNUKHBhcmVudCkpCkBAIC05Niw2ICs2MiwyNCBAQCBz
dGF0aWMgQXRrT2JqZWN0KiBjaGlsZEVsZW1lbnRCeUlkKEF0a09iamVjdCogcGFyZW50LCBjb25z
dCBjaGFyKiBpZCkKICAgICByZXR1cm4gMDsKIH0KIAorQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQoKQoreworICAgIEF0a09iamVj
dCogYWNjZXNzaWJsZSA9ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldEZvY3VzZWRBY2Nl
c3NpYmxlRWxlbWVudChtYWluRnJhbWUpOworICAgIGlmICghYWNjZXNzaWJsZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxl
KTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQoKQoreworICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9IER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7CisgICAg
aWYgKCFhY2Nlc3NpYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOworfQorCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdS
ZWYgaWQpCiB7CiAgICAgQXRrT2JqZWN0KiByb290ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpnZXRSb290QWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKQEAgLTExMywzOSArOTcsMyBA
QCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZQogICAgIHJldHVybiAwOwogCiB9Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKGJvb2wpCi17Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKGJv
b2wpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1ZhbHVlQ2hh
bmdlRXZlbnRzKGJvb2wpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNl
dExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKQotewot
ICAgIGlmIChsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzID09IGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZl
bnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWxvZ0FjY2Vzc2liaWxpdHlFdmVudHMp
IHsKLSAgICAgICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLSAgICAgICAg
bG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7Ci0gICAgbG9nZ2luZ0Fj
Y2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcAppbmRleCA0YWI5OTk1Li4zMGY3YjY0IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dEd0ay5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRHdGsuY3BwCkBAIC0zNyw0MDggKzM3LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi1zdGF0
aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCi17Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0
cmluZ1NpemUoYXR0cmlidXRlKTsKLSAgICBHT3duUHRyPGdjaGFyPiBidWZmZXIoc3RhdGljX2Nh
c3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwotICAgIEpTU3RyaW5nR2V0VVRGOENT
dHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotCi0gICAgU3RyaW5n
IGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmdldCgpKTsKLSAgICBp
ZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNlaG9sZGVyVmFsdWUiKQotICAgICAgICByZXR1
cm4gInBsYWNlaG9sZGVyLXRleHQiOwotCi0gICAgcmV0dXJuICIiOwotfQotCi1zdGF0aWMgaW5s
aW5lIFN0cmluZyByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQotewotICAgIHN3aXRjaCAocm9s
ZSkgewotICAgIGNhc2UgQVRLX1JPTEVfQUxFUlQ6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WEFsZXJ0IjsKLSAgICBjYXNlIEFUS19ST0xFX0NBTlZBUzoKLSAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYQ2FudmFzIjsKLSAgICBjYXNlIEFUS19ST0xFX0NIRUNLX0JPWDoKLSAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYQ2hlY2tCb3giOwotICAgIGNhc2UgQVRLX1JPTEVfQ09MVU1OX0hFQURF
UjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29sdW1uSGVhZGVyIjsKLSAgICBjYXNlIEFU
S19ST0xFX0NPTUJPX0JPWDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29tYm9Cb3giOwot
ICAgIGNhc2UgQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWFdlYkFyZWEiOwotICAgIGNhc2UgQVRLX1JPTEVfRU5UUlk6Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWFRleHRGaWVsZCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9GT09URVI6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWEZvb3RlciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9GT1JNOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhGb3JtIjsKLSAgICBjYXNlIEFUS19ST0xFX0dST1VQSU5H
OgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhHcm91cCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9I
RUFESU5HOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhIZWFkaW5nIjsKLSAgICBjYXNlIEFU
S19ST0xFX0lNQUdFOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhJbWFnZSI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9JTUFHRV9NQVA6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEltYWdlTWFw
IjsKLSAgICBjYXNlIEFUS19ST0xFX0xBQkVMOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhM
YWJlbCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MSU5LOgotICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhMaW5rIjsKLSAgICBjYXNlIEFUS19ST0xFX0xJU1Q6Ci0gICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWExpc3QiOwotICAgIGNhc2UgQVRLX1JPTEVfTElTVF9CT1g6Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWExpc3RCb3giOwotICAgIGNhc2UgQVRLX1JPTEVfTElTVF9JVEVNOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhMaXN0SXRlbSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9NRU5VOgot
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51IjsKLSAgICBjYXNlIEFUS19ST0xFX01FTlVf
QkFSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51QmFyIjsKLSAgICBjYXNlIEFUS19S
T0xFX01FTlVfSVRFTToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudUl0ZW0iOwotICAg
IGNhc2UgQVRLX1JPTEVfUEFHRV9UQUI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYiI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RBQl9MSVNUOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhUYWJHcm91cCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQU5FTDoKLSAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYR3JvdXAiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFSQUdSQVBIOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhQYXJhZ3JhcGgiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFTU1dP
UkRfVEVYVDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUGFzc3dvcmRGaWVsZCI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9QVVNIX0JVVFRPTjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQnV0
dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1JBRElPX0JVVFRPTjoKLSAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYUmFkaW9CdXR0b24iOwotICAgIGNhc2UgQVRLX1JPTEVfUk9XX0hFQURFUjoKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93SGVhZGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1JV
TEVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSdWxlciI7Ci0gICAgY2FzZSBBVEtfUk9M
RV9TQ1JPTExfQkFSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTY3JvbGxCYXIiOwotICAg
IGNhc2UgQVRLX1JPTEVfU0NST0xMX1BBTkU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNj
cm9sbEFyZWEiOwotICAgIGNhc2UgQVRLX1JPTEVfU0VDVElPTjoKLSAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYRGl2IjsKLSAgICBjYXNlIEFUS19ST0xFX1NFUEFSQVRPUjoKLSAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYSG9yaXpvbnRhbFJ1bGUiOwotICAgIGNhc2UgQVRLX1JPTEVfU0xJREVS
OgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTbGlkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVf
U1BJTl9CVVRUT046Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNwaW5CdXR0b24iOwotICAg
IGNhc2UgQVRLX1JPTEVfVEFCTEU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRhYmxlIjsK
LSAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NFTEw6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WENlbGwiOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfQ09MVU1OX0hFQURFUjoKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYQ29sdW1uSGVhZGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxF
X1JPVzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93IjsKLSAgICBjYXNlIEFUS19ST0xF
X1RBQkxFX1JPV19IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvd0hlYWRlciI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9UT0dHTEVfQlVUVE9OOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhUb2dnbGVCdXR0b24iOwotICAgIGNhc2UgQVRLX1JPTEVfVE9PTF9CQVI6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFRvb2xiYXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVE9PTF9USVA6
Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFVzZXJJbnRlcmZhY2VUb29sdGlwIjsKLSAgICBj
YXNlIEFUS19ST0xFX1RSRUU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRyZWUiOwotICAg
IGNhc2UgQVRLX1JPTEVfVFJFRV9UQUJMRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJl
ZUdyaWQiOwotICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9JVEVNOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhUcmVlSXRlbSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9XSU5ET1c6Ci0gICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFdpbmRvdyI7Ci0gICAgY2FzZSBBVEtfUk9MRV9VTktOT1dOOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhVbmtub3duIjsKLSAgICBkZWZhdWx0OgotICAgICAgICAv
LyBXZSB3YW50IHRvIGRpc3Rpbmd1aXNoIEFUS19ST0xFX1VOS05PV04gZnJvbSBhIGtub3duIEF0
a1JvbGUgd2hpY2gKLSAgICAgICAgLy8gb3VyIERSVCBpc24ndCBwcm9wZXJseSBoYW5kbGluZy4K
LSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEZJWE1FIG5vdCBpZGVudGlmaWVkIjsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhnY2hh
ciogc3RyKQotewotICAgIFN0cmluZyB1U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdHIpOwot
Ci0gICAgLy8gVGhlIG9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgcGFzc2VkIGFsb25n
IHRvIEFUcyBzbyB3ZSBuZWVkIHRvIGJlCi0gICAgLy8gYWJsZSB0byB0ZXN0IGZvciB0aGVpciBw
cmVzZW5jZSBhbmQgZG8gc28gd2l0aG91dCBjYXVzaW5nIHRlc3QgZmFpbHVyZXMuCi0gICAgdVN0
cmluZy5yZXBsYWNlKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAiPG9iaj4iKTsKLQotICAg
IC8vIFRoZSBwcmVzZW5jZSBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gYWNjZXNzaWJsZSB0ZXh0
IG9mIGEgc2luZ2xlIG9iamVjdAotICAgIC8vIGlzIGFwcHJvcHJpYXRlLCBidXQgaXQgbWFrZXMg
dGVzdCByZXN1bHRzIChlc3BlY2lhbGx5IHRoZSBhY2Nlc3NpYmxlIHRyZWUpCi0gICAgLy8gaGFy
ZGVyIHRvIHJlYWQuCi0gICAgdVN0cmluZy5yZXBsYWNlKCJcbiIsICI8XFxuPiIpOwotCi0gICAg
cmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxl
bWVudCkKLSAgICA6IG1fZWxlbWVudChlbGVtZW50KQotewotICAgIGlmIChtX2VsZW1lbnQpCi0g
ICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQm
IG90aGVyKQotICAgIDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLXsKLSAgICBpZiAobV9l
bGVtZW50KQotICAgICAgICBnX29iamVjdF9yZWYobV9lbGVtZW50KTsKLX0KLQotQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQotewotICAgIGlmIChtX2Vs
ZW1lbnQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZWxlbWVudCk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0TGlua2VkVUlFbGVtZW50cyhWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4mIGVsZW1lbnRzKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXREb2N1bWVudExpbmtzKFZlY3RvcjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuKFZlY3RvcjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50PiYgY2hpbGRyZW4pCi17Ci0gICAgaW50IGNvdW50ID0gY2hpbGRyZW5D
b3VudCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBB
dGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JK
RUNUKG1fZWxlbWVudCksIGkpOwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudChjaGlsZCkpOwotICAgIH0KLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4m
IGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotICAgICAgICBBdGtPYmplY3Qq
IGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxl
bWVudCksIGkpOwotICAgICAgICBlbGVtZW50VmVjdG9yLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50KGNoaWxkKSk7Ci0gICAgfQotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm93Q291bnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7Ci0KLSAgICByZXR1cm4gYXRrX3Rh
YmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxFKG1fZWxlbWVudCkpOwotfQotCi1pbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7Ci0K
LSAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX2NvbHVtbnMoQVRLX1RBQkxFKG1fZWxlbWVudCkp
OwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCgpCi17Ci0g
ICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19J
U19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQoaW50IHgs
IGludCB5KQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGF0a19jb21wb25lbnRfcmVmX2FjY2Vzc2li
bGVfYXRfcG9pbnQoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCB4LCB5LCBBVEtfWFlfV0lORE9X
KSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bGlua2VkVUlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewot
ICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBjaGlsZHJlbjsKLSAgICBnZXRDaGls
ZHJlbldpdGhSYW5nZShjaGlsZHJlbiwgaW5kZXgsIGluZGV4ICsgMSk7Ci0KLSAgICBpZiAoY2hp
bGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBjaGlsZHJlbi5hdCgwKTsKLQotICAg
IHJldHVybiAwOwotfQotCi11bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleE9m
Q2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKLXsgCi0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1nY2hhciogYXR0cmlidXRlU2V0VG9TdHJp
bmcoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQpCi17Ci0gICAgR1N0cmluZyogc3RyID0g
Z19zdHJpbmdfbmV3KDApOwotICAgIGZvciAoR1NMaXN0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRl
U2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkgewotICAgICAg
ICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0
dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGdf
c3RyY29uY2F0KGF0dHJpYnV0ZS0+bmFtZSwgIjoiLCBhdHRyaWJ1dGUtPnZhbHVlLCBOVUxMKSk7
Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIGF0dHJpYnV0ZURhdGEuZ2V0KCkpOwotICAg
ICAgICBpZiAoYXR0cmlidXRlcy0+bmV4dCkKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChz
dHIsICIsICIpOwotICAgIH0KLQotICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0Up
OwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVz
KCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1l
bnQpKTsKLSAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGF0dHJpYnV0ZVNldFRvU3Ry
aW5nKGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoQVRLX09CSkVDVChtX2VsZW1lbnQpKSkpOwot
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVEYXRhLmdl
dCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mTGlua2VkVUlFbGVtZW50cygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEF0a1JlbGF0aW9uU2V0KiBzZXQgPSBhdGtfb2JqZWN0X3Jl
Zl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBpZiAoIXNldCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdGtPYmplY3QqIHRhcmdldCA9IDA7Ci0gICAgaW50IGNv
dW50ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfbl9yZWxhdGlvbnMoc2V0KTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgQXRrUmVsYXRpb24qIHJlbGF0aW9u
ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRpb24oc2V0LCBpKTsKLSAgICAgICAgaWYgKGF0
a19yZWxhdGlvbl9nZXRfcmVsYXRpb25fdHlwZShyZWxhdGlvbikgPT0gQVRLX1JFTEFUSU9OX0xB
QkVMTEVEX0JZKSB7Ci0gICAgICAgICAgICBHUHRyQXJyYXkqIHRhcmdldExpc3QgPSBhdGtfcmVs
YXRpb25fZ2V0X3RhcmdldChyZWxhdGlvbik7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0TGlzdC0+
bGVuKQotICAgICAgICAgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdf
cHRyX2FycmF5X2luZGV4KHRhcmdldExpc3QsIDApKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGdfb2JqZWN0X3VucmVmKHNldCk7Ci0gICAgcmV0dXJuIHRhcmdldCA/IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQodGFyZ2V0KSA6IDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50
KSk7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmVudCA9ICBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRL
X09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICByZXR1cm4gcGFyZW50ID8gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudChwYXJlbnQpIDogMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5h
bWVzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJvbGUoKQotewotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3Jv
bGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBpZiAoIXJvbGUpCi0gICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgU3RyaW5nIHJvbGVT
dHJpbmcgPSByb2xlVG9TdHJpbmcocm9sZSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHJvbGVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUoKQotewotICAgIHJldHVybiAwOwotfQot
Ci1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24oKQot
ewotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0aXRsZSgpCi17Ci0gICAgY29uc3QgZ2NoYXIqIG5hbWUgPSBhdGtfb2JqZWN0X2dldF9uYW1l
KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgR093blB0cjxnY2hhcj4gYXhUaXRsZShnX3N0
cmR1cF9wcmludGYoIkFYVGl0bGU6ICVzIiwgbmFtZSA/IG5hbWUgOiAiIikpOwotCi0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4VGl0bGUuZ2V0KCkpOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCi17Ci0gICAg
Y29uc3QgZ2NoYXIqIGRlc2NyaXB0aW9uID0gYXRrX29iamVjdF9nZXRfZGVzY3JpcHRpb24oQVRL
X09CSkVDVChtX2VsZW1lbnQpKTsKLQotICAgIGlmICghZGVzY3JpcHRpb24pCi0gICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgR093blB0cjxn
Y2hhcj4gYXhEZXNjKGdfc3RyZHVwX3ByaW50ZigiQVhEZXNjcmlwdGlvbjogJXMiLCBkZXNjcmlw
dGlvbikpOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4RGVz
Yy5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z1ZhbHVlKCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX1RFWFQobV9lbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0K
LSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKG1fZWxlbWVudCks
IDAsIC0xKTsKLSAgICBHT3duUHRyPGdjaGFyPiBheFZhbHVlKGdfc3RyZHVwX3ByaW50ZigiQVhW
YWx1ZTogJXMiLCByZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3VsdHModGV4dCkpKTsKLSAgICBnX2Zy
ZWUodGV4dCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhW
YWx1ZS5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxh
bmd1YWdlKCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICAvLyBJbiBBVEssIHRoZSBkb2N1bWVu
dCBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIHRoZSBkb2N1bWVudCdzIGxvY2FsZS4KLSAgICBpZiAo
YXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpID09IEFUS19ST0xFX0RP
Q1VNRU5UX0ZSQU1FKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdlOiAlcyIsIGF0a19kb2N1bWVudF9nZXRfbG9j
YWxlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpKSkpOwotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBv
YmplY3RzLCB0aGUgbGFuZ3VhZ2UgaXMgZXhwb3NlZCBhcyBhbiBBdGtUZXh0IGF0dHJpYnV0ZS4K
LSAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgZm9yIChHU0xpc3QqIHRleHRBdHRy
aWJ1dGVzID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBVEtfVEVYVChtX2VsZW1l
bnQpKTsgdGV4dEF0dHJpYnV0ZXM7IHRleHRBdHRyaWJ1dGVzID0gdGV4dEF0dHJpYnV0ZXMtPm5l
eHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxB
dGtBdHRyaWJ1dGUqPih0ZXh0QXR0cmlidXRlcy0+ZGF0YSk7Ci0gICAgICAgIGlmICghc3RyY21w
KGF0a0F0dHJpYnV0ZS0+bmFtZSwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhU
X0FUVFJfTEFOR1VBR0UpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhnX3N0cmR1cF9wcmludGYoIkFYTGFuZ3VhZ2U6ICVzIiwgYXRrQXR0cmlidXRl
LT52YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOwotfQotCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxw
VGV4dCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2VsZW1lbnQpCkBAIC00NTAsNjA5ICs0OCwzIEBA
IEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKICAg
ICBHT3duUHRyPGdjaGFyPiBheEhlbHBUZXh0KGdfc3RyZHVwX3ByaW50ZigiQVhIZWxwOiAlcyIs
IGhlbHBUZXh0LmRhdGEoKSkpOwogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhheEhlbHBUZXh0LmdldCgpKTsKIH0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OngoKQotewotICAgIGludCB4LCB5OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRp
b24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOwotCi0g
ICAgcmV0dXJuIHg7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKLXsK
LSAgICBpbnQgeCwgeTsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01Q
T05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKLQotICAgIHJldHVybiB5
OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQotewotICAgIGlu
dCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9O
RU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7Ci0KLSAgICByZXR1cm4gd2lkdGg7Ci19
Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQoKQotewotICAgIGludCB3
aWR0aCwgaGVpZ2h0OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5U
KG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7Ci0KLSAgICByZXR1cm4gaGVpZ2h0OwotfQot
Ci1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFgoKQotewotICAgIC8v
IE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBoYXZlIGluIEFUSy4KLSAgICByZXR1cm4g
MC5mOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkoKQot
ewotICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBoYXZlIGluIEFUSy4KLSAg
ICByZXR1cm4gMC5mOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpv
cmllbnRhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgR1ZhbHVlIHZhbHVlID0g
eyAwLCB7IHsgMCB9IH0gfTsKLQotICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCi0g
ICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFU
S19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwotICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9B
VCgmdmFsdWUpKQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICByZXR1cm4gZ192YWx1ZV9nZXRf
ZmxvYXQoJnZhbHVlKTsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZh
bHVlKCkKLXsKLSAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OwotCi0gICAgaWYg
KCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBh
dGtfdmFsdWVfZ2V0X21pbmltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7
Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiAw
LjBmOwotICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUpOwotfQotCi1kb3VibGUg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQotewotICAgIEdWYWx1ZSB2YWx1ZSA9
IHsgMCwgeyB7IDAgfSB9IH07Ci0KLSAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQot
ICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIGF0a192YWx1ZV9nZXRfbWF4aW11bV92YWx1ZShB
VEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKLSAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxP
QVQoJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgcmV0dXJuIGdfdmFsdWVfZ2V0
X2Zsb2F0KCZ2YWx1ZSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnZhbHVlRGVzY3JpcHRpb24oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgYWZ0ZXIgaXQg
aGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4gQVRLLgotICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6aWxs
YS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDU3NgotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1zdGF0aWMgYm9vbCBjaGVja0VsZW1lbnRT
dGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBBdGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQot
ewotICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKLSAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19v
YmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKGVsZW1lbnQpKSk7Ci0gICAgcmV0dXJuIGF0
a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIHN0YXRlVHlwZSk7Ci19
Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkKCkKLXsKLSAgICByZXR1
cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVfRU5BQkxFRCk7Ci19Ci0K
LWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkKCkKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkKCkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1
c2VkKCkgY29uc3QKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBh
ZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkp
OwotICAgIGdib29sZWFuIGlzRm9jdXNlZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUo
c3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0VEKTsKLQotICAgIHJldHVybiBpc0ZvY3Vz
ZWQ7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX1NF
TEVDVEVEKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExl
dmVsKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotIAotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKLXsgICAKLSAgICByZXR1cm4gMDsgCi19Ci0K
LWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3Rf
cmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVhbiBpc0V4
cGFuZGVkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRL
X1NUQVRFX0VYUEFOREVEKTsKLQotICAgIHJldHVybiBpc0V4cGFuZGVkOwotfQotCi1ib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtf
SVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQ
dHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRl
X3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVhbiBpc0NoZWNrZWQgPSBh
dGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfQ0hF
Q0tFRCk7Ci0KLSAgICByZXR1cm4gaXNDaGVja2VkOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZlJvd0hlYWRlcnMoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZSb3dzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZI
ZWFkZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmluZGV4SW5UYWJsZSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biAwOwotfQotCi1zdGF0aWMgSlNTdHJpbmdSZWYgaW5kZXhSYW5nZUluVGFibGUoUGxhdGZvcm1V
SUVsZW1lbnQgZWxlbWVudCwgYm9vbCBpc1Jvd1JhbmdlKQotewotICAgIEdPd25QdHI8Z2NoYXI+
IHJhbmdlU3RyaW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7Ci0KLSAgICBpZiAoIWVsZW1lbnQpCi0g
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5n
ZXQoKSk7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChlbGVtZW50KSk7Ci0KLSAgICBBdGtP
YmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50
KSk7Ci0gICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNfVEFCTEUoYXhUYWJsZSkpCi0gICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7
Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0aGUgdGFibGUuCi0gICAgZ2ludCBpbmRl
eEluUGFyZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KEFUS19PQkpFQ1QoZWxl
bWVudCkpOwotICAgIGlmIChpbmRleEluUGFyZW50ID09IC0xKQotICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwotCi0gICAgaW50
IHJvdyA9IC0xOwotICAgIGludCBjb2x1bW4gPSAtMTsKLSAgICByb3cgPSBhdGtfdGFibGVfZ2V0
X3Jvd19hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4SW5QYXJlbnQpOwotICAgIGNv
bHVtbiA9IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwg
aW5kZXhJblBhcmVudCk7Ci0KLSAgICAvLyBHZXQgdGhlIGFjdHVhbCB2YWx1ZXMsIGlmIHJvdyBh
bmQgY29sdW1ucyBhcmUgdmFsaWQgdmFsdWVzLgotICAgIGlmIChyb3cgIT0gLTEgJiYgY29sdW1u
ICE9IC0xKSB7Ci0gICAgICAgIGludCBiYXNlID0gMDsKLSAgICAgICAgaW50IGxlbmd0aCA9IDA7
Ci0gICAgICAgIGlmIChpc1Jvd1JhbmdlKSB7Ci0gICAgICAgICAgICBiYXNlID0gcm93OwotICAg
ICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0KEFUS19UQUJMRShh
eFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFz
ZSA9IGNvbHVtbjsKLSAgICAgICAgICAgIGxlbmd0aCA9IGF0a190YWJsZV9nZXRfY29sdW1uX2V4
dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsKLSAgICAgICAgfQotICAg
ICAgICByYW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJpbnRmKCJ7JWQsICVkfSIsIGJhc2UsIGxl
bmd0aCkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQotewotICAgIC8vIFJhbmdlIGluIHRhYmxlIGZvciByb3dz
LgotICAgIHJldHVybiBpbmRleFJhbmdlSW5UYWJsZShtX2VsZW1lbnQsIHRydWUpOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKCkKLXsK
LSAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3IgY29sdW1ucy4KLSAgICByZXR1cm4gaW5kZXhSYW5n
ZUluVGFibGUobV9lbGVtZW50LCBmYWxzZSk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpsaW5lRm9ySW5kZXgoaW50KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBy
ZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRz
Rm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Zv
clJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAot
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfSAKLQotSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdl
KHVuc2lnbmVkLCB1bnNpZ25lZCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ1JhbmdlSXNNaXNzcGVsbGVkKHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNTdHJpbmdS
ZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0KQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwg
dW5zaWduZWQgcm93KQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7Ci0KLSAgICBBdGtPYmplY3Qq
IGZvdW5kQ2VsbCA9IGF0a190YWJsZV9yZWZfYXQoQVRLX1RBQkxFKG1fZWxlbWVudCksIHJvdywg
Y29sdW1uKTsKLSAgICByZXR1cm4gZm91bmRDZWxsID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChm
b3VuZENlbGwpIDogMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2VsZWN0ZWRUZXh0UmFuZ2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJp
bmdSZWYgYXR0cmlidXRlKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIFN0cmluZyBhdGtBdHRy
aWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0gICAg
aWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIGZvciAoR1NMaXN0KiBhdGtBdHRyaWJ1
dGVzID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhBVEtfT0JKRUNUKG1fZWxlbWVudCkpOyBh
dGtBdHRyaWJ1dGVzOyBhdGtBdHRyaWJ1dGVzID0gYXRrQXR0cmlidXRlcy0+bmV4dCkgewotICAg
ICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0
ZSo+KGF0a0F0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1
dGUtPm5hbWUsIGF0a0F0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRrQXR0cmlidXRlLT52YWx1ZSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1
ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiAwLjBmOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRy
aWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsdGVyQ3VycmVudFZhbHVl
KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGludCBmYWN0b3IpCi17Ci0gICAgaWYgKCFlbGVt
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoQVRLX0lTX1ZBTFVFKGVsZW1lbnQp
KTsKLQotICAgIEdWYWx1ZSBjdXJyZW50VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgYXRrX3Zh
bHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJmN1cnJlbnRWYWx1ZSk7
Ci0KLSAgICBHVmFsdWUgaW5jcmVtZW50ID0gR19WQUxVRV9JTklUOwotICAgIGF0a192YWx1ZV9n
ZXRfbWluaW11bV9pbmNyZW1lbnQoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmaW5jcmVtZW50KTsKLQot
ICAgIEdWYWx1ZSBuZXdWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgICBnX3ZhbHVlX2luaXQoJm5l
d1ZhbHVlLCBHX1RZUEVfRkxPQVQpOwotCi0gICAgZ192YWx1ZV9zZXRfZmxvYXQoJm5ld1ZhbHVl
LCBnX3ZhbHVlX2dldF9mbG9hdCgmY3VycmVudFZhbHVlKSArIGZhY3RvciAqIGdfdmFsdWVfZ2V0
X2Zsb2F0KCZpbmNyZW1lbnQpKTsKLSAgICBhdGtfdmFsdWVfc2V0X2N1cnJlbnRfdmFsdWUoQVRL
X1ZBTFVFKGVsZW1lbnQpLCAmbmV3VmFsdWUpOwotCi0gICAgZ192YWx1ZV91bnNldCgmbmV3VmFs
dWUpOwotICAgIGdfdmFsdWVfdW5zZXQoJmluY3JlbWVudCk7Ci0gICAgZ192YWx1ZV91bnNldCgm
Y3VycmVudFZhbHVlKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1l
bnQoKQotewotICAgIGFsdGVyQ3VycmVudFZhbHVlKG1fZWxlbWVudCwgMSk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50KCkKLXsKLSAgICBhbHRlckN1cnJlbnRW
YWx1ZShtX2VsZW1lbnQsIC0xKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpw
cmVzcygpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwotCi0gICAgaWYgKCFBVEtfSVNfQUNUSU9O
KG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9ubHkgb25lIGFjdGlvbiBw
ZXIgb2JqZWN0IGlzIHN1cHBvcnRlZCBzbyBmYXIuCi0gICAgYXRrX2FjdGlvbl9kb19hY3Rpb24o
QVRLX0FDVElPTihtX2VsZW1lbnQpLCAwKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzaG93TWVudSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi1BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5k
ZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCh1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgodW5z
aWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4KHVuc2lnbmVkIGlu
ZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZGlzY2xvc2VkQnlSb3coKQotewotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9j
dW1lbnRFbmNvZGluZygpCi17Ci0gICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9s
ZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VN
RU5UX0ZSQU1FKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9j
dW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSwgIkVuY29k
aW5nIikpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVu
dFVSSSgpCi17Ci0gICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JK
RUNUKG1fZWxlbWVudCkpOwotICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1F
KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQot
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0
X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSwgIlVSSSIpKTsKLX0KLQot
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25z
dAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihh
dGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Ci0gICAgZ2Jv
b2xlYW4gaXNGb2N1c2FibGUgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0
LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNBQkxFKTsKLQotICAgIHJldHVybiBpc0ZvY3VzYWJsZTsK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAot
ewotICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9TRUxF
Q1RBQkxFKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0
YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwg
QVRLX1NUQVRFX01VTFRJU0VMRUNUQUJMRSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc1Zpc2libGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3Jl
ZW4oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VG
b2N1cygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
ZW1vdmVTZWxlY3Rpb24oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xs
VG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0gYi9U
b29scy9HTlVtYWtlZmlsZS5hbQppbmRleCA0M2E0YWJjLi5jYWRhMDE5IDEwMDY0NAotLS0gYS9U
b29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtlZmlsZS5hbQpAQCAtMTQ2LDYg
KzE0Niw4IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVt
cFJlbmRlclRyZWUvY29uZmlnLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3Np
YmlsaXR5Q2FsbGJhY2tzLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmls
aXR5Q2FsbGJhY2tzQXRrLmNwcCBcCisgICAgCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAorCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fp
cm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fp
cm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185433</attachid>
            <date>2013-01-30 01:30:39 -0800</date>
            <delta_ts>2013-02-04 03:53:11 -0800</delta_ts>
            <desc>[GTK][EFL] Isolates GTK&apos;s DumpRenderTree code.</desc>
            <filename>a11y-share-a11y-callbacks.patch</filename>
            <type>text/plain</type>
            <size>22448</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGMx
NmUzLi42OThkMmZkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMDEtMjUgIEtyenlzenRvZiBDemVjaCAgPGsu
Y3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS11bRUZMXSBTaGFyZXMgV2ViS2l0LUdU
SydzIER1bXBSZW5kZXJUcmVlIGFjY2Vzc2liaWxpdHkgaW1wbGVtZW50YXRpb24gd2l0aCBvdGhl
ciBXZWJraXQgcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNTAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaDogUmVu
YW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
LmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NB
dGsuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxp
dHlDYWxsYmFja3MuY3BwLgorICAgICAgICAocHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQpOgorICAg
ICAgICAoYXhPYmplY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKGNvbm5lY3RBY2Nlc3NpYmls
aXR5Q2FsbGJhY2tzKToKKyAgICAgICAgKGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6IEFkZHMgQVRL
IGhlYWRlcnMsIGxpYnJhcmllcywgbmV3IHNvdXJjZXMuCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IEFkZHMgcmVuYW1lZCBzb3VyY2VzLgorCiAyMDEzLTAxLTIzICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2V0IHN2bjplb2wtc3R5bGUg
dG8gQ1JMRiBvbiBXaW5kb3dzIC5zbG4gZmlsZXMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43MjI1NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApAQCAtMCwwICsxLDM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzX2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eUNhbGxiYWNrc19oCisKK3ZvaWQgY29ubmVjdEFj
Y2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKK3ZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxs
YmFja3MoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOGVlMTg2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJ
VFkpCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJXZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZUNocm9tZS5oIgorI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbC5oIgorI2VuZGlmCisKK3N0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAw
Oworc3RhdGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWludCBh
Y3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IGNoaWxk
cmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdlZExp
c3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQg
PSAwOworCitzdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmplY3QqIGFj
Y2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hhciogc2lnbmFsVmFs
dWUpCit7CisgICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCBzaWduYWxz
LCBhcyB0aGUgQXRrT2JqZWN0CisgICAgLy8gYXNzb2NpYXRlZCB0byB0aGVtIHdpbGwgbm90IGJl
IHZhbGlkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KKyAgICBpZiAoIXNpZ25hbE5hbWUgfHwgIWdf
c3RyY21wMChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBnY2hhciogb2JqZWN0TmFtZSA9IGF0a19v
YmplY3RfZ2V0X25hbWUoYWNjZXNzaWJsZSk7CisgICAgQXRrUm9sZSBvYmplY3RSb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKKworICAgIC8vIFRyeSB0byBhbHdheXMgcHJv
dmlkZSBhIG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgorICAgIGlmICghb2JqZWN0
TmFtZSB8fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQorICAgICAgICBvYmplY3ROYW1lID0gIihObyBu
YW1lKSI7CisKKyAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFsdWUoc2lnbmFsVmFs
dWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBzaWduYWxWYWx1ZSkg
OiBnX3N0cmR1cChzaWduYWxOYW1lKSk7CisgICAgcHJpbnRmKCJBY2Nlc3NpYmlsaXR5IG9iamVj
dCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLAorICAgICAgICAg
ICBzaWduYWxOYW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9u
SGludCAqc2lnbmFsSGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3VpbnQgbnVtUGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpCit7CisgICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxk
IHJlY2VpdmUgdGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCisgICAgaWYgKG51bVBh
cmFtVmFsdWVzIDwgMSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBBdGtPYmplY3QqIGFj
Y2Vzc2libGUgPSBBVEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFyYW1WYWx1ZXNbMF0p
KTsKKyAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCisg
ICAgICAgIHJldHVybiBUUlVFOworCisgICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKKyAg
ICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lOworICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbFZh
bHVlOworCisgICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFs
X3F1ZXJ5KTsKKworICAgIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSwg
InN0YXRlLWNoYW5nZSIpKSB7CisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50
Zigic3RhdGUtY2hhbmdlOiVzIiwgZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVlc1sxXSkp
KTsKKyAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVl
X2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1syXSkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNt
cDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiZm9jdXMtZXZlbnQiKSkgeworICAgICAgICBz
aWduYWxOYW1lLnNldChnX3N0cmR1cCgiZm9jdXMtZXZlbnQiKSk7CisgICAgICAgIHNpZ25hbFZh
bHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigmcGFyYW1W
YWx1ZXNbMV0pKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWdu
YWxfbmFtZSwgImNoaWxkcmVuLWNoYW5nZWQiKSkgeworICAgICAgICBzaWduYWxOYW1lLnNldChn
X3N0cmR1cCgiY2hpbGRyZW4tY2hhbmdlZCIpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdf
c3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF91aW50KCZwYXJhbVZhbHVlc1sxXSkpKTsK
KyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAicHJv
cGVydHktY2hhbmdlIikpIHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRm
KCJwcm9wZXJ0eS1jaGFuZ2U6JXMiLCBnX3F1YXJrX3RvX3N0cmluZyhzaWduYWxIaW50LT5kZXRh
aWwpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKHNpZ25h
bF9xdWVyeS5zaWduYWxfbmFtZSkpOworCisgICAgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoYWNj
ZXNzaWJsZSwgc2lnbmFsTmFtZS5nZXQoKSwgc2lnbmFsVmFsdWUuZ2V0KCkpOworCisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3ZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQorewor
ICAgIC8vIEVuc3VyZSBubyBjYWxsYmFja3MgYXJlIGNvbm5lY3RlZCBiZWZvcmUuCisgICAgZGlz
Y29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFj
Y2Vzc2liaWxpdHkgaXMgaW5pdGlhbGl6ZWQgZm9yIHRoZSBXZWJWaWV3IGJ5IHF1ZXJ5aW5nIGZv
cgorICAgIC8vIHRoZSByb290IGFjY2Vzc2libGUgb2JqZWN0LCB3aGljaCB3aWxsIGNyZWF0ZSB0
aGUgZnVsbCBoaWVyYXJjaHkuCisjaWYgUExBVEZPUk0oR1RLKQorICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7CisjZWxpZiBQ
TEFURk9STShFRkwpCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyb290QWNjZXNzaWJs
ZUVsZW1lbnQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOworI2VuZGlmCisKKyAgICAvLyBBZGQgZ2xv
YmFsIGxpc3RlbmVycyBmb3IgQXRrT2JqZWN0J3Mgc2lnbmFscy4KKyAgICBzdGF0ZUNoYW5nZUxp
c3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlz
dGVuZXIsICJBVEs6QXRrT2JqZWN0OnN0YXRlLWNoYW5nZSIpOworICAgIGZvY3VzRXZlbnRMaXN0
ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3Rl
bmVyLCAiQVRLOkF0a09iamVjdDpmb2N1cy1ldmVudCIpOworICAgIGFjdGl2ZURlc2NlbmRhbnRD
aGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0
RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIp
OworICAgIGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9s
aXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmNoaWxkcmVuLWNo
YW5nZWQiKTsKKyAgICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxf
ZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpwcm9w
ZXJ0eS1jaGFuZ2UiKTsKKyAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2Fk
ZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09i
amVjdDp2aXNpYmxlLWRhdGEtY2hhbmdlZCIpOworCisgICAgLy8gRW5zdXJlIHRoZSBBdGsgaW50
ZXJmYWNlIHR5cGVzIGFyZSByZWdpc3RlcmVkLCBvdGhlcndpc2UKKyAgICAvLyB0aGUgQXRrRG9j
dW1lbnQgc2lnbmFsIGhhbmRsZXJzIGJlbG93IHdvbid0IGdldCByZWdpc3RlcmVkLgorICAgIEdP
YmplY3QqIGR1bW15QXhPYmplY3QgPSBHX09CSkVDVChnX29iamVjdF9uZXcoQVRLX1RZUEVfT0JK
RUNULCAwKSk7CisgICAgQXRrT2JqZWN0KiBkdW1teU5vT3BBeE9iamVjdCA9IGF0a19ub19vcF9v
YmplY3RfbmV3KGR1bW15QXhPYmplY3QpOworICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGR1
bW15Tm9PcEF4T2JqZWN0KSk7CisgICAgZ19vYmplY3RfdW5yZWYoZHVtbXlBeE9iamVjdCk7Cit9
CisKK3ZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQoreworICAgIC8vIEF0
a09iamVjdCBzaWduYWxzLgorICAgIGlmIChzdGF0ZUNoYW5nZUxpc3RlbmVySWQpIHsKKyAgICAg
ICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoc3RhdGVDaGFuZ2VMaXN0ZW5lcklk
KTsKKyAgICAgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKGZv
Y3VzRXZlbnRMaXN0ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGZvY3VzRXZlbnRMaXN0ZW5lcklkKTsKKyAgICAgICAgZm9jdXNFdmVudExpc3RlbmVy
SWQgPSAwOworICAgIH0KKyAgICBpZiAoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklk
KSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGFjdGl2ZURlc2Nl
bmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCk7CisgICAgICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2Vk
TGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlmIChjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklk
KSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGNoaWxkcmVuQ2hh
bmdlZExpc3RlbmVySWQpOworICAgICAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsK
KyAgICB9CisgICAgaWYgKHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCk7
CisgICAgICAgIHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAo
dmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2Jh
bF9ldmVudF9saXN0ZW5lcih2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAg
dmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CisgICAgfQorfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAppbmRleCBjMDY4ZWE3Li42N2Y5MDVk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsNSBA
QAogc2V0KER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKKyAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwCiAgICAgJHtUT09MU19ESVJ9
L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAogICAgICR7VE9PTFNfRElS
fS9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwCiAgICAgJHtUT09MU19E
SVJ9L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKQEAgLTg4LDYgKzg5LDcgQEAgc2V0
KER1bXBSZW5kZXJUcmVlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vcnVudGltZQogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9Gb3J3YXJkaW5nSGVhZGVy
cwogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZQorICAgICR7VE9PTFNfRElSfS9EdW1w
UmVuZGVyVHJlZS9hdGsKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvY2Fpcm8KICAg
ICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsCiAgICAgJHtXVEZfRElSfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjJjODAyLi4wMDAwMDAwCi0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxsYmFja3Mu
aCIKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotc3RhdGljIGd1aW50IHN0
YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgZm9jdXNFdmVudExpc3RlbmVy
SWQgPSAwOwotc3RhdGljIGd1aW50IGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9
IDA7Ci1zdGF0aWMgZ3VpbnQgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMg
Z3VpbnQgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgdmlzaWJs
ZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHByaW50QWNjZXNzaWJp
bGl0eUV2ZW50KEF0a09iamVjdCogYWNjZXNzaWJsZSwgY29uc3QgZ2NoYXIqIHNpZ25hbE5hbWUs
IGNvbnN0IGdjaGFyKiBzaWduYWxWYWx1ZSkKLXsKLSAgICAvLyBEbyBub3QgaGFuZGxlIHN0YXRl
LWNoYW5nZTpkZWZ1bmN0IHNpZ25hbHMsIGFzIHRoZSBBdGtPYmplY3QKLSAgICAvLyBhc3NvY2lh
dGVkIHRvIHRoZW0gd2lsbCBub3QgYmUgdmFsaWQgYXQgdGhpcyBwb2ludCBhbHJlYWR5LgotICAg
IGlmICghc2lnbmFsTmFtZSB8fCAhZ19zdHJjbXAwKHNpZ25hbE5hbWUsICJzdGF0ZS1jaGFuZ2U6
ZGVmdW5jdCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFU
S19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGdj
aGFyKiBvYmplY3ROYW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShhY2Nlc3NpYmxlKTsKLSAgICBB
dGtSb2xlIG9iamVjdFJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGFjY2Vzc2libGUpOwotCi0g
ICAgLy8gVHJ5IHRvIGFsd2F5cyBwcm92aWRlIGEgbmFtZSB0byBiZSBsb2dnZWQgZm9yIHRoZSBv
YmplY3QuCi0gICAgaWYgKCFvYmplY3ROYW1lIHx8ICpvYmplY3ROYW1lID09ICdcMCcpCi0gICAg
ICAgIG9iamVjdE5hbWUgPSAiKE5vIG5hbWUpIjsKLQotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25h
bE5hbWVBbmRWYWx1ZShzaWduYWxWYWx1ZSA/IGdfc3RyZHVwX3ByaW50ZigiJXMgPSAlcyIsIHNp
Z25hbE5hbWUsIHNpZ25hbFZhbHVlKSA6IGdfc3RyZHVwKHNpZ25hbE5hbWUpKTsKLSAgICBwcmlu
dGYoIkFjY2Vzc2liaWxpdHkgb2JqZWN0IGVtaXR0ZWQgXCIlc1wiIC8gTmFtZTogXCIlc1wiIC8g
Um9sZTogJWRcbiIsCi0gICAgICAgICAgIHNpZ25hbE5hbWVBbmRWYWx1ZS5nZXQoKSwgb2JqZWN0
TmFtZSwgb2JqZWN0Um9sZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlz
dGVuZXIoR1NpZ25hbEludm9jYXRpb25IaW50ICpzaWduYWxIaW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndWludCBudW1QYXJhbVZhbHVlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICpwYXJhbVZhbHVlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICAvLyBBdCBsZWFzdCB3ZSBzaG91bGQgcmVjZWl2ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhl
IHNpZ25hbC4KLSAgICBpZiAobnVtUGFyYW1WYWx1ZXMgPCAxKQotICAgICAgICByZXR1cm4gVFJV
RTsKLQotICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9IEFUS19PQkpFQ1QoZ192YWx1ZV9nZXRf
b2JqZWN0KCZwYXJhbVZhbHVlc1swXSkpOwotICAgIGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lT
X09CSkVDVChhY2Nlc3NpYmxlKSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBHU2lnbmFs
UXVlcnkgc2lnbmFsX3F1ZXJ5OwotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWU7Ci0gICAg
R093blB0cjxnY2hhcj4gc2lnbmFsVmFsdWU7Ci0KLSAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxI
aW50LT5zaWduYWxfaWQsICZzaWduYWxfcXVlcnkpOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoc2ln
bmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAic3RhdGUtY2hhbmdlIikpIHsKLSAgICAgICAgc2lnbmFs
TmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCJzdGF0ZS1jaGFuZ2U6JXMiLCBnX3ZhbHVlX2dldF9z
dHJpbmcoJnBhcmFtVmFsdWVzWzFdKSkpOwotICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJk
dXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnBhcmFtVmFsdWVzWzJdKSkpOwot
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJmb2N1
cy1ldmVudCIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKCJmb2N1cy1ldmVu
dCIpKTsKLSAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3Zh
bHVlX2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1sxXSkpKTsKLSAgICB9IGVsc2UgaWYgKCFnX3N0
cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiY2hpbGRyZW4tY2hhbmdlZCIpKSB7Ci0g
ICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKCJjaGlsZHJlbi1jaGFuZ2VkIikpOwotICAg
ICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X3Vp
bnQoJnBhcmFtVmFsdWVzWzFdKSkpOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxf
cXVlcnkuc2lnbmFsX25hbWUsICJwcm9wZXJ0eS1jaGFuZ2UiKSkgewotICAgICAgICBzaWduYWxO
YW1lLnNldChnX3N0cmR1cF9wcmludGYoInByb3BlcnR5LWNoYW5nZTolcyIsIGdfcXVhcmtfdG9f
c3RyaW5nKHNpZ25hbEhpbnQtPmRldGFpbCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2lnbmFs
TmFtZS5zZXQoZ19zdHJkdXAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lKSk7Ci0KLSAgICBwcmlu
dEFjY2Vzc2liaWxpdHlFdmVudChhY2Nlc3NpYmxlLCBzaWduYWxOYW1lLmdldCgpLCBzaWduYWxW
YWx1ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBjb25uZWN0QWNjZXNz
aWJpbGl0eUNhbGxiYWNrcygpCi17Ci0gICAgLy8gRW5zdXJlIG5vIGNhbGxiYWNrcyBhcmUgY29u
bmVjdGVkIGJlZm9yZS4KLSAgICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwot
Ci0gICAgLy8gRW5zdXJlIHRoYXQgYWNjZXNzaWJpbGl0eSBpcyBpbml0aWFsaXplZCBmb3IgdGhl
IFdlYlZpZXcgYnkgcXVlcnlpbmcgZm9yCi0gICAgLy8gdGhlIHJvb3QgYWNjZXNzaWJsZSBvYmpl
Y3QsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBmdWxsIGhpZXJhcmNoeS4KLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwotCi0g
ICAgLy8gQWRkIGdsb2JhbCBsaXN0ZW5lcnMgZm9yIEF0a09iamVjdCdzIHNpZ25hbHMuCi0gICAg
c3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhP
YmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09iamVjdDpzdGF0ZS1jaGFuZ2UiKTsKLSAgICBm
b2N1c0V2ZW50TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2Jq
ZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpBdGtPYmplY3Q6Zm9jdXMtZXZlbnQiKTsKLSAgICBhY3Rp
dmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0
ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJHdGs6QXRrT2JqZWN0OmFjdGl2ZS1kZXNjZW5k
YW50LWNoYW5nZWQiKTsKLSAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09iamVj
dDpjaGlsZHJlbi1jaGFuZ2VkIik7Ci0gICAgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0
a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpB
dGtPYmplY3Q6cHJvcGVydHktY2hhbmdlIik7Ci0gICAgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVu
ZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5l
ciwgIkd0azpBdGtPYmplY3Q6dmlzaWJsZS1kYXRhLWNoYW5nZWQiKTsKLQotICAgIC8vIEVuc3Vy
ZSB0aGUgQXRrIGludGVyZmFjZSB0eXBlcyBhcmUgcmVnaXN0ZXJlZCwgb3RoZXJ3aXNlCi0gICAg
Ly8gdGhlIEF0a0RvY3VtZW50IHNpZ25hbCBoYW5kbGVycyBiZWxvdyB3b24ndCBnZXQgcmVnaXN0
ZXJlZC4KLSAgICBHT2JqZWN0KiBkdW1teUF4T2JqZWN0ID0gR19PQkpFQ1QoZ19vYmplY3RfbmV3
KEFUS19UWVBFX09CSkVDVCwgMCkpOwotICAgIEF0a09iamVjdCogZHVtbXlOb09wQXhPYmplY3Qg
PSBhdGtfbm9fb3Bfb2JqZWN0X25ldyhkdW1teUF4T2JqZWN0KTsKLSAgICBnX29iamVjdF91bnJl
ZihHX09CSkVDVChkdW1teU5vT3BBeE9iamVjdCkpOwotICAgIGdfb2JqZWN0X3VucmVmKGR1bW15
QXhPYmplY3QpOwotfQotCi12b2lkIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkK
LXsKLSAgICAvLyBBdGtPYmplY3Qgc2lnbmFscy4KLSAgICBpZiAoc3RhdGVDaGFuZ2VMaXN0ZW5l
cklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHN0YXRlQ2hh
bmdlTGlzdGVuZXJJZCk7Ci0gICAgICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7Ci0gICAg
fQotICAgIGlmIChmb2N1c0V2ZW50TGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2ds
b2JhbF9ldmVudF9saXN0ZW5lcihmb2N1c0V2ZW50TGlzdGVuZXJJZCk7Ci0gICAgICAgIGZvY3Vz
RXZlbnRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGFjdGl2ZURlc2NlbmRhbnRDaGFu
Z2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQpOwotICAgICAgICBhY3RpdmVEZXNj
ZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAoY2hpbGRyZW5DaGFu
Z2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkTGlz
dGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKSB7
Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHByb3BlcnR5Q2hhbmdl
ZExpc3RlbmVySWQpOwotICAgICAgICBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAg
ICB9Ci0gICAgaWYgKHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIodmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJ
ZCk7Ci0gICAgICAgIHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLX0K
LQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxs
YmFja3MuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMjU3NTcuLjAwMDAwMDAKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaAorKysgL2Rl
di9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEFjY2Vzc2liaWxpdHlDYWxsYmFja3NfaAotI2RlZmluZSBBY2Nlc3NpYmls
aXR5Q2FsbGJhY2tzX2gKLQotdm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwot
dm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXgg
Yjk5NjEwOC4uNDNhNGFiYyAxMDA2NDQKLS0tIGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIv
VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTEwNCw2ICsxMDQsNyBAQCBQcm9ncmFtc19EdW1wUmVu
ZGVyVHJlZV9DUFBGTEFHUyA9IFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAogCS1EVE9QX0xFVkVM
X0RJUj1cIiR7c2hlbGwgcHdkfS8ke3NyY2Rpcn1cIiBcCiAJLUkkKHNyY2RpcikvVG9vbHMvRHVt
cFJlbmRlclRyZWUgXAorCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ayBcCiAJ
LUkkKHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsg
XApAQCAtMTQzLDEwICsxNDQsMTAgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9
IFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUuaCBcCiAJVG9vbHMvRHVtcFJlbmRl
clRyZWUvV29ya1F1ZXVlSXRlbS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jb25maWcuaCBc
CisJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBcCisJ
VG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCBcCi0J
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBcCi0JVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwIFwKIAlUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIFwKIAlU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAgXAog
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186341</attachid>
            <date>2013-02-04 03:53:11 -0800</date>
            <delta_ts>2013-02-04 04:15:20 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>a11y-share-drt.patch</filename>
            <type>text/plain</type>
            <size>92721</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGMx
NmUzLi5kYjRiMTA4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUyIEBACisyMDEzLTAyLTA0ICBLcnp5c3p0b2YgQ3plY2ggIDxr
LmN6ZWNoQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtHVEtdW0VGTF0gU2hhcmVzIFdlYktpdC1H
VEsncyBEdW1wUmVuZGVyVHJlZSBhY2Nlc3NpYmlsaXR5IGltcGxlbWVudGF0aW9uIHdpdGggb3Ro
ZXIgV2Via2l0IHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDUwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTaGFyZXMgc3BlY2lmaWMgQVRLJ3MgYWNjZXNzaWJpbGl0eSBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgS2VlcHMgcGxhdGZvcm0gc3BlY2lmaWMgbWV0aG9kcyBpbiBFRkwgYW5kIEdU
SydzIGRpcmVjdG9yaWVzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlDYWxsYmFja3MuaDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0Fj
Y2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwLgorICAgICAgICAocHJpbnRBY2Nl
c3NpYmlsaXR5RXZlbnQpOgorICAgICAgICAoYXhPYmplY3RFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAgICAgKGRpc2Nvbm5lY3RB
Y2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwLgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dGb2N1c0V2ZW50cyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1ZhbHVlQ2hhbmdlRXZlbnRzKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRz
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0
ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0
aW9uTGlzdGVuZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwLgorICAgICAgICAoY29yZUF0dHJpYnV0ZVRvQXRr
QXR0cmlidXRlKToKKyAgICAgICAgKHJvbGVUb1N0cmluZyk6CisgICAgICAgIChyZXBsYWNlQ2hh
cmFjdGVyc0ZvclJlc3VsdHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpnZXRMaW5rZWRVSUVsZW1lbnRzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0
Q2hpbGRyZW4pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5X
aXRoUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291bnQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmRleE9mQ2hpbGQpOgorICAgICAgICAoYXR0cmlidXRlU2V0VG9TdHJpbmcpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlu
a3MpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbik6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
aXRsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbik6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aGVpZ2h0KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNsaWNrUG9pbnRYKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9p
bnRZKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Om1heFZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVl
RGVzY3JpcHRpb24pOgorICAgICAgICAoY2hlY2tFbGVtZW50U3RhdGUpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcik6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGll
cmFyY2hpY2FsTGV2ZWwpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlz
R3JhYmJlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVj
dHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSk6CisgICAgICAgIChpbmRleFJhbmdl
SW5UYWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdl
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRl
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3cp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQpOgorICAg
ICAgICAoYWx0ZXJDdXJyZW50VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5jcmVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVu
dCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcyk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkUm93QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmRpc2Nsb3NlZEJ5Um93KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFj
Y2Vzc2liaWxpdHlWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1
bWVudEVuY29kaW5nKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
VVJJKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcik6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1Zpc2libGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xs
YXBzZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlU2VsZWN0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFkZFNlbGVjdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVT
ZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtl
VmlzaWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VW
aXNpYmxlV2l0aFN1YkZvY3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxp
c3RzLnR4dDogQWRkcyBBVEsgaGVhZGVycywgbGlicmFyaWVzLCBuZXcgc291cmNlcy4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHA6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCk6CisgICAgICAgICogR05VbWFrZWZp
bGUuYW06IEFkZHMgcmVuYW1lZCBzb3VyY2VzLgorCiAyMDEzLTAxLTIzICBUb255IENoYW5nICA8
dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2V0IHN2bjplb2wtc3R5
bGUgdG8gQ1JMRiBvbiBXaW5kb3dzIC5zbG4gZmlsZXMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43MjI1NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApAQCAtMCwwICsxLDM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzX2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eUNhbGxiYWNrc19oCisKK3ZvaWQgY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKK3ZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlD
YWxsYmFja3MoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMzYwNjZiNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcApAQCAtMCwwICsxLDE3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lC
SUxJVFkpCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJXZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJEdW1wUmVuZGVy
VHJlZUNocm9tZS5oIgorI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbC5oIgorI2VuZGlmCisKK3N0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxpc3RlbmVySWQg
PSAwOworc3RhdGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWlu
dCBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IGNo
aWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdl
ZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVy
SWQgPSAwOworCitzdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmplY3Qq
IGFjY2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hhciogc2lnbmFs
VmFsdWUpCit7CisgICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCBzaWdu
YWxzLCBhcyB0aGUgQXRrT2JqZWN0CisgICAgLy8gYXNzb2NpYXRlZCB0byB0aGVtIHdpbGwgbm90
IGJlIHZhbGlkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KKyAgICBpZiAoIXNpZ25hbE5hbWUgfHwg
IWdfc3RyY21wMChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2li
bGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBnY2hhciogb2JqZWN0TmFtZSA9IGF0
a19vYmplY3RfZ2V0X25hbWUoYWNjZXNzaWJsZSk7CisgICAgQXRrUm9sZSBvYmplY3RSb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKKworICAgIC8vIFRyeSB0byBhbHdheXMg
cHJvdmlkZSBhIG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgorICAgIGlmICghb2Jq
ZWN0TmFtZSB8fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQorICAgICAgICBvYmplY3ROYW1lID0gIihO
byBuYW1lKSI7CisKKyAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFsdWUoc2lnbmFs
VmFsdWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBzaWduYWxWYWx1
ZSkgOiBnX3N0cmR1cChzaWduYWxOYW1lKSk7CisgICAgcHJpbnRmKCJBY2Nlc3NpYmlsaXR5IG9i
amVjdCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLCBzaWduYWxO
YW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9uSGludCAqc2ln
bmFsSGludCwgZ3VpbnQgbnVtUGFyYW1WYWx1ZXMsIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMs
IGdwb2ludGVyIGRhdGEpCit7CisgICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxkIHJlY2VpdmUgdGhl
IGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCisgICAgaWYgKG51bVBhcmFtVmFsdWVzIDwg
MSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSBB
VEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFyYW1WYWx1ZXNbMF0pKTsKKyAgICBpZiAo
IWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCisgICAgICAgIHJldHVy
biBUUlVFOworCisgICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbFF1ZXJ5OworICAgIEdPd25QdHI8Z2No
YXI+IHNpZ25hbE5hbWU7CisgICAgR093blB0cjxnY2hhcj4gc2lnbmFsVmFsdWU7CisKKyAgICBn
X3NpZ25hbFF1ZXJ5KHNpZ25hbEhpbnQtPnNpZ25hbF9pZCwgJnNpZ25hbFF1ZXJ5KTsKKworICAg
IGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lLCAic3RhdGUtY2hhbmdlIikp
IHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCJzdGF0ZS1jaGFuZ2U6
JXMiLCBnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVzWzFdKSkpOworICAgICAgICBzaWdu
YWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnBh
cmFtVmFsdWVzWzJdKSkpOworICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5z
aWduYWxfbmFtZSwgImZvY3VzLWV2ZW50IikpIHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19z
dHJkdXAoImZvY3VzLWV2ZW50IikpOworICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBf
cHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnBhcmFtVmFsdWVzWzFdKSkpOworICAg
IH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgImNoaWxkcmVu
LWNoYW5nZWQiKSkgeworICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cCgiY2hpbGRyZW4t
Y2hhbmdlZCIpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQi
LCBnX3ZhbHVlX2dldF91aW50KCZwYXJhbVZhbHVlc1sxXSkpKTsKKyAgICB9IGVsc2UgaWYgKCFn
X3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJwcm9wZXJ0eS1jaGFuZ2UiKSkKKyAg
ICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCJwcm9wZXJ0eS1jaGFuZ2U6JXMi
LCBnX3F1YXJrX3RvX3N0cmluZyhzaWduYWxIaW50LT5kZXRhaWwpKSk7CisgICAgZWxzZQorICAg
ICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSkpOwor
CisgICAgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoYWNjZXNzaWJsZSwgc2lnbmFsTmFtZS5nZXQo
KSwgc2lnbmFsVmFsdWUuZ2V0KCkpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgY29u
bmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQoreworICAgIC8vIEVuc3VyZSBubyBjYWxsYmFj
a3MgYXJlIGNvbm5lY3RlZCBiZWZvcmUuCisgICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxs
YmFja3MoKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IGFjY2Vzc2liaWxpdHkgaXMgaW5pdGlhbGl6
ZWQgZm9yIHRoZSBXZWJWaWV3IGJ5IHF1ZXJ5aW5nIGZvcgorICAgIC8vIHRoZSByb290IGFjY2Vz
c2libGUgb2JqZWN0LCB3aGljaCB3aWxsIGNyZWF0ZSB0aGUgZnVsbCBoaWVyYXJjaHkuCisjaWYg
UExBVEZPUk0oR1RLKQorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vz
c2libGVFbGVtZW50KG1haW5GcmFtZSk7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpyb290QWNjZXNzaWJsZUVsZW1lbnQoYnJvd3Nlci0+bWFpbkZy
YW1lKCkpOworI2VuZGlmCisKKyAgICAvLyBBZGQgZ2xvYmFsIGxpc3RlbmVycyBmb3IgQXRrT2Jq
ZWN0J3Mgc2lnbmFscy4KKyAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2Jh
bF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnN0
YXRlLWNoYW5nZSIpOworICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxf
ZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpmb2N1
cy1ldmVudCIpOworICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19h
ZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtP
YmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIpOworICAgIGNoaWxkcmVuQ2hhbmdlZExp
c3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlz
dGVuZXIsICJBVEs6QXRrT2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQiKTsKKyAgICBwcm9wZXJ0eUNo
YW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RF
dmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpwcm9wZXJ0eS1jaGFuZ2UiKTsKKyAgICB2aXNp
YmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIo
YXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDp2aXNpYmxlLWRhdGEtY2hhbmdl
ZCIpOworCisgICAgLy8gRW5zdXJlIHRoZSBBdGsgaW50ZXJmYWNlIHR5cGVzIGFyZSByZWdpc3Rl
cmVkLCBvdGhlcndpc2UKKyAgICAvLyB0aGUgQXRrRG9jdW1lbnQgc2lnbmFsIGhhbmRsZXJzIGJl
bG93IHdvbid0IGdldCByZWdpc3RlcmVkLgorICAgIEdPYmplY3QqIGR1bW15QXhPYmplY3QgPSBH
X09CSkVDVChnX29iamVjdF9uZXcoQVRLX1RZUEVfT0JKRUNULCAwKSk7CisgICAgQXRrT2JqZWN0
KiBkdW1teU5vT3BBeE9iamVjdCA9IGF0a19ub19vcF9vYmplY3RfbmV3KGR1bW15QXhPYmplY3Qp
OworICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGR1bW15Tm9PcEF4T2JqZWN0KSk7CisgICAg
Z19vYmplY3RfdW5yZWYoZHVtbXlBeE9iamVjdCk7Cit9CisKK3ZvaWQgZGlzY29ubmVjdEFjY2Vz
c2liaWxpdHlDYWxsYmFja3MoKQoreworICAgIC8vIEF0a09iamVjdCBzaWduYWxzLgorICAgIGlm
IChzdGF0ZUNoYW5nZUxpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZl
bnRfbGlzdGVuZXIoc3RhdGVDaGFuZ2VMaXN0ZW5lcklkKTsKKyAgICAgICAgc3RhdGVDaGFuZ2VM
aXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKGZvY3VzRXZlbnRMaXN0ZW5lcklkKSB7Cisg
ICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGZvY3VzRXZlbnRMaXN0ZW5l
cklkKTsKKyAgICAgICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAo
YWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVf
Z2xvYmFsX2V2ZW50X2xpc3RlbmVyKGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCk7
CisgICAgICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CisgICAgfQor
ICAgIGlmIChjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVf
Z2xvYmFsX2V2ZW50X2xpc3RlbmVyKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQpOworICAgICAg
ICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKHByb3BlcnR5
Q2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlz
dGVuZXIocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCk7CisgICAgICAgIHByb3BlcnR5Q2hhbmdl
ZExpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAodmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVu
ZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcih2aXNpYmxl
RGF0YUNoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVu
ZXJJZCA9IDA7CisgICAgfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTAzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCkBAIC0wLDAg
KzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVs
IEFsb256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKKwor
I2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDYWxsYmFj
a3MuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWUuaCIKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKworc3RhdGljIGJvb2wgbG9n
Z2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKKworQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKK3sKK30KKworQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCit7Cit9CisKK0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4LCBp
bnQgeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKKwor
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nRm9jdXNFdmVudHMoYm9vbCkKK3sK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nU2Nyb2xsaW5nU3RhcnRF
dmVudHMoYm9vbCkKK3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9n
VmFsdWVDaGFuZ2VFdmVudHMoYm9vbCkKK3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6c2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhib29sIGxvZ0FjY2Vzc2liaWxpdHlFdmVu
dHMpCit7CisgICAgaWYgKGxvZ0FjY2Vzc2liaWxpdHlFdmVudHMgPT0gbG9nZ2luZ0FjY2Vzc2li
aWxpdHlFdmVudHMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbG9nQWNjZXNzaWJpbGl0
eUV2ZW50cykgeworICAgICAgICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwor
ICAgICAgICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKKyAgICBs
b2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3Zl
Tm90aWZpY2F0aW9uTGlzdGVuZXIoKQoreworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YyMDY2Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBA
IC0wLDAgKzEsMTA0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxv
bnpvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorCisjaWYg
SEFWRShBQ0NFU1NJQklMSVRZKQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdS
ZWYuaD4KKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgorCitzdGF0aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0cmluZ1Jl
ZiBhdHRyaWJ1dGUpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGlt
dW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKKyAgICBHT3duUHRyPGdjaGFyPiBidWZmZXIo
c3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOworICAgIEpTU3RyaW5n
R2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworCisg
ICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmdldCgp
KTsKKyAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNlaG9sZGVyVmFsdWUiKQorICAg
ICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOworCisgICAgcmV0dXJuICIiOworfQorCitz
dGF0aWMgaW5saW5lIFN0cmluZyByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQoreworICAgIHN3
aXRjaCAocm9sZSkgeworICAgIGNhc2UgQVRLX1JPTEVfQUxFUlQ6CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWEFsZXJ0IjsKKyAgICBjYXNlIEFUS19ST0xFX0NBTlZBUzoKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYQ2FudmFzIjsKKyAgICBjYXNlIEFUS19ST0xFX0NIRUNLX0JPWDoKKyAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2hlY2tCb3giOworICAgIGNhc2UgQVRLX1JPTEVfQ09M
VU1OX0hFQURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29sdW1uSGVhZGVyIjsKKyAg
ICBjYXNlIEFUS19ST0xFX0NPTUJPX0JPWDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29t
Ym9Cb3giOworICAgIGNhc2UgQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUU6CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWFdlYkFyZWEiOworICAgIGNhc2UgQVRLX1JPTEVfRU5UUlk6CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFRleHRGaWVsZCI7CisgICAgY2FzZSBBVEtfUk9MRV9GT09URVI6
CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEZvb3RlciI7CisgICAgY2FzZSBBVEtfUk9MRV9G
T1JNOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhGb3JtIjsKKyAgICBjYXNlIEFUS19ST0xF
X0dST1VQSU5HOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhHcm91cCI7CisgICAgY2FzZSBB
VEtfUk9MRV9IRUFESU5HOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhIZWFkaW5nIjsKKyAg
ICBjYXNlIEFUS19ST0xFX0lNQUdFOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhJbWFnZSI7
CisgICAgY2FzZSBBVEtfUk9MRV9JTUFHRV9NQVA6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WEltYWdlTWFwIjsKKyAgICBjYXNlIEFUS19ST0xFX0xBQkVMOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhMYWJlbCI7CisgICAgY2FzZSBBVEtfUk9MRV9MSU5LOgorICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhMaW5rIjsKKyAgICBjYXNlIEFUS19ST0xFX0xJU1Q6CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWExpc3QiOworICAgIGNhc2UgQVRLX1JPTEVfTElTVF9CT1g6CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWExpc3RCb3giOworICAgIGNhc2UgQVRLX1JPTEVfTElTVF9JVEVN
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0SXRlbSI7CisgICAgY2FzZSBBVEtfUk9M
RV9NRU5VOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51IjsKKyAgICBjYXNlIEFUS19S
T0xFX01FTlVfQkFSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51QmFyIjsKKyAgICBj
YXNlIEFUS19ST0xFX01FTlVfSVRFTToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudUl0
ZW0iOworICAgIGNhc2UgQVRLX1JPTEVfUEFHRV9UQUI6CisgICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWFRhYiI7CisgICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RBQl9MSVNUOgorICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhUYWJHcm91cCI7CisgICAgY2FzZSBBVEtfUk9MRV9QQU5FTDoKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOworICAgIGNhc2UgQVRLX1JPTEVfUEFSQUdSQVBI
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXJhZ3JhcGgiOworICAgIGNhc2UgQVRLX1JP
TEVfUEFTU1dPUkRfVEVYVDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUGFzc3dvcmRGaWVs
ZCI7CisgICAgY2FzZSBBVEtfUk9MRV9QVVNIX0JVVFRPTjoKKyAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYQnV0dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1JBRElPX0JVVFRPTjoKKyAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYUmFkaW9CdXR0b24iOworICAgIGNhc2UgQVRLX1JPTEVfUk9XX0hF
QURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93SGVhZGVyIjsKKyAgICBjYXNlIEFU
S19ST0xFX1JVTEVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSdWxlciI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9TQ1JPTExfQkFSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTY3JvbGxC
YXIiOworICAgIGNhc2UgQVRLX1JPTEVfU0NST0xMX1BBTkU6CisgICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWFNjcm9sbEFyZWEiOworICAgIGNhc2UgQVRLX1JPTEVfU0VDVElPTjoKKyAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYRGl2IjsKKyAgICBjYXNlIEFUS19ST0xFX1NFUEFSQVRPUjoKKyAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSG9yaXpvbnRhbFJ1bGUiOworICAgIGNhc2UgQVRLX1JP
TEVfU0xJREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTbGlkZXIiOworICAgIGNhc2Ug
QVRLX1JPTEVfU1BJTl9CVVRUT046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNwaW5CdXR0
b24iOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEU6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WFRhYmxlIjsKKyAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NFTEw6CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWENlbGwiOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfQ09MVU1OX0hFQURFUjoK
KyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29sdW1uSGVhZGVyIjsKKyAgICBjYXNlIEFUS19S
T0xFX1RBQkxFX1JPVzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93IjsKKyAgICBjYXNl
IEFUS19ST0xFX1RBQkxFX1JPV19IRUFERVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJv
d0hlYWRlciI7CisgICAgY2FzZSBBVEtfUk9MRV9UT0dHTEVfQlVUVE9OOgorICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhUb2dnbGVCdXR0b24iOworICAgIGNhc2UgQVRLX1JPTEVfVE9PTF9CQVI6
CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvb2xiYXIiOworICAgIGNhc2UgQVRLX1JPTEVf
VE9PTF9USVA6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFVzZXJJbnRlcmZhY2VUb29sdGlw
IjsKKyAgICBjYXNlIEFUS19ST0xFX1RSRUU6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRy
ZWUiOworICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9UQUJMRToKKyAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYVHJlZUdyaWQiOworICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9JVEVNOgorICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhUcmVlSXRlbSI7CisgICAgY2FzZSBBVEtfUk9MRV9XSU5ET1c6Cisg
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFdpbmRvdyI7CisgICAgY2FzZSBBVEtfUk9MRV9VTktO
T1dOOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhVbmtub3duIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBXZSB3YW50IHRvIGRpc3Rpbmd1aXNoIEFUS19ST0xFX1VOS05PV04gZnJvbSBh
IGtub3duIEF0a1JvbGUgd2hpY2gKKyAgICAgICAgLy8gb3VyIERSVCBpc24ndCBwcm9wZXJseSBo
YW5kbGluZy4KKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEZJWE1FIG5vdCBpZGVudGlmaWVkIjsK
KyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVz
dWx0cyhnY2hhciogc3RyKQoreworICAgIFN0cmluZyB1U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChzdHIpOworCisgICAgLy8gVGhlIG9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgcGFz
c2VkIGFsb25nIHRvIEFUcyBzbyB3ZSBuZWVkIHRvIGJlCisgICAgLy8gYWJsZSB0byB0ZXN0IGZv
ciB0aGVpciBwcmVzZW5jZSBhbmQgZG8gc28gd2l0aG91dCBjYXVzaW5nIHRlc3QgZmFpbHVyZXMu
CisgICAgdVN0cmluZy5yZXBsYWNlKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAiPG9iaj4i
KTsKKworICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gYWNjZXNz
aWJsZSB0ZXh0IG9mIGEgc2luZ2xlIG9iamVjdAorICAgIC8vIGlzIGFwcHJvcHJpYXRlLCBidXQg
aXQgbWFrZXMgdGVzdCByZXN1bHRzIChlc3BlY2lhbGx5IHRoZSBhY2Nlc3NpYmxlIHRyZWUpCisg
ICAgLy8gaGFyZGVyIHRvIHJlYWQuCisgICAgdVN0cmluZy5yZXBsYWNlKCJcbiIsICI8XFxuPiIp
OworCisgICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVs
ZW1lbnQgZWxlbWVudCkKKyAgICA6IG1fZWxlbWVudChlbGVtZW50KQoreworICAgIGlmIChtX2Vs
ZW1lbnQpCisgICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQpOworfQorCitBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQmIG90aGVyKQorICAgIDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKK3sKKyAg
ICBpZiAobV9lbGVtZW50KQorICAgICAgICBnX29iamVjdF9yZWYobV9lbGVtZW50KTsKK30KKwor
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQoreworICAg
IGlmIChtX2VsZW1lbnQpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZWxlbWVudCk7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0TGlua2VkVUlFbGVtZW50cyhWZWN0b3I8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRzKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXREb2N1bWVudExpbmtz
KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuKFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgY2hpbGRyZW4pCit7CisgICAgaW50IGNvdW50ID0g
Y2hpbGRyZW5Db3VudCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewor
ICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOworICAgICAgICBjaGlsZHJlbi5hcHBlbmQoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4mIGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgeworICAgICAgICBB
dGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JK
RUNUKG1fZWxlbWVudCksIGkpOworICAgICAgICBlbGVtZW50VmVjdG9yLmFwcGVuZChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7CisgICAgfQorfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cm93Q291bnQoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7CisKKyAgICByZXR1
cm4gYXRrX3RhYmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxFKG1fZWxlbWVudCkpOworfQorCitpbnQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQoKQoreworICAgIGlmICghbV9lbGVt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVt
ZW50KSk7CisKKyAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX2NvbHVtbnMoQVRLX1RBQkxFKG1f
ZWxlbWVudCkpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3Vu
dCgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNT
RVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICByZXR1cm4gYXRrX29iamVjdF9n
ZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9p
bnQoaW50IHgsIGludCB5KQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGF0a19jb21wb25lbnRfcmVm
X2FjY2Vzc2libGVfYXRfcG9pbnQoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCB4LCB5LCBBVEtf
WFlfV0lORE9XKSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGlu
ZGV4KQoreworICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBjaGlsZHJlbjsKKyAg
ICBnZXRDaGlsZHJlbldpdGhSYW5nZShjaGlsZHJlbiwgaW5kZXgsIGluZGV4ICsgMSk7CisKKyAg
ICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBjaGlsZHJlbi5hdCgw
KTsKKworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjppbmRleE9mQ2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKK3sgCisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitnY2hhciogYXR0cmlidXRl
U2V0VG9TdHJpbmcoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQpCit7CisgICAgR1N0cmlu
Zyogc3RyID0gZ19zdHJpbmdfbmV3KDApOworICAgIGZvciAoR1NMaXN0KiBhdHRyaWJ1dGVzID0g
YXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+bmV4dCkg
eworICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJp
YnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOworICAgICAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1
dGVEYXRhKGdfc3RyY29uY2F0KGF0dHJpYnV0ZS0+bmFtZSwgIjoiLCBhdHRyaWJ1dGUtPnZhbHVl
LCBOVUxMKSk7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIGF0dHJpYnV0ZURhdGEuZ2V0
KCkpOworICAgICAgICBpZiAoYXR0cmlidXRlcy0+bmV4dCkKKyAgICAgICAgICAgIGdfc3RyaW5n
X2FwcGVuZChzdHIsICIsICIpOworICAgIH0KKworICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHN0
ciwgRkFMU0UpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxB
dHRyaWJ1dGVzKCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVD
VChtX2VsZW1lbnQpKTsKKyAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGF0dHJpYnV0
ZVNldFRvU3RyaW5nKGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoQVRLX09CSkVDVChtX2VsZW1l
bnQpKSkpOworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1
dGVEYXRhLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExp
bmtzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQoKQoreworICAgIGlmICghbV9lbGVt
ZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a1JlbGF0aW9uU2V0KiBzZXQgPSBhdGtf
b2JqZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICBpZiAo
IXNldCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtPYmplY3QqIHRhcmdldCA9IDA7Cisg
ICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfbl9yZWxhdGlvbnMoc2V0KTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQXRrUmVsYXRpb24q
IHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRpb24oc2V0LCBpKTsKKyAgICAg
ICAgaWYgKGF0a19yZWxhdGlvbl9nZXRfcmVsYXRpb25fdHlwZShyZWxhdGlvbikgPT0gQVRLX1JF
TEFUSU9OX0xBQkVMTEVEX0JZKSB7CisgICAgICAgICAgICBHUHRyQXJyYXkqIHRhcmdldExpc3Qg
PSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChyZWxhdGlvbik7CisgICAgICAgICAgICBpZiAodGFy
Z2V0TGlzdC0+bGVuKQorICAgICAgICAgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PEF0a09i
amVjdCo+KGdfcHRyX2FycmF5X2luZGV4KHRhcmdldExpc3QsIDApKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGdfb2JqZWN0X3VucmVmKHNldCk7CisgICAgcmV0dXJuIHRhcmdldCA/IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQodGFyZ2V0KSA6IDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCgpCit7CisgICAgaWYgKCFt
X2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKEFUS19JU19PQkpFQ1Qo
bV9lbGVtZW50KSk7CisKKyAgICBBdGtPYmplY3QqIHBhcmVudCA9ICBhdGtfb2JqZWN0X2dldF9w
YXJlbnQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICByZXR1cm4gcGFyZW50ID8gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudChwYXJlbnQpIDogMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0
dHJpYnV0ZU5hbWVzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQoreworICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmpl
Y3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICBpZiAoIXJvbGUpCisgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgU3Ry
aW5nIHJvbGVTdHJpbmcgPSByb2xlVG9TdHJpbmcocm9sZSk7CisgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHJvbGVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUoKQoreworICAgIHJldHVy
biAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlRGVzY3Jp
cHRpb24oKQoreworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0aXRsZSgpCit7CisgICAgY29uc3QgZ2NoYXIqIG5hbWUgPSBhdGtfb2JqZWN0
X2dldF9uYW1lKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgR093blB0cjxnY2hhcj4gYXhU
aXRsZShnX3N0cmR1cF9wcmludGYoIkFYVGl0bGU6ICVzIiwgbmFtZSA/IG5hbWUgOiAiIikpOwor
CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4VGl0bGUuZ2V0KCkp
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigp
Cit7CisgICAgY29uc3QgZ2NoYXIqIGRlc2NyaXB0aW9uID0gYXRrX29iamVjdF9nZXRfZGVzY3Jp
cHRpb24oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlmICghZGVzY3JpcHRpb24pCisg
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAg
R093blB0cjxnY2hhcj4gYXhEZXNjKGdfc3RyZHVwX3ByaW50ZigiQVhEZXNjcmlwdGlvbjogJXMi
LCBkZXNjcmlwdGlvbikpOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGF4RGVzYy5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnN0cmluZ1ZhbHVlKCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX1RFWFQo
bV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7CisKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKG1f
ZWxlbWVudCksIDAsIC0xKTsKKyAgICBHT3duUHRyPGdjaGFyPiBheFZhbHVlKGdfc3RyZHVwX3By
aW50ZigiQVhWYWx1ZTogJXMiLCByZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3VsdHModGV4dCkpKTsK
KyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoYXhWYWx1ZS5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Omxhbmd1YWdlKCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICAvLyBJbiBBVEssIHRo
ZSBkb2N1bWVudCBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIHRoZSBkb2N1bWVudCdzIGxvY2FsZS4K
KyAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpID09IEFU
S19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdlOiAlcyIsIGF0a19kb2N1bWVu
dF9nZXRfbG9jYWxlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpKSkpOworCisgICAgLy8gRm9yIGFs
bCBvdGhlciBvYmplY3RzLCB0aGUgbGFuZ3VhZ2UgaXMgZXhwb3NlZCBhcyBhbiBBdGtUZXh0IGF0
dHJpYnV0ZS4KKyAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgZm9yIChHU0xpc3Qq
IHRleHRBdHRyaWJ1dGVzID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBVEtfVEVY
VChtX2VsZW1lbnQpKTsgdGV4dEF0dHJpYnV0ZXM7IHRleHRBdHRyaWJ1dGVzID0gdGV4dEF0dHJp
YnV0ZXMtPm5leHQpIHsKKyAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUgPSBzdGF0
aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPih0ZXh0QXR0cmlidXRlcy0+ZGF0YSk7CisgICAgICAgIGlm
ICghc3RyY21wKGF0a0F0dHJpYnV0ZS0+bmFtZSwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1l
KEFUS19URVhUX0FUVFJfTEFOR1VBR0UpKSkKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhnX3N0cmR1cF9wcmludGYoIkFYTGFuZ3VhZ2U6ICVzIiwgYXRr
QXR0cmlidXRlLT52YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
eCgpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihB
VEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CisKKyAgICBy
ZXR1cm4geDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkoKQoreworICAg
IGludCB4LCB5OworCisgICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVO
VChtX2VsZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOworCisgICAgcmV0dXJuIHk7Cit9
CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCgpCit7CisgICAgaW50IHdp
ZHRoLCBoZWlnaHQ7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQo
bV9lbGVtZW50KSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIHJldHVybiB3aWR0aDsKK30KKwor
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCgpCit7CisgICAgaW50IHdpZHRo
LCBoZWlnaHQ7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9l
bGVtZW50KSwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIHJldHVybiBoZWlnaHQ7Cit9CisKK2Rv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WCgpCit7CisgICAgLy8gTm90
ZTogVGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlIGhhdmUgaW4gQVRLLgorICAgIHJldHVybiAwLmY7
Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WSgpCit7Cisg
ICAgLy8gTm90ZTogVGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlIGhhdmUgaW4gQVRLLgorICAgIHJl
dHVybiAwLmY7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVu
dGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmludFZhbHVlKCkgY29uc3QKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAs
IHsgeyAwIH0gfSB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZB
TFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisgICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2
YWx1ZSkpCisgICAgICAgIHJldHVybiAwLjBmOworICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9h
dCgmdmFsdWUpOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUo
KQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07CisKKyAgICBpZiAoIUFU
S19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0a192
YWx1ZV9nZXRfbWluaW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKKyAg
ICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7
CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Cit9CisKK2RvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCit7CisgICAgR1ZhbHVlIHZhbHVlID0geyAw
LCB7IHsgMCB9IH0gfTsKKworICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAg
ICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVlX2dldF9tYXhpbXVtX3ZhbHVlKEFUS19W
QUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgm
dmFsdWUpKQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxv
YXQoJnZhbHVlKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFs
dWVEZXNjcmlwdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBhZnRlciBpdCBoYXMg
YmVlbiBpbXBsZW1lbnRlZCBpbiBBVEsuCisgICAgLy8gU2VlOiBodHRwczovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTc2CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrRWxlbWVudFN0YXRl
KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlwZSBzdGF0ZVR5cGUpCit7Cisg
ICAgaWYgKCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0
X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChlbGVtZW50KSkpOworICAgIHJldHVybiBhdGtfc3Rh
dGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBzdGF0ZVR5cGUpOworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIGNo
ZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX0VOQUJMRUQpOworfQorCitpbnQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNQcmVzc0FjdGlvblN1cHBvcnRlZCgpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0luY3JlbWVudEFjdGlvblN1cHBvcnRlZCgpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZCgpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1JlcXVpcmVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZCgp
IGNvbnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRH
UmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAg
ICBnYm9vbGVhbiBpc0ZvY3VzZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRl
U2V0LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNFRCk7CisKKyAgICByZXR1cm4gaXNGb2N1c2VkOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9TRUxFQ1RF
RCk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoaWVyYXJjaGljYWxMZXZlbCgp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFJc0dyYWJiZWQoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKK3sgICAKKyAgICByZXR1cm4gMDsgCit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFB
VEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdS
ZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0
YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAgICBnYm9vbGVhbiBpc0V4cGFuZGVk
ID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRF
X0VYUEFOREVEKTsKKworICAgIHJldHVybiBpc0V4cGFuZGVkOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFBVEtfSVNfT0JK
RUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8QXRr
U3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChB
VEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAgICBnYm9vbGVhbiBpc0NoZWNrZWQgPSBhdGtfc3Rh
dGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfQ0hFQ0tFRCk7
CisKKyAgICByZXR1cm4gaXNDaGVja2VkOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d0hlYWRlcnMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
fQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dz
KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQor
CitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
ZGV4SW5UYWJsZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOwor
fQorCitzdGF0aWMgSlNTdHJpbmdSZWYgaW5kZXhSYW5nZUluVGFibGUoUGxhdGZvcm1VSUVsZW1l
bnQgZWxlbWVudCwgYm9vbCBpc1Jvd1JhbmdlKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHJhbmdl
U3RyaW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7CisKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7
CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChlbGVtZW50KSk7CisKKyAgICBBdGtPYmplY3Qq
IGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50KSk7Cisg
ICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNfVEFCTEUoYXhUYWJsZSkpCisgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAg
ICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0aGUgdGFibGUuCisgICAgZ2ludCBpbmRleEluUGFy
ZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkp
OworICAgIGlmIChpbmRleEluUGFyZW50ID09IC0xKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOworCisgICAgaW50IHJvdyA9
IC0xOworICAgIGludCBjb2x1bW4gPSAtMTsKKyAgICByb3cgPSBhdGtfdGFibGVfZ2V0X3Jvd19h
dF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4SW5QYXJlbnQpOworICAgIGNvbHVtbiA9
IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJ
blBhcmVudCk7CisKKyAgICAvLyBHZXQgdGhlIGFjdHVhbCB2YWx1ZXMsIGlmIHJvdyBhbmQgY29s
dW1ucyBhcmUgdmFsaWQgdmFsdWVzLgorICAgIGlmIChyb3cgIT0gLTEgJiYgY29sdW1uICE9IC0x
KSB7CisgICAgICAgIGludCBiYXNlID0gMDsKKyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisgICAg
ICAgIGlmIChpc1Jvd1JhbmdlKSB7CisgICAgICAgICAgICBiYXNlID0gcm93OworICAgICAgICAg
ICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxl
KSwgcm93LCBjb2x1bW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZSA9IGNv
bHVtbjsKKyAgICAgICAgICAgIGxlbmd0aCA9IGF0a190YWJsZV9nZXRfY29sdW1uX2V4dGVudF9h
dChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBy
YW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJpbnRmKCJ7JWQsICVkfSIsIGJhc2UsIGxlbmd0aCkp
OworICAgIH0KKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5n
ZVN0cmluZy5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJvd0luZGV4UmFuZ2UoKQoreworICAgIC8vIFJhbmdlIGluIHRhYmxlIGZvciByb3dzLgorICAg
IHJldHVybiBpbmRleFJhbmdlSW5UYWJsZShtX2VsZW1lbnQsIHRydWUpOworfQorCitKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKCkKK3sKKyAgICAv
LyBSYW5nZSBpbiB0YWJsZSBmb3IgY29sdW1ucy4KKyAgICByZXR1cm4gaW5kZXhSYW5nZUluVGFi
bGUobV9lbGVtZW50LCBmYWxzZSk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojps
aW5lRm9ySW5kZXgoaW50KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
MDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFu
Z2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdl
KHVuc2lnbmVkLCB1bnNpZ25lZCkgCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfSAKKworSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKHVuc2ln
bmVkLCB1bnNpZ25lZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ1JhbmdlSXNNaXNzcGVsbGVkKHVuc2lnbmVkIGxv
Y2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAg
IHJldHVybiBmYWxzZTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9uTmV4dCwgSlNTdHJpbmdSZWYgc2Vh
cmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWdu
ZWQgcm93KQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7CisKKyAgICBBdGtPYmplY3QqIGZvdW5k
Q2VsbCA9IGF0a190YWJsZV9yZWZfYXQoQVRLX1RBQkxFKG1fZWxlbWVudCksIHJvdywgY29sdW1u
KTsKKyAgICByZXR1cm4gZm91bmRDZWxsID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChmb3VuZENl
bGwpIDogMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0
ZWRUZXh0UmFuZ2UoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYg
YXR0cmlidXRlKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVO
YW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgaWYgKGF0
a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGZvciAoR1NMaXN0KiBhdGtBdHRyaWJ1dGVzID0g
YXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhBVEtfT0JKRUNUKG1fZWxlbWVudCkpOyBhdGtBdHRy
aWJ1dGVzOyBhdGtBdHRyaWJ1dGVzID0gYXRrQXR0cmlidXRlcy0+bmV4dCkgeworICAgICAgICBB
dGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0
a0F0dHJpYnV0ZXMtPmRhdGEpOworICAgICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5h
bWUsIGF0a0F0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRrQXR0cmlidXRlLT52YWx1ZSk7CisgICAg
fQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisK
K2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0
cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biAwLjBmOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVW
YWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0
dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGFsdGVyQ3VycmVudFZhbHVlKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIGludCBmYWN0b3IpCit7CisgICAgaWYgKCFlbGVtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoQVRLX0lTX1ZBTFVFKGVsZW1lbnQpKTsKKwor
ICAgIEdWYWx1ZSBjdXJyZW50VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgYXRrX3ZhbHVlX2dl
dF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJmN1cnJlbnRWYWx1ZSk7CisKKyAg
ICBHVmFsdWUgaW5jcmVtZW50ID0gR19WQUxVRV9JTklUOworICAgIGF0a192YWx1ZV9nZXRfbWlu
aW11bV9pbmNyZW1lbnQoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmaW5jcmVtZW50KTsKKworICAgIEdW
YWx1ZSBuZXdWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVlX2luaXQoJm5ld1ZhbHVl
LCBHX1RZUEVfRkxPQVQpOworCisgICAgZ192YWx1ZV9zZXRfZmxvYXQoJm5ld1ZhbHVlLCBnX3Zh
bHVlX2dldF9mbG9hdCgmY3VycmVudFZhbHVlKSArIGZhY3RvciAqIGdfdmFsdWVfZ2V0X2Zsb2F0
KCZpbmNyZW1lbnQpKTsKKyAgICBhdGtfdmFsdWVfc2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVF
KGVsZW1lbnQpLCAmbmV3VmFsdWUpOworCisgICAgZ192YWx1ZV91bnNldCgmbmV3VmFsdWUpOwor
ICAgIGdfdmFsdWVfdW5zZXQoJmluY3JlbWVudCk7CisgICAgZ192YWx1ZV91bnNldCgmY3VycmVu
dFZhbHVlKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQoKQor
eworICAgIGFsdGVyQ3VycmVudFZhbHVlKG1fZWxlbWVudCwgMSk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50KCkKK3sKKyAgICBhbHRlckN1cnJlbnRWYWx1ZSht
X2VsZW1lbnQsIC0xKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcygp
Cit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChB
VEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgaWYgKCFBVEtfSVNfQUNUSU9OKG1fZWxl
bWVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE9ubHkgb25lIGFjdGlvbiBwZXIgb2Jq
ZWN0IGlzIHN1cHBvcnRlZCBzbyBmYXIuCisgICAgYXRrX2FjdGlvbl9kb19hY3Rpb24oQVRLX0FD
VElPTihtX2VsZW1lbnQpLCAwKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
aG93TWVudSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgodW5z
aWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQor
eworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7
Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlz
Y2xvc2VkQnlSb3coKQoreworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRF
bmNvZGluZygpCit7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtf
T0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZS
QU1FKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
KworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRf
Z2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSwgIkVuY29kaW5nIikp
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgp
Cit7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOworICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQorICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJp
YnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSwgIlVSSSIpKTsKK30KKworSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9
CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
SlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAorewor
ICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2Jq
ZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7CisgICAgZ2Jvb2xlYW4g
aXNGb2N1c2FibGUgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgp
LCBBVEtfU1RBVEVfRk9DVVNBQkxFKTsKKworICAgIHJldHVybiBpc0ZvY3VzYWJsZTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAoreworICAg
IHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9TRUxFQ1RBQkxF
KTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NU
QVRFX01VTFRJU0VMRUNUQUJMRSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1Zpc2libGUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWQoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Omhhc1BvcHVwKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cygp
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRTZWxlY3Rpb24oKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVT
ZWxlY3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtl
VmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3Rz
LnR4dAppbmRleCBjMDY4ZWE3Li42N2Y5MDVkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NN
YWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsNSBAQAogc2V0KER1bXBSZW5kZXJUcmVlX1NPVVJDRVMK
KyAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFj
a3NBdGsuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Q29tbW9uLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRh
bmN5Q2hlY2suY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxl
ci5jcHAKQEAgLTg4LDYgKzg5LDcgQEAgc2V0KER1bXBSZW5kZXJUcmVlX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vcnVudGltZQogICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfS9Gb3J3YXJkaW5nSGVhZGVycwogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVy
VHJlZQorICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9hdGsKICAgICAke1RPT0xTX0RJ
Un0vRHVtcFJlbmRlclRyZWUvY2Fpcm8KICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUv
ZWZsCiAgICAgJHtXVEZfRElSfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0Fj
Y2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
ZjJjODAyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmls
aXR5Q2FsbGJhY2tzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCIKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJXZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KLQotc3RhdGljIGd1aW50IHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IDA7Ci1zdGF0
aWMgZ3VpbnQgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IGFjdGl2ZURl
c2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgY2hpbGRyZW5DaGFu
Z2VkTGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgcHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJ
ZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0K
LXN0YXRpYyB2b2lkIHByaW50QWNjZXNzaWJpbGl0eUV2ZW50KEF0a09iamVjdCogYWNjZXNzaWJs
ZSwgY29uc3QgZ2NoYXIqIHNpZ25hbE5hbWUsIGNvbnN0IGdjaGFyKiBzaWduYWxWYWx1ZSkKLXsK
LSAgICAvLyBEbyBub3QgaGFuZGxlIHN0YXRlLWNoYW5nZTpkZWZ1bmN0IHNpZ25hbHMsIGFzIHRo
ZSBBdGtPYmplY3QKLSAgICAvLyBhc3NvY2lhdGVkIHRvIHRoZW0gd2lsbCBub3QgYmUgdmFsaWQg
YXQgdGhpcyBwb2ludCBhbHJlYWR5LgotICAgIGlmICghc2lnbmFsTmFtZSB8fCAhZ19zdHJjbXAw
KHNpZ25hbE5hbWUsICJzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCIpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGNvbnN0IGdjaGFyKiBvYmplY3ROYW1lID0gYXRrX29iamVjdF9n
ZXRfbmFtZShhY2Nlc3NpYmxlKTsKLSAgICBBdGtSb2xlIG9iamVjdFJvbGUgPSBhdGtfb2JqZWN0
X2dldF9yb2xlKGFjY2Vzc2libGUpOwotCi0gICAgLy8gVHJ5IHRvIGFsd2F5cyBwcm92aWRlIGEg
bmFtZSB0byBiZSBsb2dnZWQgZm9yIHRoZSBvYmplY3QuCi0gICAgaWYgKCFvYmplY3ROYW1lIHx8
ICpvYmplY3ROYW1lID09ICdcMCcpCi0gICAgICAgIG9iamVjdE5hbWUgPSAiKE5vIG5hbWUpIjsK
LQotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbE5hbWVBbmRWYWx1ZShzaWduYWxWYWx1ZSA/IGdf
c3RyZHVwX3ByaW50ZigiJXMgPSAlcyIsIHNpZ25hbE5hbWUsIHNpZ25hbFZhbHVlKSA6IGdfc3Ry
ZHVwKHNpZ25hbE5hbWUpKTsKLSAgICBwcmludGYoIkFjY2Vzc2liaWxpdHkgb2JqZWN0IGVtaXR0
ZWQgXCIlc1wiIC8gTmFtZTogXCIlc1wiIC8gUm9sZTogJWRcbiIsCi0gICAgICAgICAgIHNpZ25h
bE5hbWVBbmRWYWx1ZS5nZXQoKSwgb2JqZWN0TmFtZSwgb2JqZWN0Um9sZSk7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlzdGVuZXIoR1NpZ25hbEludm9jYXRpb25IaW50ICpz
aWduYWxIaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBu
dW1QYXJhbVZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR1ZhbHVlICpwYXJhbVZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBBdCBsZWFzdCB3ZSBzaG91bGQgcmVjZWl2
ZSB0aGUgaW5zdGFuY2UgZW1pdHRpbmcgdGhlIHNpZ25hbC4KLSAgICBpZiAobnVtUGFyYW1WYWx1
ZXMgPCAxKQotICAgICAgICByZXR1cm4gVFJVRTsKLQotICAgIEF0a09iamVjdCogYWNjZXNzaWJs
ZSA9IEFUS19PQkpFQ1QoZ192YWx1ZV9nZXRfb2JqZWN0KCZwYXJhbVZhbHVlc1swXSkpOwotICAg
IGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lTX09CSkVDVChhY2Nlc3NpYmxlKSkKLSAgICAgICAg
cmV0dXJuIFRSVUU7Ci0KLSAgICBHU2lnbmFsUXVlcnkgc2lnbmFsX3F1ZXJ5OwotICAgIEdPd25Q
dHI8Z2NoYXI+IHNpZ25hbE5hbWU7Ci0gICAgR093blB0cjxnY2hhcj4gc2lnbmFsVmFsdWU7Ci0K
LSAgICBnX3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxfcXVlcnkp
OwotCi0gICAgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAic3RhdGUt
Y2hhbmdlIikpIHsKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCJzdGF0
ZS1jaGFuZ2U6JXMiLCBnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVzWzFdKSkpOwotICAg
ICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X2Jv
b2xlYW4oJnBhcmFtVmFsdWVzWzJdKSkpOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWdu
YWxfcXVlcnkuc2lnbmFsX25hbWUsICJmb2N1cy1ldmVudCIpKSB7Ci0gICAgICAgIHNpZ25hbE5h
bWUuc2V0KGdfc3RyZHVwKCJmb2N1cy1ldmVudCIpKTsKLSAgICAgICAgc2lnbmFsVmFsdWUuc2V0
KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1sx
XSkpKTsKLSAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1l
LCAiY2hpbGRyZW4tY2hhbmdlZCIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVw
KCJjaGlsZHJlbi1jaGFuZ2VkIikpOwotICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBf
cHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X3VpbnQoJnBhcmFtVmFsdWVzWzFdKSkpOwotICAgIH0g
ZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJwcm9wZXJ0eS1j
aGFuZ2UiKSkgewotICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cF9wcmludGYoInByb3Bl
cnR5LWNoYW5nZTolcyIsIGdfcXVhcmtfdG9fc3RyaW5nKHNpZ25hbEhpbnQtPmRldGFpbCkpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXAoc2lnbmFsX3F1ZXJ5
LnNpZ25hbF9uYW1lKSk7Ci0KLSAgICBwcmludEFjY2Vzc2liaWxpdHlFdmVudChhY2Nlc3NpYmxl
LCBzaWduYWxOYW1lLmdldCgpLCBzaWduYWxWYWx1ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gVFJV
RTsKLX0KLQotdm9pZCBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpCi17Ci0gICAgLy8g
RW5zdXJlIG5vIGNhbGxiYWNrcyBhcmUgY29ubmVjdGVkIGJlZm9yZS4KLSAgICBkaXNjb25uZWN0
QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgYWNjZXNzaWJp
bGl0eSBpcyBpbml0aWFsaXplZCBmb3IgdGhlIFdlYlZpZXcgYnkgcXVlcnlpbmcgZm9yCi0gICAg
Ly8gdGhlIHJvb3QgYWNjZXNzaWJsZSBvYmplY3QsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBmdWxs
IGhpZXJhcmNoeS4KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3Np
YmxlRWxlbWVudChtYWluRnJhbWUpOwotCi0gICAgLy8gQWRkIGdsb2JhbCBsaXN0ZW5lcnMgZm9y
IEF0a09iamVjdCdzIHNpZ25hbHMuCi0gICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gYXRrX2Fk
ZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09i
amVjdDpzdGF0ZS1jaGFuZ2UiKTsKLSAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IGF0a19hZGRf
Z2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpBdGtPYmpl
Y3Q6Zm9jdXMtZXZlbnQiKTsKLSAgICBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQg
PSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJH
dGs6QXRrT2JqZWN0OmFjdGl2ZS1kZXNjZW5kYW50LWNoYW5nZWQiKTsKLSAgICBjaGlsZHJlbkNo
YW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RF
dmVudExpc3RlbmVyLCAiR3RrOkF0a09iamVjdDpjaGlsZHJlbi1jaGFuZ2VkIik7Ci0gICAgcHJv
cGVydHlDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4
T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpBdGtPYmplY3Q6cHJvcGVydHktY2hhbmdlIik7Ci0g
ICAgdmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpBdGtPYmplY3Q6dmlzaWJsZS1kYXRh
LWNoYW5nZWQiKTsKLQotICAgIC8vIEVuc3VyZSB0aGUgQXRrIGludGVyZmFjZSB0eXBlcyBhcmUg
cmVnaXN0ZXJlZCwgb3RoZXJ3aXNlCi0gICAgLy8gdGhlIEF0a0RvY3VtZW50IHNpZ25hbCBoYW5k
bGVycyBiZWxvdyB3b24ndCBnZXQgcmVnaXN0ZXJlZC4KLSAgICBHT2JqZWN0KiBkdW1teUF4T2Jq
ZWN0ID0gR19PQkpFQ1QoZ19vYmplY3RfbmV3KEFUS19UWVBFX09CSkVDVCwgMCkpOwotICAgIEF0
a09iamVjdCogZHVtbXlOb09wQXhPYmplY3QgPSBhdGtfbm9fb3Bfb2JqZWN0X25ldyhkdW1teUF4
T2JqZWN0KTsKLSAgICBnX29iamVjdF91bnJlZihHX09CSkVDVChkdW1teU5vT3BBeE9iamVjdCkp
OwotICAgIGdfb2JqZWN0X3VucmVmKGR1bW15QXhPYmplY3QpOwotfQotCi12b2lkIGRpc2Nvbm5l
Y3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkKLXsKLSAgICAvLyBBdGtPYmplY3Qgc2lnbmFscy4K
LSAgICBpZiAoc3RhdGVDaGFuZ2VMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xv
YmFsX2V2ZW50X2xpc3RlbmVyKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCk7Ci0gICAgICAgIHN0YXRl
Q2hhbmdlTGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChmb2N1c0V2ZW50TGlzdGVuZXJJ
ZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihmb2N1c0V2ZW50
TGlzdGVuZXJJZCk7Ci0gICAgICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0g
ICAgaWYgKGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtf
cmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3Rl
bmVySWQpOwotICAgICAgICBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOwot
ICAgIH0KLSAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtf
cmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkKTsK
LSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmIChw
cm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2
ZW50X2xpc3RlbmVyKHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpOwotICAgICAgICBwcm9wZXJ0
eUNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKHZpc2libGVEYXRhQ2hhbmdl
ZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIo
dmlzaWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIHZpc2libGVEYXRhQ2hhbmdl
ZExpc3RlbmVySWQgPSAwOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDcyMjU3NTcuLjAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vz
c2liaWxpdHlDYWxsYmFja3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEFjY2Vzc2liaWxpdHlDYWxs
YmFja3NfaAotI2RlZmluZSBBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzX2gKLQotdm9pZCBjb25uZWN0
QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOwotdm9pZCBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNh
bGxiYWNrcygpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCmluZGV4IDcwZjA4MWEuLjg0OGJhYTEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckd0ay5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyR3RrLmNwcApAQCAtMzcsNDAgKzM3LDYgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCi1zdGF0aWMgYm9vbCBs
b2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOwotCi1BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQotewotfQotCi1BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgs
IGludCB5KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQot
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVs
ZW1lbnQoKQotewotICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9ICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OmdldEZvY3VzZWRBY2Nlc3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwotICAgIGlm
ICghYWNjZXNzaWJsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKQotewotICAgIEF0a09iamVjdCog
YWNjZXNzaWJsZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVF
bGVtZW50KG1haW5GcmFtZSk7Ci0gICAgaWYgKCFhY2Nlc3NpYmxlKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOwotfQot
CiBzdGF0aWMgQXRrT2JqZWN0KiBjaGlsZEVsZW1lbnRCeUlkKEF0a09iamVjdCogcGFyZW50LCBj
b25zdCBjaGFyKiBpZCkKIHsKICAgICBpZiAoIUFUS19JU19PQkpFQ1QocGFyZW50KSkKQEAgLTk2
LDYgKzYyLDI0IEBAIHN0YXRpYyBBdGtPYmplY3QqIGNoaWxkRWxlbWVudEJ5SWQoQXRrT2JqZWN0
KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGlkKQogICAgIHJldHVybiAwOwogfQogCitBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCit7
CisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxlID0gIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
Z2V0Rm9jdXNlZEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7CisgICAgaWYgKCFhY2Nlc3Np
YmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGFjY2Vzc2libGUpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCit7CisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxl
ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRSb290QWNjZXNzaWJsZUVsZW1lbnQobWFp
bkZyYW1lKTsKKyAgICBpZiAoIWFjY2Vzc2libGUpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7Cit9CisKIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50
QnlJZChKU1N0cmluZ1JlZiBpZCkKIHsKICAgICBBdGtPYmplY3QqIHJvb3QgPSBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwpAQCAt
MTEzLDM5ICs5NywzIEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0cmluZ1JlCiAgICAgcmV0dXJuIDA7CiAK
IH0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nRm9jdXNFdmVudHMoYm9v
bCkKLXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nU2Nyb2xsaW5n
U3RhcnRFdmVudHMoYm9vbCkKLXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
c2V0TG9nVmFsdWVDaGFuZ2VFdmVudHMoYm9vbCkKLXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6c2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhib29sIGxvZ0FjY2Vzc2liaWxp
dHlFdmVudHMpCi17Ci0gICAgaWYgKGxvZ0FjY2Vzc2liaWxpdHlFdmVudHMgPT0gbG9nZ2luZ0Fj
Y2Vzc2liaWxpdHlFdmVudHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbG9nQWNjZXNz
aWJpbGl0eUV2ZW50cykgewotICAgICAgICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNr
cygpOwotICAgICAgICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsK
LSAgICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IHRydWU7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmKQot
ewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQotewotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCmluZGV4IDRhYjk5
OTUuLjMwZjdiNjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50R3RrLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKQEAgLTM3LDQwOCArMzcsNiBAQAogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CiAKLXN0YXRpYyBTdHJpbmcgY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKEpTU3Ry
aW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZShhdHRyaWJ1dGUpOwotICAgIEdPd25QdHI8Z2NoYXI+IGJ1
ZmZlcihzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7Ci0gICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhhdHRyaWJ1dGUsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7
Ci0KLSAgICBTdHJpbmcgYXR0cmlidXRlU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIu
Z2V0KCkpOwotICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYUGxhY2Vob2xkZXJWYWx1ZSIp
Ci0gICAgICAgIHJldHVybiAicGxhY2Vob2xkZXItdGV4dCI7Ci0KLSAgICByZXR1cm4gIiI7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHJvbGVUb1N0cmluZyhBdGtSb2xlIHJvbGUpCi17Ci0g
ICAgc3dpdGNoIChyb2xlKSB7Ci0gICAgY2FzZSBBVEtfUk9MRV9BTEVSVDoKLSAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYQWxlcnQiOwotICAgIGNhc2UgQVRLX1JPTEVfQ0FOVkFTOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhDYW52YXMiOwotICAgIGNhc2UgQVRLX1JPTEVfQ0hFQ0tfQk9Y
OgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDaGVja0JveCI7Ci0gICAgY2FzZSBBVEtfUk9M
RV9DT0xVTU5fSEVBREVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb2x1bW5IZWFkZXIi
OwotICAgIGNhc2UgQVRLX1JPTEVfQ09NQk9fQk9YOgotICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhDb21ib0JveCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRToKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYV2ViQXJlYSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9FTlRSWToKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVGV4dEZpZWxkIjsKLSAgICBjYXNlIEFUS19ST0xFX0ZP
T1RFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRm9vdGVyIjsKLSAgICBjYXNlIEFUS19S
T0xFX0ZPUk06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEZvcm0iOwotICAgIGNhc2UgQVRL
X1JPTEVfR1JPVVBJTkc6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsKLSAgICBj
YXNlIEFUS19ST0xFX0hFQURJTkc6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhlYWRpbmci
OwotICAgIGNhc2UgQVRLX1JPTEVfSU1BR0U6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWElt
YWdlIjsKLSAgICBjYXNlIEFUS19ST0xFX0lNQUdFX01BUDoKLSAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYSW1hZ2VNYXAiOwotICAgIGNhc2UgQVRLX1JPTEVfTEFCRUw6Ci0gICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWExhYmVsIjsKLSAgICBjYXNlIEFUS19ST0xFX0xJTks6Ci0gICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWExpbmsiOwotICAgIGNhc2UgQVRLX1JPTEVfTElTVDoKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYTGlzdCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MSVNUX0JPWDoKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdEJveCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MSVNU
X0lURU06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3RJdGVtIjsKLSAgICBjYXNlIEFU
S19ST0xFX01FTlU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnUiOwotICAgIGNhc2Ug
QVRLX1JPTEVfTUVOVV9CQVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnVCYXIiOwot
ICAgIGNhc2UgQVRLX1JPTEVfTUVOVV9JVEVNOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhN
ZW51SXRlbSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RBQjoKLSAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYVGFiIjsKLSAgICBjYXNlIEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFRhYkdyb3VwIjsKLSAgICBjYXNlIEFUS19ST0xFX1BBTkVMOgot
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhHcm91cCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQVJB
R1JBUEg6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBhcmFncmFwaCI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9QQVNTV09SRF9URVhUOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXNzd29y
ZEZpZWxkIjsKLSAgICBjYXNlIEFUS19ST0xFX1BVU0hfQlVUVE9OOgotICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhCdXR0b24iOwotICAgIGNhc2UgQVRLX1JPTEVfUkFESU9fQlVUVE9OOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhSYWRpb0J1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9S
T1dfSEVBREVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3dIZWFkZXIiOwotICAgIGNh
c2UgQVRLX1JPTEVfUlVMRVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJ1bGVyIjsKLSAg
ICBjYXNlIEFUS19ST0xFX1NDUk9MTF9CQVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNj
cm9sbEJhciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TQ1JPTExfUEFORToKLSAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYU2Nyb2xsQXJlYSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TRUNUSU9OOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhEaXYiOwotICAgIGNhc2UgQVRLX1JPTEVfU0VQQVJBVE9S
OgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhIb3Jpem9udGFsUnVsZSI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9TTElERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNsaWRlciI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9TUElOX0JVVFRPTjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU3Bp
bkJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UQUJMRToKLSAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYVGFibGUiOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfQ0VMTDoKLSAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYQ2VsbCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9DT0xVTU5fSEVB
REVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb2x1bW5IZWFkZXIiOwotICAgIGNhc2Ug
QVRLX1JPTEVfVEFCTEVfUk9XOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3ciOwotICAg
IGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XX0hFQURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYUm93SGVhZGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1RPR0dMRV9CVVRUT046Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFRvZ2dsZUJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UT09M
X0JBUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVG9vbGJhciI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9UT09MX1RJUDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVXNlckludGVyZmFjZVRv
b2x0aXAiOwotICAgIGNhc2UgQVRLX1JPTEVfVFJFRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYVHJlZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UUkVFX1RBQkxFOgotICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhUcmVlR3JpZCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UUkVFX0lURU06Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWFRyZWVJdGVtIjsKLSAgICBjYXNlIEFUS19ST0xFX1dJTkRP
VzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2luZG93IjsKLSAgICBjYXNlIEFUS19ST0xF
X1VOS05PV046Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFVua25vd24iOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gZGlzdGluZ3Vpc2ggQVRLX1JPTEVfVU5LTk9XTiBm
cm9tIGEga25vd24gQXRrUm9sZSB3aGljaAotICAgICAgICAvLyBvdXIgRFJUIGlzbid0IHByb3Bl
cmx5IGhhbmRsaW5nLgotICAgICAgICByZXR1cm4gIkFYUm9sZTogRklYTUUgbm90IGlkZW50aWZp
ZWQiOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNG
b3JSZXN1bHRzKGdjaGFyKiBzdHIpCi17Ci0gICAgU3RyaW5nIHVTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KHN0cik7Ci0KLSAgICAvLyBUaGUgb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBp
cyBwYXNzZWQgYWxvbmcgdG8gQVRzIHNvIHdlIG5lZWQgdG8gYmUKLSAgICAvLyBhYmxlIHRvIHRl
c3QgZm9yIHRoZWlyIHByZXNlbmNlIGFuZCBkbyBzbyB3aXRob3V0IGNhdXNpbmcgdGVzdCBmYWls
dXJlcy4KLSAgICB1U3RyaW5nLnJlcGxhY2Uob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsICI8
b2JqPiIpOwotCi0gICAgLy8gVGhlIHByZXNlbmNlIG9mIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBh
Y2Nlc3NpYmxlIHRleHQgb2YgYSBzaW5nbGUgb2JqZWN0Ci0gICAgLy8gaXMgYXBwcm9wcmlhdGUs
IGJ1dCBpdCBtYWtlcyB0ZXN0IHJlc3VsdHMgKGVzcGVjaWFsbHkgdGhlIGFjY2Vzc2libGUgdHJl
ZSkKLSAgICAvLyBoYXJkZXIgdG8gcmVhZC4KLSAgICB1U3RyaW5nLnJlcGxhY2UoIlxuIiwgIjxc
XG4+Iik7Ci0KLSAgICByZXR1cm4gZ19zdHJkdXAodVN0cmluZy51dGY4KCkuZGF0YSgpKTsKLX0K
LQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50KQotICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCi17Ci0gICAgaWYg
KG1fZWxlbWVudCkKLSAgICAgICAgZ19vYmplY3RfcmVmKG1fZWxlbWVudCk7Ci19Ci0KLUFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCYgb3RoZXIpCi0gICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQot
ewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQpOwot
fQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudCgpCi17
Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9lbGVtZW50KTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRMaW5rZWRVSUVsZW1lbnRzKFZl
Y3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudHMpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50
TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4o
VmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBjaGlsZHJlbikKLXsKLSAgICBpbnQgY291
bnQgPSBjaGlsZHJlbkNvdW50KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7Ci0gICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVu
ZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7Ci0gICAgfQotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiYgZWxlbWVudFZlY3RvciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7Ci0gICAg
ICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFU
S19PQkpFQ1QobV9lbGVtZW50KSwgaSk7Ci0gICAgICAgIGVsZW1lbnRWZWN0b3IuYXBwZW5kKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKLSAgICB9Ci19Ci0KLWludCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dDb3VudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQotICAg
IHJldHVybiBhdGtfdGFibGVfZ2V0X25fcm93cyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Ci19Ci0K
LWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCgpCi17Ci0gICAgaWYgKCFt
X2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19JU19UQUJMRSht
X2VsZW1lbnQpKTsKLQotICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFC
TEUobV9lbGVtZW50KSk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJl
bkNvdW50KCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKLQotICAgIHJldHVybiBhdGtfb2Jq
ZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLX0K
LQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50
QXRQb2ludChpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYXRrX2NvbXBvbmVu
dF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludChBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksIHgsIHks
IEFUS19YWV9XSU5ET1cpKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCi17Ci0gICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGNoaWxkcmVu
OwotICAgIGdldENoaWxkcmVuV2l0aFJhbmdlKGNoaWxkcmVuLCBpbmRleCwgaW5kZXggKyAxKTsK
LQotICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVu
LmF0KDApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmluZGV4T2ZDaGlsZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQoteyAK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWdjaGFyKiBhdHRy
aWJ1dGVTZXRUb1N0cmluZyhBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCkKLXsKLSAgICBH
U3RyaW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7Ci0gICAgZm9yIChHU0xpc3QqIGF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVTZXQ7IGF0dHJpYnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5u
ZXh0KSB7Ci0gICAgICAgIEF0a0F0dHJpYnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRr
QXR0cmlidXRlKj4oYXR0cmlidXRlcy0+ZGF0YSk7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0
dHJpYnV0ZURhdGEoZ19zdHJjb25jYXQoYXR0cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+
dmFsdWUsIE5VTEwpKTsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgYXR0cmlidXRlRGF0
YS5nZXQoKSk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLT5uZXh0KQotICAgICAgICAgICAgZ19z
dHJpbmdfYXBwZW5kKHN0ciwgIiwgIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdfc3RyaW5nX2Zy
ZWUoc3RyLCBGQUxTRSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFsbEF0dHJpYnV0ZXMoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIEFTU0VSVChBVEtfSVNf
T0JKRUNUKG1fZWxlbWVudCkpOwotICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoYXR0
cmlidXRlU2V0VG9TdHJpbmcoYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpKSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0
dHJpYnV0ZURhdGEuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3Vt
ZW50TGlua3MoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCi17Ci0gICAgaWYgKCFt
X2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQXRrUmVsYXRpb25TZXQqIHNldCA9
IGF0a19vYmplY3RfcmVmX3JlbGF0aW9uX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAg
IGlmICghc2V0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEF0a09iamVjdCogdGFyZ2V0ID0g
MDsKLSAgICBpbnQgY291bnQgPSBhdGtfcmVsYXRpb25fc2V0X2dldF9uX3JlbGF0aW9ucyhzZXQp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBBdGtSZWxh
dGlvbiogcmVsYXRpb24gPSBhdGtfcmVsYXRpb25fc2V0X2dldF9yZWxhdGlvbihzZXQsIGkpOwot
ICAgICAgICBpZiAoYXRrX3JlbGF0aW9uX2dldF9yZWxhdGlvbl90eXBlKHJlbGF0aW9uKSA9PSBB
VEtfUkVMQVRJT05fTEFCRUxMRURfQlkpIHsKLSAgICAgICAgICAgIEdQdHJBcnJheSogdGFyZ2V0
TGlzdCA9IGF0a19yZWxhdGlvbl9nZXRfdGFyZ2V0KHJlbGF0aW9uKTsKLSAgICAgICAgICAgIGlm
ICh0YXJnZXRMaXN0LT5sZW4pCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
QXRrT2JqZWN0Kj4oZ19wdHJfYXJyYXlfaW5kZXgodGFyZ2V0TGlzdCwgMCkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZ19vYmplY3RfdW5yZWYoc2V0KTsKLSAgICByZXR1cm4gdGFyZ2V0ID8g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCh0YXJnZXQpIDogMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50KCkKLXsKLSAgICBp
ZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09C
SkVDVChtX2VsZW1lbnQpKTsKLQotICAgIEF0a09iamVjdCogcGFyZW50ID0gIGF0a19vYmplY3Rf
Z2V0X3BhcmVudChBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIHJldHVybiBwYXJlbnQgPyBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KHBhcmVudCkgOiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJp
emVkQXR0cmlidXRlTmFtZXMoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCi17Ci0gICAgQXRrUm9sZSByb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIGlmICghcm9sZSkK
LSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAg
ICBTdHJpbmcgcm9sZVN0cmluZyA9IHJvbGVUb1N0cmluZyhyb2xlKTsKLSAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocm9sZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCi17Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVE
ZXNjcmlwdGlvbigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkKLXsKLSAgICBjb25zdCBnY2hhciogbmFtZSA9IGF0a19v
YmplY3RfZ2V0X25hbWUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBHT3duUHRyPGdjaGFy
PiBheFRpdGxlKGdfc3RyZHVwX3ByaW50ZigiQVhUaXRsZTogJXMiLCBuYW1lID8gbmFtZSA6ICIi
KSk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhUaXRsZS5n
ZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0
aW9uKCkKLXsKLSAgICBjb25zdCBnY2hhciogZGVzY3JpcHRpb24gPSBhdGtfb2JqZWN0X2dldF9k
ZXNjcmlwdGlvbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotCi0gICAgaWYgKCFkZXNjcmlwdGlv
bikKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0K
LSAgICBHT3duUHRyPGdjaGFyPiBheERlc2MoZ19zdHJkdXBfcHJpbnRmKCJBWERlc2NyaXB0aW9u
OiAlcyIsIGRlc2NyaXB0aW9uKSk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoYXhEZXNjLmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c3RyaW5nVmFsdWUoKQotewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNf
VEVYVChtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLQotICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RF
WFQobV9lbGVtZW50KSwgMCwgLTEpOwotICAgIEdPd25QdHI8Z2NoYXI+IGF4VmFsdWUoZ19zdHJk
dXBfcHJpbnRmKCJBWFZhbHVlOiAlcyIsIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyh0ZXh0
KSkpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhheFZhbHVlLmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIC8vIEluIEFU
SywgdGhlIGRvY3VtZW50IGxhbmd1YWdlIGlzIGV4cG9zZWQgYXMgdGhlIGRvY3VtZW50J3MgbG9j
YWxlLgotICAgIGlmIChhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSkg
PT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhnX3N0cmR1cF9wcmludGYoIkFYTGFuZ3VhZ2U6ICVzIiwgYXRrX2Rv
Y3VtZW50X2dldF9sb2NhbGUoQVRLX0RPQ1VNRU5UKG1fZWxlbWVudCkpKSk7Ci0KLSAgICAvLyBG
b3IgYWxsIG90aGVyIG9iamVjdHMsIHRoZSBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIGFuIEF0a1Rl
eHQgYXR0cmlidXRlLgotICAgIGlmICghQVRLX0lTX1RFWFQobV9lbGVtZW50KSkKLSAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBmb3IgKEdT
TGlzdCogdGV4dEF0dHJpYnV0ZXMgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEFU
S19URVhUKG1fZWxlbWVudCkpOyB0ZXh0QXR0cmlidXRlczsgdGV4dEF0dHJpYnV0ZXMgPSB0ZXh0
QXR0cmlidXRlcy0+bmV4dCkgewotICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9
IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KHRleHRBdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAg
ICAgaWYgKCFzdHJjbXAoYXRrQXR0cmlidXRlLT5uYW1lLCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0
X25hbWUoQVRLX1RFWFRfQVRUUl9MQU5HVUFHRSkpKQotICAgICAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMi
LCBhdGtBdHRyaWJ1dGUtPnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZWxlbWVudCkKQEAgLTQ1
MCw2MDkgKzQ4LDMgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRl
eHQoKSBjb25zdAogICAgIEdPd25QdHI8Z2NoYXI+IGF4SGVscFRleHQoZ19zdHJkdXBfcHJpbnRm
KCJBWEhlbHA6ICVzIiwgaGVscFRleHQuZGF0YSgpKSk7CiAgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGF4SGVscFRleHQuZ2V0KCkpOwogfQotCi1kb3VibGUgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6eCgpCi17Ci0gICAgaW50IHgsIHk7Ci0KLSAgICBhdGtfY29tcG9u
ZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZ
X1NDUkVFTik7Ci0KLSAgICByZXR1cm4geDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnkoKQotewotICAgIGludCB4LCB5OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfcG9z
aXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOwot
Ci0gICAgcmV0dXJuIHk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0
aCgpCi17Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9z
aXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAgIHJl
dHVybiB3aWR0aDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCgp
Ci17Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9zaXpl
KEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAmaGVpZ2h0KTsKLQotICAgIHJldHVy
biBoZWlnaHQ7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50
WCgpCi17Ci0gICAgLy8gTm90ZTogVGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlIGhhdmUgaW4gQVRL
LgotICAgIHJldHVybiAwLmY7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
bGlja1BvaW50WSgpCi17Ci0gICAgLy8gTm90ZTogVGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlIGhh
dmUgaW4gQVRLLgotICAgIHJldHVybiAwLmY7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQot
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKCkgY29uc3QKLXsKLSAgICBH
VmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OwotCi0gICAgaWYgKCFBVEtfSVNfVkFMVUUo
bV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBhdGtfdmFsdWVfZ2V0X2N1
cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7Ci0gICAgaWYgKCFHX1ZB
TFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiAwLjBmOwotICAgIHJldHVy
biBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUpOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bWluVmFsdWUoKQotewotICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9
IH07Ci0KLSAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4g
MC4wZjsKLQotICAgIGF0a192YWx1ZV9nZXRfbWluaW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVt
ZW50KSwgJnZhbHVlKTsKLSAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7
Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCi17Ci0gICAg
R1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKLQotICAgIGlmICghQVRLX0lTX1ZBTFVF
KG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgYXRrX3ZhbHVlX2dldF9t
YXhpbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwotICAgIGlmICghR19W
QUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICByZXR1
cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudCBhZnRlciBpdCBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiBBVEsuCi0gICAgLy8gU2VlOiBo
dHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTc2Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLXN0YXRpYyBib29s
IGNoZWNrRWxlbWVudFN0YXRlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIEF0a1N0YXRlVHlw
ZSBzdGF0ZVR5cGUpCi17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKQotICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBh
ZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QoZWxlbWVudCkpKTsK
LSAgICByZXR1cm4gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwg
c3RhdGVUeXBlKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQo
KQotewotICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9F
TkFCTEVEKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50
TGluZU51bWJlcigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQo
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0ZvY3VzZWQoKSBjb25zdAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0
PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVD
VChtX2VsZW1lbnQpKSk7Ci0gICAgZ2Jvb2xlYW4gaXNGb2N1c2VkID0gYXRrX3N0YXRlX3NldF9j
b250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTRUQpOwotCi0gICAg
cmV0dXJuIGlzRm9jdXNlZDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50
LCBBVEtfU1RBVEVfU0VMRUNURUQpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFi
YmVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gCi1KU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAoteyAgIAotICAgIHJl
dHVybiAwOyAKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkg
Y29uc3QKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdS
ZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOwotICAg
IGdib29sZWFuIGlzRXhwYW5kZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRl
U2V0LmdldCgpLCBBVEtfU1RBVEVfRVhQQU5ERUQpOwotCi0gICAgcmV0dXJuIGlzRXhwYW5kZWQ7
Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKLXsK
LSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29i
amVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOwotICAgIGdib29sZWFu
IGlzQ2hlY2tlZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCks
IEFUS19TVEFURV9DSEVDS0VEKTsKLQotICAgIHJldHVybiBpc0NoZWNrZWQ7Ci19Ci0KLUpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMo
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1K
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkhlYWRlcigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1pbnQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5U
YWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCi17Ci0gICAg
R093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKLQotICAgIGlm
ICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHJhbmdlU3RyaW5nLmdldCgpKTsKLQotICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKGVsZW1lbnQp
KTsKLQotICAgIEF0a09iamVjdCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtf
T0JKRUNUKGVsZW1lbnQpKTsKLSAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRh
YmxlKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdl
U3RyaW5nLmdldCgpKTsKLQotICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4K
LSAgICBnaW50IGluZGV4SW5QYXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQo
QVRLX09CSkVDVChlbGVtZW50KSk7Ci0gICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCi0gICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQo
KSk7Ci0KLSAgICBpbnQgcm93ID0gLTE7Ci0gICAgaW50IGNvbHVtbiA9IC0xOwotICAgIHJvdyA9
IGF0a190YWJsZV9nZXRfcm93X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBh
cmVudCk7Ci0gICAgY29sdW1uID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RB
QkxFKGF4VGFibGUpLCBpbmRleEluUGFyZW50KTsKLQotICAgIC8vIEdldCB0aGUgYWN0dWFsIHZh
bHVlcywgaWYgcm93IGFuZCBjb2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCi0gICAgaWYgKHJvdyAh
PSAtMSAmJiBjb2x1bW4gIT0gLTEpIHsKLSAgICAgICAgaW50IGJhc2UgPSAwOwotICAgICAgICBp
bnQgbGVuZ3RoID0gMDsKLSAgICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKLSAgICAgICAgICAgIGJh
c2UgPSByb3c7Ci0gICAgICAgICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRf
YXQoQVRLX1RBQkxFKGF4VGFibGUpLCByb3csIGNvbHVtbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBiYXNlID0gY29sdW1uOwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxl
X2dldF9jb2x1bW5fZXh0ZW50X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwot
ICAgICAgICB9Ci0gICAgICAgIHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwg
JWR9IiwgYmFzZSwgbGVuZ3RoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZSgpCi17Ci0gICAgLy8gUmFuZ2UgaW4g
dGFibGUgZm9yIHJvd3MuCi0gICAgcmV0dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudCwg
dHJ1ZSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbklu
ZGV4UmFuZ2UoKQotewotICAgIC8vIFJhbmdlIGluIHRhYmxlIGZvciBjb2x1bW5zLgotICAgIHJl
dHVybiBpbmRleFJhbmdlSW5UYWJsZShtX2VsZW1lbnQsIGZhbHNlKTsKLX0KLQotaW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQpCi17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKSAKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Ci19IAotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVk
U3RyaW5nRm9yUmFuZ2UodW5zaWduZWQsIHVuc2lnbmVkKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01p
c3NwZWxsZWQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0
ZShBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25O
ZXh0LCBKU1N0cmluZ1JlZiBzZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5z
aWduZWQgY29sdW1uLCB1bnNpZ25lZCByb3cpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQot
ICAgIEF0a09iamVjdCogZm91bmRDZWxsID0gYXRrX3RhYmxlX3JlZl9hdChBVEtfVEFCTEUobV9l
bGVtZW50KSwgcm93LCBjb2x1bW4pOwotICAgIHJldHVybiBmb3VuZENlbGwgPyBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KGZvdW5kQ2VsbCkgOiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1
dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0g
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAg
U3RyaW5nIGF0a0F0dHJpYnV0ZU5hbWUgPSBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoYXR0
cmlidXRlKTsKLSAgICBpZiAoYXRrQXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgZm9yIChHU0xp
c3QqIGF0a0F0dHJpYnV0ZXMgPSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSk7IGF0a0F0dHJpYnV0ZXM7IGF0a0F0dHJpYnV0ZXMgPSBhdGtBdHRyaWJ1dGVz
LT5uZXh0KSB7Ci0gICAgICAgIEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3RhdGljX2Nh
c3Q8QXRrQXR0cmlidXRlKj4oYXRrQXR0cmlidXRlcy0+ZGF0YSk7Ci0gICAgICAgIGlmICghc3Ry
Y21wKGF0a0F0dHJpYnV0ZS0+bmFtZSwgYXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKSkK
LSAgICAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtBdHRy
aWJ1dGUtPnZhbHVlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJl
ckF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIDAuMGY7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRl
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdS
ZWYgYXR0cmlidXRlKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgYWx0
ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKLXsK
LSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChBVEtfSVNf
VkFMVUUoZWxlbWVudCkpOwotCi0gICAgR1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5J
VDsKLSAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAm
Y3VycmVudFZhbHVlKTsKLQotICAgIEdWYWx1ZSBpbmNyZW1lbnQgPSBHX1ZBTFVFX0lOSVQ7Ci0g
ICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX2luY3JlbWVudChBVEtfVkFMVUUoZWxlbWVudCksICZp
bmNyZW1lbnQpOwotCi0gICAgR1ZhbHVlIG5ld1ZhbHVlID0gR19WQUxVRV9JTklUOwotICAgIGdf
dmFsdWVfaW5pdCgmbmV3VmFsdWUsIEdfVFlQRV9GTE9BVCk7Ci0KLSAgICBnX3ZhbHVlX3NldF9m
bG9hdCgmbmV3VmFsdWUsIGdfdmFsdWVfZ2V0X2Zsb2F0KCZjdXJyZW50VmFsdWUpICsgZmFjdG9y
ICogZ192YWx1ZV9nZXRfZmxvYXQoJmluY3JlbWVudCkpOwotICAgIGF0a192YWx1ZV9zZXRfY3Vy
cmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZuZXdWYWx1ZSk7Ci0KLSAgICBnX3ZhbHVl
X3Vuc2V0KCZuZXdWYWx1ZSk7Ci0gICAgZ192YWx1ZV91bnNldCgmaW5jcmVtZW50KTsKLSAgICBn
X3ZhbHVlX3Vuc2V0KCZjdXJyZW50VmFsdWUpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmluY3JlbWVudCgpCi17Ci0gICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAx
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZWNyZW1lbnQoKQotewotICAg
IGFsdGVyQ3VycmVudFZhbHVlKG1fZWxlbWVudCwgLTEpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnByZXNzKCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICBpZiAo
IUFUS19JU19BQ1RJT04obV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25s
eSBvbmUgYWN0aW9uIHBlciBvYmplY3QgaXMgc3VwcG9ydGVkIHNvIGZhci4KLSAgICBhdGtfYWN0
aW9uX2RvX2FjdGlvbihBVEtfQUNUSU9OKG1fZWxlbWVudCksIDApOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlz
Y2xvc2VkUm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQot
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0Vs
ZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVt
ZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5k
ZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93QXRJbmRleCh1bnNpZ25lZCBpbmRl
eCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRCeVJvdygpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgp
IGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKLXsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtf
b2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgaWYgKHJvbGUgIT0g
QVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGF0a19kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2Vs
ZW1lbnQpLCAiRW5jb2RpbmciKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRvY3VtZW50VVJJKCkKLXsKLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dl
dF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVf
RE9DVU1FTlRfRlJBTUUpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0
a19kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAi
VVJJIikpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRO
b3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Zv
Y3VzYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0
ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVu
dCkpKTsKLSAgICBnYm9vbGVhbiBpc0ZvY3VzYWJsZSA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNf
c3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0FCTEUpOwotCi0gICAgcmV0dXJu
IGlzRm9jdXNhYmxlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0
YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwg
QVRLX1NUQVRFX1NFTEVDVEFCTEUpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3Rh
dGUobV9lbGVtZW50LCBBVEtfU1RBVEVfTVVMVElTRUxFQ1RBQkxFKTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc09mZlNjcmVlbigpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZUZvY3VzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVj
dGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUo
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQg
eSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19CmRpZmYgLS1naXQgYS9Ub29scy9HTlVt
YWtlZmlsZS5hbSBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IGI5OTYxMDguLmNhZGEwMTkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL0dOVW1ha2VmaWxl
LmFtCkBAIC0xMDQsNiArMTA0LDcgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfQ1BQRkxBR1Mg
PSBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAktRFRPUF9MRVZFTF9ESVI9XCIke3NoZWxsIHB3
ZH0vJHtzcmNkaXJ9XCIgXAogCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlIFwKKwkt
SSQoc3JjZGlyKS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsgXAogCS1JJChzcmNkaXIpL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2NhaXJvIFwKIAktSSQoc3JjZGlyKS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrIFwKQEAgLTE0MywxMCArMTQ0
LDEyIEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJl
bmRlclRyZWUvV29ya1F1ZXVlLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZUl0
ZW0uaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY29uZmlnLmggXAorCVRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggXAorCVRvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcCBcCisgICAgCVRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAorCVRvb2xzL0R1
bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBcCiAJVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcCBcCiAJVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmggXAotCVRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggXAotCVRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmNwcCBcCiAJVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcCBcCiAJVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwIFwKIAlUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIFwK
</data>
<flag name="commit-queue"
          id="205753"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186345</attachid>
            <date>2013-02-04 04:15:20 -0800</date>
            <delta_ts>2013-02-11 02:54:40 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>a11y-share-drt.patch</filename>
            <type>text/plain</type>
            <size>92722</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGMx
NmUzLi5kYjRiMTA4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUyIEBACisyMDEzLTAyLTA0ICBLcnp5c3p0b2YgQ3plY2ggIDxr
LmN6ZWNoQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtHVEtdW0VGTF0gU2hhcmVzIFdlYktpdC1H
VEsncyBEdW1wUmVuZGVyVHJlZSBhY2Nlc3NpYmlsaXR5IGltcGxlbWVudGF0aW9uIHdpdGggb3Ro
ZXIgV2Via2l0IHBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDUwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTaGFyZXMgc3BlY2lmaWMgQVRLJ3MgYWNjZXNzaWJpbGl0eSBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgS2VlcHMgcGxhdGZvcm0gc3BlY2lmaWMgbWV0aG9kcyBpbiBFRkwgYW5kIEdU
SydzIGRpcmVjdG9yaWVzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlDYWxsYmFja3MuaDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0Fj
Y2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwLgorICAgICAgICAocHJpbnRBY2Nl
c3NpYmlsaXR5RXZlbnQpOgorICAgICAgICAoYXhPYmplY3RFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAgICAgKGRpc2Nvbm5lY3RB
Y2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwLgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dGb2N1c0V2ZW50cyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nU2Nyb2xsaW5nU3RhcnRFdmVudHMpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1ZhbHVlQ2hhbmdlRXZlbnRzKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRz
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0
ZW5lcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0
aW9uTGlzdGVuZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcDogQ29waWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwLgorICAgICAgICAoY29yZUF0dHJpYnV0ZVRvQXRr
QXR0cmlidXRlKToKKyAgICAgICAgKHJvbGVUb1N0cmluZyk6CisgICAgICAgIChyZXBsYWNlQ2hh
cmFjdGVyc0ZvclJlc3VsdHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpnZXRMaW5rZWRVSUVsZW1lbnRzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0
Q2hpbGRyZW4pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5X
aXRoUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291bnQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmRleE9mQ2hpbGQpOgorICAgICAgICAoYXR0cmlidXRlU2V0VG9TdHJpbmcpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlu
a3MpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbik6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVEZXNjcmlwdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
aXRsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbik6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aGVpZ2h0KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNsaWNrUG9pbnRYKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9p
bnRZKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Om1heFZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVl
RGVzY3JpcHRpb24pOgorICAgICAgICAoY2hlY2tFbGVtZW50U3RhdGUpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcik6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGll
cmFyY2hpY2FsTGV2ZWwpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlz
R3JhYmJlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRHJvcEVmZmVj
dHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSk6CisgICAgICAgIChpbmRleFJhbmdl
SW5UYWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdl
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRl
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3cp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQpOgorICAg
ICAgICAoYWx0ZXJDdXJyZW50VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5jcmVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVu
dCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcyk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkUm93QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmRpc2Nsb3NlZEJ5Um93KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFj
Y2Vzc2liaWxpdHlWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1
bWVudEVuY29kaW5nKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
VVJJKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcik6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcik6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1Zpc2libGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xs
YXBzZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlU2VsZWN0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFkZFNlbGVjdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVT
ZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtl
VmlzaWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VW
aXNpYmxlV2l0aFN1YkZvY3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxp
c3RzLnR4dDogQWRkcyBBVEsgaGVhZGVycywgbGlicmFyaWVzLCBuZXcgc291cmNlcy4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHA6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCk6CisgICAgICAgICogR05VbWFrZWZp
bGUuYW06IEFkZHMgcmVuYW1lZCBzb3VyY2VzLgorCiAyMDEzLTAxLTIzICBUb255IENoYW5nICA8
dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgc2V0IHN2bjplb2wtc3R5
bGUgdG8gQ1JMRiBvbiBXaW5kb3dzIC5zbG4gZmlsZXMuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43MjI1NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApAQCAtMCwwICsxLDM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzX2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eUNhbGxiYWNrc19oCisKK3ZvaWQgY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKK3ZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlD
YWxsYmFja3MoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9h
dGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWVhNGY0YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcApAQCAtMCwwICsxLDE3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgiCisKKyNpZiBIQVZFKEFDQ0VTU0lC
SUxJVFkpCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJXZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJEdW1wUmVuZGVy
VHJlZUNocm9tZS5oIgorI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbC5oIgorI2VuZGlmCisKK3N0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxpc3RlbmVySWQg
PSAwOworc3RhdGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWlu
dCBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IGNo
aWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdl
ZExpc3RlbmVySWQgPSAwOworc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVy
SWQgPSAwOworCitzdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmplY3Qq
IGFjY2Vzc2libGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hhciogc2lnbmFs
VmFsdWUpCit7CisgICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCBzaWdu
YWxzLCBhcyB0aGUgQXRrT2JqZWN0CisgICAgLy8gYXNzb2NpYXRlZCB0byB0aGVtIHdpbGwgbm90
IGJlIHZhbGlkIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KKyAgICBpZiAoIXNpZ25hbE5hbWUgfHwg
IWdfc3RyY21wMChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2li
bGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBnY2hhciogb2JqZWN0TmFtZSA9IGF0
a19vYmplY3RfZ2V0X25hbWUoYWNjZXNzaWJsZSk7CisgICAgQXRrUm9sZSBvYmplY3RSb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKKworICAgIC8vIFRyeSB0byBhbHdheXMg
cHJvdmlkZSBhIG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgorICAgIGlmICghb2Jq
ZWN0TmFtZSB8fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQorICAgICAgICBvYmplY3ROYW1lID0gIihO
byBuYW1lKSI7CisKKyAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFsdWUoc2lnbmFs
VmFsdWUgPyBnX3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBzaWduYWxWYWx1
ZSkgOiBnX3N0cmR1cChzaWduYWxOYW1lKSk7CisgICAgcHJpbnRmKCJBY2Nlc3NpYmlsaXR5IG9i
amVjdCBlbWl0dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLCBzaWduYWxO
YW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9uSGludCAqc2ln
bmFsSGludCwgZ3VpbnQgbnVtUGFyYW1WYWx1ZXMsIGNvbnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMs
IGdwb2ludGVyIGRhdGEpCit7CisgICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxkIHJlY2VpdmUgdGhl
IGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCisgICAgaWYgKG51bVBhcmFtVmFsdWVzIDwg
MSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSBB
VEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFyYW1WYWx1ZXNbMF0pKTsKKyAgICBpZiAo
IWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCisgICAgICAgIHJldHVy
biBUUlVFOworCisgICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbFF1ZXJ5OworICAgIEdPd25QdHI8Z2No
YXI+IHNpZ25hbE5hbWU7CisgICAgR093blB0cjxnY2hhcj4gc2lnbmFsVmFsdWU7CisKKyAgICBn
X3NpZ25hbF9xdWVyeShzaWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxRdWVyeSk7CisKKyAg
ICBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgInN0YXRlLWNoYW5nZSIp
KSB7CisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50Zigic3RhdGUtY2hhbmdl
OiVzIiwgZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVlc1sxXSkpKTsKKyAgICAgICAgc2ln
bmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF9ib29sZWFuKCZw
YXJhbVZhbHVlc1syXSkpKTsKKyAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnku
c2lnbmFsX25hbWUsICJmb2N1cy1ldmVudCIpKSB7CisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdf
c3RyZHVwKCJmb2N1cy1ldmVudCIpKTsKKyAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVw
X3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF9ib29sZWFuKCZwYXJhbVZhbHVlc1sxXSkpKTsKKyAg
ICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJjaGlsZHJl
bi1jaGFuZ2VkIikpIHsKKyAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXAoImNoaWxkcmVu
LWNoYW5nZWQiKSk7CisgICAgICAgIHNpZ25hbFZhbHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVk
IiwgZ192YWx1ZV9nZXRfdWludCgmcGFyYW1WYWx1ZXNbMV0pKSk7CisgICAgfSBlbHNlIGlmICgh
Z19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lLCAicHJvcGVydHktY2hhbmdlIikpCisg
ICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50ZigicHJvcGVydHktY2hhbmdlOiVz
IiwgZ19xdWFya190b19zdHJpbmcoc2lnbmFsSGludC0+ZGV0YWlsKSkpOworICAgIGVsc2UKKyAg
ICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUpKTsK
KworICAgIHByaW50QWNjZXNzaWJpbGl0eUV2ZW50KGFjY2Vzc2libGUsIHNpZ25hbE5hbWUuZ2V0
KCksIHNpZ25hbFZhbHVlLmdldCgpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIGNv
bm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkKK3sKKyAgICAvLyBFbnN1cmUgbm8gY2FsbGJh
Y2tzIGFyZSBjb25uZWN0ZWQgYmVmb3JlLgorICAgIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzKCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhY2Nlc3NpYmlsaXR5IGlzIGluaXRpYWxp
emVkIGZvciB0aGUgV2ViVmlldyBieSBxdWVyeWluZyBmb3IKKyAgICAvLyB0aGUgcm9vdCBhY2Nl
c3NpYmxlIG9iamVjdCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGZ1bGwgaGllcmFyY2h5LgorI2lm
IFBMQVRGT1JNKEdUSykKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nl
c3NpYmxlRWxlbWVudChtYWluRnJhbWUpOworI2VsaWYgUExBVEZPUk0oRUZMKQorICAgIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6cm9vdEFjY2Vzc2libGVFbGVtZW50KGJyb3dzZXItPm1haW5G
cmFtZSgpKTsKKyNlbmRpZgorCisgICAgLy8gQWRkIGdsb2JhbCBsaXN0ZW5lcnMgZm9yIEF0a09i
amVjdCdzIHNpZ25hbHMuCisgICAgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9i
YWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0a09iamVjdDpz
dGF0ZS1jaGFuZ2UiKTsKKyAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFs
X2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6Zm9j
dXMtZXZlbnQiKTsKKyAgICBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtf
YWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRr
T2JqZWN0OmFjdGl2ZS1kZXNjZW5kYW50LWNoYW5nZWQiKTsKKyAgICBjaGlsZHJlbkNoYW5nZWRM
aXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExp
c3RlbmVyLCAiQVRLOkF0a09iamVjdDpjaGlsZHJlbi1jaGFuZ2VkIik7CisgICAgcHJvcGVydHlD
aGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0
RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6cHJvcGVydHktY2hhbmdlIik7CisgICAgdmlz
aWJsZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVy
KGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6dmlzaWJsZS1kYXRhLWNoYW5n
ZWQiKTsKKworICAgIC8vIEVuc3VyZSB0aGUgQXRrIGludGVyZmFjZSB0eXBlcyBhcmUgcmVnaXN0
ZXJlZCwgb3RoZXJ3aXNlCisgICAgLy8gdGhlIEF0a0RvY3VtZW50IHNpZ25hbCBoYW5kbGVycyBi
ZWxvdyB3b24ndCBnZXQgcmVnaXN0ZXJlZC4KKyAgICBHT2JqZWN0KiBkdW1teUF4T2JqZWN0ID0g
R19PQkpFQ1QoZ19vYmplY3RfbmV3KEFUS19UWVBFX09CSkVDVCwgMCkpOworICAgIEF0a09iamVj
dCogZHVtbXlOb09wQXhPYmplY3QgPSBhdGtfbm9fb3Bfb2JqZWN0X25ldyhkdW1teUF4T2JqZWN0
KTsKKyAgICBnX29iamVjdF91bnJlZihHX09CSkVDVChkdW1teU5vT3BBeE9iamVjdCkpOworICAg
IGdfb2JqZWN0X3VucmVmKGR1bW15QXhPYmplY3QpOworfQorCit2b2lkIGRpc2Nvbm5lY3RBY2Nl
c3NpYmlsaXR5Q2FsbGJhY2tzKCkKK3sKKyAgICAvLyBBdGtPYmplY3Qgc2lnbmFscy4KKyAgICBp
ZiAoc3RhdGVDaGFuZ2VMaXN0ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2
ZW50X2xpc3RlbmVyKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCk7CisgICAgICAgIHN0YXRlQ2hhbmdl
TGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlmIChmb2N1c0V2ZW50TGlzdGVuZXJJZCkgewor
ICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihmb2N1c0V2ZW50TGlzdGVu
ZXJJZCk7CisgICAgICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYg
KGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3Zl
X2dsb2JhbF9ldmVudF9saXN0ZW5lcihhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQp
OworICAgICAgICBhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOworICAgIH0K
KyAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3Zl
X2dsb2JhbF9ldmVudF9saXN0ZW5lcihjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAg
ICAgY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlmIChwcm9wZXJ0
eUNoYW5nZWRMaXN0ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xp
c3RlbmVyKHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpOworICAgICAgICBwcm9wZXJ0eUNoYW5n
ZWRMaXN0ZW5lcklkID0gMDsKKyAgICB9CisgICAgaWYgKHZpc2libGVEYXRhQ2hhbmdlZExpc3Rl
bmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIodmlzaWJs
ZURhdGFDaGFuZ2VkTGlzdGVuZXJJZCk7CisgICAgICAgIHZpc2libGVEYXRhQ2hhbmdlZExpc3Rl
bmVySWQgPSAwOworICAgIH0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEwMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcApAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFl
bCBBbG9uem8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCisK
KyNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisKK3N0YXRpYyBib29sIGxv
Z2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7CisKK0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCit7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQgeCwg
aW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCisK
K3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKGJvb2wpCit7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1Njcm9sbGluZ1N0YXJ0
RXZlbnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExv
Z1ZhbHVlQ2hhbmdlRXZlbnRzKGJvb2wpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZl
bnRzKQoreworICAgIGlmIChsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzID09IGxvZ2dpbmdBY2Nlc3Np
YmlsaXR5RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxvZ0FjY2Vzc2liaWxp
dHlFdmVudHMpIHsKKyAgICAgICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsK
KyAgICAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7CisgICAg
bG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmMjA2NgotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApA
QCAtMCwwICsxLDEwNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFs
b256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKworI2lm
IEhBVkUoQUNDRVNTSUJJTElUWSkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmLmg+CisjaW5jbHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMu
aD4KKworc3RhdGljIFN0cmluZyBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoSlNTdHJpbmdS
ZWYgYXR0cmlidXRlKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKGF0dHJpYnV0ZSk7CisgICAgR093blB0cjxnY2hhcj4gYnVmZmVy
KHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKKyAgICBKU1N0cmlu
Z0dldFVURjhDU3RyaW5nKGF0dHJpYnV0ZSwgYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKwor
ICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQo
KSk7CisgICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRlclZhbHVlIikKKyAg
ICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKKworICAgIHJldHVybiAiIjsKK30KKwor
c3RhdGljIGlubGluZSBTdHJpbmcgcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKK3sKKyAgICBz
d2l0Y2ggKHJvbGUpIHsKKyAgICBjYXNlIEFUS19ST0xFX0FMRVJUOgorICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhBbGVydCI7CisgICAgY2FzZSBBVEtfUk9MRV9DQU5WQVM6CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWENhbnZhcyI7CisgICAgY2FzZSBBVEtfUk9MRV9DSEVDS19CT1g6Cisg
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENoZWNrQm94IjsKKyAgICBjYXNlIEFUS19ST0xFX0NP
TFVNTl9IRUFERVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbHVtbkhlYWRlciI7Cisg
ICAgY2FzZSBBVEtfUk9MRV9DT01CT19CT1g6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENv
bWJvQm94IjsKKyAgICBjYXNlIEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FOgorICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhXZWJBcmVhIjsKKyAgICBjYXNlIEFUS19ST0xFX0VOVFJZOgorICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhUZXh0RmllbGQiOworICAgIGNhc2UgQVRLX1JPTEVfRk9PVEVS
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhGb290ZXIiOworICAgIGNhc2UgQVRLX1JPTEVf
Rk9STToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRm9ybSI7CisgICAgY2FzZSBBVEtfUk9M
RV9HUk9VUElORzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOworICAgIGNhc2Ug
QVRLX1JPTEVfSEVBRElORzoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSGVhZGluZyI7Cisg
ICAgY2FzZSBBVEtfUk9MRV9JTUFHRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSW1hZ2Ui
OworICAgIGNhc2UgQVRLX1JPTEVfSU1BR0VfTUFQOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhJbWFnZU1hcCI7CisgICAgY2FzZSBBVEtfUk9MRV9MQUJFTDoKKyAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYTGFiZWwiOworICAgIGNhc2UgQVRLX1JPTEVfTElOSzoKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYTGluayI7CisgICAgY2FzZSBBVEtfUk9MRV9MSVNUOgorICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhMaXN0IjsKKyAgICBjYXNlIEFUS19ST0xFX0xJU1RfQk9YOgorICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhMaXN0Qm94IjsKKyAgICBjYXNlIEFUS19ST0xFX0xJU1RfSVRF
TToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdEl0ZW0iOworICAgIGNhc2UgQVRLX1JP
TEVfTUVOVToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudSI7CisgICAgY2FzZSBBVEtf
Uk9MRV9NRU5VX0JBUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudUJhciI7CisgICAg
Y2FzZSBBVEtfUk9MRV9NRU5VX0lURU06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnVJ
dGVtIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBR0VfVEFCOgorICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhUYWIiOworICAgIGNhc2UgQVRLX1JPTEVfUEFHRV9UQUJfTElTVDoKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYVGFiR3JvdXAiOworICAgIGNhc2UgQVRLX1JPTEVfUEFORUw6CisgICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBUkFHUkFQ
SDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUGFyYWdyYXBoIjsKKyAgICBjYXNlIEFUS19S
T0xFX1BBU1NXT1JEX1RFWFQ6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBhc3N3b3JkRmll
bGQiOworICAgIGNhc2UgQVRLX1JPTEVfUFVTSF9CVVRUT046CisgICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWEJ1dHRvbiI7CisgICAgY2FzZSBBVEtfUk9MRV9SQURJT19CVVRUT046CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFJhZGlvQnV0dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1JPV19I
RUFERVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvd0hlYWRlciI7CisgICAgY2FzZSBB
VEtfUk9MRV9SVUxFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUnVsZXIiOworICAgIGNh
c2UgQVRLX1JPTEVfU0NST0xMX0JBUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2Nyb2xs
QmFyIjsKKyAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9QQU5FOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhTY3JvbGxBcmVhIjsKKyAgICBjYXNlIEFUS19ST0xFX1NFQ1RJT046CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWERpdiI7CisgICAgY2FzZSBBVEtfUk9MRV9TRVBBUkFUT1I6Cisg
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhvcml6b250YWxSdWxlIjsKKyAgICBjYXNlIEFUS19S
T0xFX1NMSURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2xpZGVyIjsKKyAgICBjYXNl
IEFUS19ST0xFX1NQSU5fQlVUVE9OOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTcGluQnV0
dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1RBQkxFOgorICAgICAgICByZXR1cm4gIkFYUm9sZTog
QVhUYWJsZSI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9DRUxMOgorICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhDZWxsIjsKKyAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NPTFVNTl9IRUFERVI6
CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbHVtbkhlYWRlciI7CisgICAgY2FzZSBBVEtf
Uk9MRV9UQUJMRV9ST1c6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvdyI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9UQUJMRV9ST1dfSEVBREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhS
b3dIZWFkZXIiOworICAgIGNhc2UgQVRLX1JPTEVfVE9HR0xFX0JVVFRPTjoKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYVG9nZ2xlQnV0dG9uIjsKKyAgICBjYXNlIEFUS19ST0xFX1RPT0xfQkFS
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUb29sYmFyIjsKKyAgICBjYXNlIEFUS19ST0xF
X1RPT0xfVElQOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhVc2VySW50ZXJmYWNlVG9vbHRp
cCI7CisgICAgY2FzZSBBVEtfUk9MRV9UUkVFOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhU
cmVlIjsKKyAgICBjYXNlIEFUS19ST0xFX1RSRUVfVEFCTEU6CisgICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWFRyZWVHcmlkIjsKKyAgICBjYXNlIEFUS19ST0xFX1RSRUVfSVRFTToKKyAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYVHJlZUl0ZW0iOworICAgIGNhc2UgQVRLX1JPTEVfV0lORE9XOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhXaW5kb3ciOworICAgIGNhc2UgQVRLX1JPTEVfVU5L
Tk9XTjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVW5rbm93biI7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgLy8gV2Ugd2FudCB0byBkaXN0aW5ndWlzaCBBVEtfUk9MRV9VTktOT1dOIGZyb20g
YSBrbm93biBBdGtSb2xlIHdoaWNoCisgICAgICAgIC8vIG91ciBEUlQgaXNuJ3QgcHJvcGVybHkg
aGFuZGxpbmcuCisgICAgICAgIHJldHVybiAiQVhSb2xlOiBGSVhNRSBub3QgaWRlbnRpZmllZCI7
CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGdjaGFyKiByZXBsYWNlQ2hhcmFjdGVyc0ZvclJl
c3VsdHMoZ2NoYXIqIHN0cikKK3sKKyAgICBTdHJpbmcgdVN0cmluZyA9IFN0cmluZzo6ZnJvbVVU
Rjgoc3RyKTsKKworICAgIC8vIFRoZSBvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIHBh
c3NlZCBhbG9uZyB0byBBVHMgc28gd2UgbmVlZCB0byBiZQorICAgIC8vIGFibGUgdG8gdGVzdCBm
b3IgdGhlaXIgcHJlc2VuY2UgYW5kIGRvIHNvIHdpdGhvdXQgY2F1c2luZyB0ZXN0IGZhaWx1cmVz
LgorICAgIHVTdHJpbmcucmVwbGFjZShvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgIjxvYmo+
Iik7CisKKyAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgbmV3bGluZSBjaGFyYWN0ZXJzIGluIGFjY2Vz
c2libGUgdGV4dCBvZiBhIHNpbmdsZSBvYmplY3QKKyAgICAvLyBpcyBhcHByb3ByaWF0ZSwgYnV0
IGl0IG1ha2VzIHRlc3QgcmVzdWx0cyAoZXNwZWNpYWxseSB0aGUgYWNjZXNzaWJsZSB0cmVlKQor
ICAgIC8vIGhhcmRlciB0byByZWFkLgorICAgIHVTdHJpbmcucmVwbGFjZSgiXG4iLCAiPFxcbj4i
KTsKKworICAgIHJldHVybiBnX3N0cmR1cCh1U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworfQorCitB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlF
bGVtZW50IGVsZW1lbnQpCisgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKK3sKKyAgICBpZiAobV9l
bGVtZW50KQorICAgICAgICBnX29iamVjdF9yZWYobV9lbGVtZW50KTsKK30KKworQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50JiBvdGhlcikKKyAgICA6IG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCit7Cisg
ICAgaWYgKG1fZWxlbWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZWxlbWVudCk7Cit9CisK
K0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KCkKK3sKKyAg
ICBpZiAobV9lbGVtZW50KQorICAgICAgICBnX29iamVjdF91bnJlZihtX2VsZW1lbnQpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMoVmVjdG9y
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50cykKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5r
cyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbihWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNoaWxkcmVuKQoreworICAgIGludCBjb3VudCA9
IGNoaWxkcmVuQ291bnQoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
KyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+JiBlbGVtZW50VmVjdG9yLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKyAgICAgICAg
QXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09C
SkVDVChtX2VsZW1lbnQpLCBpKTsKKyAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBlbmQoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOworICAgIH0KK30KKworaW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJvd0NvdW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOworCisgICAgcmV0
dXJuIGF0a190YWJsZV9nZXRfbl9yb3dzKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKK30KKworaW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxl
bWVudCkpOworCisgICAgcmV0dXJuIGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKEFUS19UQUJMRSht
X2VsZW1lbnQpKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291
bnQoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFT
U0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgcmV0dXJuIGF0a19vYmplY3Rf
Z2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworfQorCitB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBv
aW50KGludCB4LCBpbnQgeSkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhdGtfY29tcG9uZW50X3Jl
Zl9hY2Nlc3NpYmxlX2F0X3BvaW50KEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgeCwgeSwgQVRL
X1hZX1dJTkRPVykpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY2hpbGRyZW47Cisg
ICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRyZW4sIGluZGV4LCBpbmRleCArIDEpOworCisg
ICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gY2hpbGRyZW4uYXQo
MCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCit7IAorICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworZ2NoYXIqIGF0dHJpYnV0
ZVNldFRvU3RyaW5nKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0KQoreworICAgIEdTdHJp
bmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKKyAgICBmb3IgKEdTTGlzdCogYXR0cmlidXRlcyA9
IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMtPm5leHQp
IHsKKyAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRy
aWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKKyAgICAgICAgR093blB0cjxnY2hhcj4gYXR0cmli
dXRlRGF0YShnX3N0cmNvbmNhdChhdHRyaWJ1dGUtPm5hbWUsICI6IiwgYXR0cmlidXRlLT52YWx1
ZSwgTlVMTCkpOworICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBhdHRyaWJ1dGVEYXRhLmdl
dCgpKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMtPm5leHQpCisgICAgICAgICAgICBnX3N0cmlu
Z19hcHBlbmQoc3RyLCAiLCAiKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShz
dHIsIEZBTFNFKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxs
QXR0cmlidXRlcygpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgQVNTRVJUKEFUS19JU19PQkpF
Q1QobV9lbGVtZW50KSk7CisgICAgR093blB0cjxnY2hhcj4gYXR0cmlidXRlRGF0YShhdHRyaWJ1
dGVTZXRUb1N0cmluZyhhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSkpKTsKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmli
dXRlRGF0YS5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwor
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRM
aW5rcygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KCkKK3sKKyAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtSZWxhdGlvblNldCogc2V0ID0gYXRr
X29iamVjdF9yZWZfcmVsYXRpb25fc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYg
KCFzZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQXRrT2JqZWN0KiB0YXJnZXQgPSAwOwor
ICAgIGludCBjb3VudCA9IGF0a19yZWxhdGlvbl9zZXRfZ2V0X25fcmVsYXRpb25zKHNldCk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEF0a1JlbGF0aW9u
KiByZWxhdGlvbiA9IGF0a19yZWxhdGlvbl9zZXRfZ2V0X3JlbGF0aW9uKHNldCwgaSk7CisgICAg
ICAgIGlmIChhdGtfcmVsYXRpb25fZ2V0X3JlbGF0aW9uX3R5cGUocmVsYXRpb24pID09IEFUS19S
RUxBVElPTl9MQUJFTExFRF9CWSkgeworICAgICAgICAgICAgR1B0ckFycmF5KiB0YXJnZXRMaXN0
ID0gYXRrX3JlbGF0aW9uX2dldF90YXJnZXQocmVsYXRpb24pOworICAgICAgICAgICAgaWYgKHRh
cmdldExpc3QtPmxlbikKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBzdGF0aWNfY2FzdDxBdGtP
YmplY3QqPihnX3B0cl9hcnJheV9pbmRleCh0YXJnZXRMaXN0LCAwKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBnX29iamVjdF91bnJlZihzZXQpOworICAgIHJldHVybiB0YXJnZXQgPyBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KHRhcmdldCkgOiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQoreworICAgIGlmICgh
bV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNU
KG1fZWxlbWVudCkpOworCisgICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAgYXRrX29iamVjdF9nZXRf
cGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgcmV0dXJuIHBhcmVudCA/IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVOYW1lcygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2Jq
ZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYgKCFyb2xlKQorICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFN0
cmluZyByb2xlU3RyaW5nID0gcm9sZVRvU3RyaW5nKHJvbGUpOworICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyb2xlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKK3sKKyAgICByZXR1
cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2Ny
aXB0aW9uKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGUoKQoreworICAgIGNvbnN0IGdjaGFyKiBuYW1lID0gYXRrX29iamVj
dF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIEdPd25QdHI8Z2NoYXI+IGF4
VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRpdGxlOiAlcyIsIG5hbWUgPyBuYW1lIDogIiIpKTsK
KworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheFRpdGxlLmdldCgp
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24o
KQoreworICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlvbiA9IGF0a19vYmplY3RfZ2V0X2Rlc2Ny
aXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IEdPd25QdHI8Z2NoYXI+IGF4RGVzYyhnX3N0cmR1cF9wcmludGYoIkFYRGVzY3JpcHRpb246ICVz
IiwgZGVzY3JpcHRpb24pKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhheERlc2MuZ2V0KCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdWYWx1ZSgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19URVhU
KG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworCisgICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVCht
X2VsZW1lbnQpLCAwLCAtMSk7CisgICAgR093blB0cjxnY2hhcj4gYXhWYWx1ZShnX3N0cmR1cF9w
cmludGYoIkFYVmFsdWU6ICVzIiwgcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKHRleHQpKSk7
CisgICAgZ19mcmVlKHRleHQpOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGF4VmFsdWUuZ2V0KCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsYW5ndWFnZSgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgLy8gSW4gQVRLLCB0
aGUgZG9jdW1lbnQgbGFuZ3VhZ2UgaXMgZXhwb3NlZCBhcyB0aGUgZG9jdW1lbnQncyBsb2NhbGUu
CisgICAgaWYgKGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKSA9PSBB
VEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMiLCBhdGtfZG9jdW1l
bnRfZ2V0X2xvY2FsZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSkpKTsKKworICAgIC8vIEZvciBh
bGwgb3RoZXIgb2JqZWN0cywgdGhlIGxhbmd1YWdlIGlzIGV4cG9zZWQgYXMgYW4gQXRrVGV4dCBh
dHRyaWJ1dGUuCisgICAgaWYgKCFBVEtfSVNfVEVYVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIGZvciAoR1NMaXN0
KiB0ZXh0QXR0cmlidXRlcyA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoQVRLX1RF
WFQobV9lbGVtZW50KSk7IHRleHRBdHRyaWJ1dGVzOyB0ZXh0QXR0cmlidXRlcyA9IHRleHRBdHRy
aWJ1dGVzLT5uZXh0KSB7CisgICAgICAgIEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3Rh
dGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4odGV4dEF0dHJpYnV0ZXMtPmRhdGEpOworICAgICAgICBp
ZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShBVEtfVEVYVF9BVFRSX0xBTkdVQUdFKSkpCisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdlOiAlcyIsIGF0
a0F0dHJpYnV0ZS0+dmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OngoKQoreworICAgIGludCB4LCB5OworCisgICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24o
QVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOworCisgICAg
cmV0dXJuIHg7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKK3sKKyAg
ICBpbnQgeCwgeTsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05F
TlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKKworICAgIHJldHVybiB5Owor
fQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQoreworICAgIGludCB3
aWR0aCwgaGVpZ2h0OworCisgICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5U
KG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisK
K2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQoKQoreworICAgIGludCB3aWR0
aCwgaGVpZ2h0OworCisgICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1f
ZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICByZXR1cm4gaGVpZ2h0OworfQorCitk
b3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFgoKQoreworICAgIC8vIE5v
dGU6IFRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBoYXZlIGluIEFUSy4KKyAgICByZXR1cm4gMC5m
OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkoKQorewor
ICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBoYXZlIGluIEFUSy4KKyAgICBy
ZXR1cm4gMC5mOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpvcmll
bnRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0Cit7CisgICAgR1ZhbHVlIHZhbHVlID0geyAw
LCB7IHsgMCB9IH0gfTsKKworICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAg
ICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19W
QUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgm
dmFsdWUpKQorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxv
YXQoJnZhbHVlKTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVl
KCkKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OworCisgICAgaWYgKCFB
VEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtf
dmFsdWVfZ2V0X21pbmltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7Cisg
ICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiAwLjBm
OworICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUpOworfQorCitkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsg
MCwgeyB7IDAgfSB9IH07CisKKyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0a192YWx1ZV9nZXRfbWF4aW11bV92YWx1ZShBVEtf
VkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKKyAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQo
JnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zs
b2F0KCZ2YWx1ZSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZh
bHVlRGVzY3JpcHRpb24oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgYWZ0ZXIgaXQgaGFz
IGJlZW4gaW1wbGVtZW50ZWQgaW4gQVRLLgorICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5n
bm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDU3NgorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitzdGF0aWMgYm9vbCBjaGVja0VsZW1lbnRTdGF0
ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBBdGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQorewor
ICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVj
dF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QoZWxlbWVudCkpKTsKKyAgICByZXR1cm4gYXRrX3N0
YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQoreworICAgIHJldHVybiBj
aGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9FTkFCTEVEKTsKK30KKworaW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcigpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNSZXF1aXJlZCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWQo
KSBjb25zdAoreworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0
R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Cisg
ICAgZ2Jvb2xlYW4gaXNGb2N1c2VkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0
ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTRUQpOworCisgICAgcmV0dXJuIGlzRm9jdXNlZDsK
K30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVfU0VMRUNU
RUQpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGllcmFyY2hpY2FsTGV2ZWwo
KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0Cit7ICAgCisgICAgcmV0dXJuIDA7IAorfQorCitib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQoKSBjb25zdAoreworICAgIGlmICgh
QVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBH
UmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9z
dGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7CisgICAgZ2Jvb2xlYW4gaXNFeHBhbmRl
ZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFU
RV9FWFBBTkRFRCk7CisKKyAgICByZXR1cm4gaXNFeHBhbmRlZDsKK30KKworYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAoreworICAgIGlmICghQVRLX0lTX09C
SkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEF0
a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQo
QVRLX09CSkVDVChtX2VsZW1lbnQpKSk7CisgICAgZ2Jvb2xlYW4gaXNDaGVja2VkID0gYXRrX3N0
YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0NIRUNLRUQp
OworCisgICAgcmV0dXJuIGlzQ2hlY2tlZDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZS
b3dIZWFkZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93
cygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30K
KworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVy
KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bmRleEluVGFibGUoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsK
K30KKworc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVt
ZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKK3sKKyAgICBHT3duUHRyPGdjaGFyPiByYW5n
ZVN0cmluZyhnX3N0cmR1cCgiezAsIDB9IikpOworCisgICAgaWYgKCFlbGVtZW50KQorICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkp
OworCisgICAgQVNTRVJUKEFUS19JU19PQkpFQ1QoZWxlbWVudCkpOworCisgICAgQXRrT2JqZWN0
KiBheFRhYmxlID0gYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QoZWxlbWVudCkpOwor
ICAgIGlmICghYXhUYWJsZSB8fCAhQVRLX0lTX1RBQkxFKGF4VGFibGUpKQorICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOworCisg
ICAgLy8gTG9vayBmb3IgdGhlIGNlbGwgaW4gdGhlIHRhYmxlLgorICAgIGdpbnQgaW5kZXhJblBh
cmVudCA9IGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQp
KTsKKyAgICBpZiAoaW5kZXhJblBhcmVudCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKworICAgIGludCByb3cg
PSAtMTsKKyAgICBpbnQgY29sdW1uID0gLTE7CisgICAgcm93ID0gYXRrX3RhYmxlX2dldF9yb3df
YXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRleEluUGFyZW50KTsKKyAgICBjb2x1bW4g
PSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4
SW5QYXJlbnQpOworCisgICAgLy8gR2V0IHRoZSBhY3R1YWwgdmFsdWVzLCBpZiByb3cgYW5kIGNv
bHVtbnMgYXJlIHZhbGlkIHZhbHVlcy4KKyAgICBpZiAocm93ICE9IC0xICYmIGNvbHVtbiAhPSAt
MSkgeworICAgICAgICBpbnQgYmFzZSA9IDA7CisgICAgICAgIGludCBsZW5ndGggPSAwOworICAg
ICAgICBpZiAoaXNSb3dSYW5nZSkgeworICAgICAgICAgICAgYmFzZSA9IHJvdzsKKyAgICAgICAg
ICAgIGxlbmd0aCA9IGF0a190YWJsZV9nZXRfcm93X2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJs
ZSksIHJvdywgY29sdW1uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2UgPSBj
b2x1bW47CisgICAgICAgICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9leHRlbnRf
YXQoQVRLX1RBQkxFKGF4VGFibGUpLCByb3csIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAg
cmFuZ2VTdHJpbmcuc2V0KGdfc3RyZHVwX3ByaW50ZigieyVkLCAlZH0iLCBiYXNlLCBsZW5ndGgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFu
Z2VTdHJpbmcuZ2V0KCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb3dJbmRleFJhbmdlKCkKK3sKKyAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3Igcm93cy4KKyAg
ICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCB0cnVlKTsKK30KKworSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZSgpCit7CisgICAg
Ly8gUmFuZ2UgaW4gdGFibGUgZm9yIGNvbHVtbnMuCisgICAgcmV0dXJuIGluZGV4UmFuZ2VJblRh
YmxlKG1fZWxlbWVudCwgZmFsc2UpOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bGluZUZvckluZGV4KGludCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJh
bmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5n
ZSh1bnNpZ25lZCwgdW5zaWduZWQpIAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30gCisKK0pTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZSh1bnNp
Z25lZCwgdW5zaWduZWQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCBs
b2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRlKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQqIHN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlvbk5leHQsIEpTU3RyaW5nUmVmIHNl
YXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sIHVuc2ln
bmVkIHJvdykKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOworCisgICAgQXRrT2JqZWN0KiBmb3Vu
ZENlbGwgPSBhdGtfdGFibGVfcmVmX2F0KEFUS19UQUJMRShtX2VsZW1lbnQpLCByb3csIGNvbHVt
bik7CisgICAgcmV0dXJuIGZvdW5kQ2VsbCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoZm91bmRD
ZWxsKSA6IDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVj
dGVkVGV4dFJhbmdlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVm
IGF0dHJpYnV0ZSkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBTdHJpbmcgYXRrQXR0cmlidXRl
TmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgIGlmIChh
dGtBdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBmb3IgKEdTTGlzdCogYXRrQXR0cmlidXRlcyA9
IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsgYXRrQXR0
cmlidXRlczsgYXRrQXR0cmlidXRlcyA9IGF0a0F0dHJpYnV0ZXMtPm5leHQpIHsKKyAgICAgICAg
QXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihh
dGtBdHRyaWJ1dGVzLT5kYXRhKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoYXRrQXR0cmlidXRlLT5u
YW1lLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a0F0dHJpYnV0ZS0+dmFsdWUpOworICAg
IH0KKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQor
Citkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNT
dHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1
cm4gMC4wZjsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib29sQXR0cmlidXRl
VmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNB
dHRyaWJ1dGVTZXR0YWJsZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0
Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQoreworICAgIGlmICghZWxlbWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKEFUS19JU19WQUxVRShlbGVtZW50KSk7CisK
KyAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGF0a192YWx1ZV9n
ZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCksICZjdXJyZW50VmFsdWUpOworCisg
ICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVfSU5JVDsKKyAgICBhdGtfdmFsdWVfZ2V0X21p
bmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVtZW50KSwgJmluY3JlbWVudCk7CisKKyAgICBH
VmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgZ192YWx1ZV9pbml0KCZuZXdWYWx1
ZSwgR19UWVBFX0ZMT0FUKTsKKworICAgIGdfdmFsdWVfc2V0X2Zsb2F0KCZuZXdWYWx1ZSwgZ192
YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkgKyBmYWN0b3IgKiBnX3ZhbHVlX2dldF9mbG9h
dCgmaW5jcmVtZW50KSk7CisgICAgYXRrX3ZhbHVlX3NldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxV
RShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKKworICAgIGdfdmFsdWVfdW5zZXQoJm5ld1ZhbHVlKTsK
KyAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQpOworICAgIGdfdmFsdWVfdW5zZXQoJmN1cnJl
bnRWYWx1ZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkK
K3sKKyAgICBhbHRlckN1cnJlbnRWYWx1ZShtX2VsZW1lbnQsIDEpOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCgpCit7CisgICAgYWx0ZXJDdXJyZW50VmFsdWUo
bV9lbGVtZW50LCAtMSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3Mo
KQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
QVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlmICghQVRLX0lTX0FDVElPTihtX2Vs
ZW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPbmx5IG9uZSBhY3Rpb24gcGVyIG9i
amVjdCBpcyBzdXBwb3J0ZWQgc28gZmFyLgorICAgIGF0a19hY3Rpb25fZG9fYWN0aW9uKEFUS19B
Q1RJT04obV9lbGVtZW50KSwgMCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2hvd01lbnUoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4KHVu
c2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KHVuc2lnbmVk
IGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkUm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiAw
OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRp
c2Nsb3NlZEJ5Um93KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVlKCkgY29uc3QKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
RW5jb2RpbmcoKQoreworICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRL
X09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICBpZiAocm9sZSAhPSBBVEtfUk9MRV9ET0NVTUVOVF9G
UkFNRSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRrX2RvY3VtZW50
X2dldF9hdHRyaWJ1dGVfdmFsdWUoQVRLX0RPQ1VNRU5UKG1fZWxlbWVudCksICJFbmNvZGluZyIp
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkko
KQoreworICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVCht
X2VsZW1lbnQpKTsKKyAgICBpZiAocm9sZSAhPSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRrX2RvY3VtZW50X2dldF9hdHRy
aWJ1dGVfdmFsdWUoQVRLX0RPQ1VNRU5UKG1fZWxlbWVudCksICJVUkkiKSk7Cit9CisKK0pTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
KEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKK3sK
KyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29i
amVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIGdib29sZWFu
IGlzRm9jdXNhYmxlID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQo
KSwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7CisKKyAgICByZXR1cm4gaXNGb2N1c2FibGU7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVfU0VMRUNUQUJM
RSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGUo
KSBjb25zdAoreworICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQsIEFUS19T
VEFURV9NVUxUSVNFTEVDVEFCTEUpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpoYXNQb3B1cCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2VsZWN0aW9uKCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3Zl
U2VsZWN0aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFr
ZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0
cy50eHQKaW5kZXggYzA2OGVhNy4uNjdmOTA1ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9D
TWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDUgQEAKIHNldChEdW1wUmVuZGVyVHJlZV9TT1VSQ0VT
CisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzQXRrLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZUNvbW1vbi5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5k
YW5jeUNoZWNrLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xs
ZXIuY3BwCkBAIC04OCw2ICs4OSw3IEBAIHNldChEdW1wUmVuZGVyVHJlZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3J1bnRpbWUKICAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRl
clRyZWUKKyAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvYXRrCiAgICAgJHtUT09MU19E
SVJ9L0R1bXBSZW5kZXJUcmVlL2NhaXJvCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVl
L2VmbAogICAgICR7V1RGX0RJUn0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGYyYzgwMi4uMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJp
bGl0eUNhbGxiYWNrcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgiCi0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCi0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+Ci0KLXN0YXRpYyBndWludCBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSAwOwotc3Rh
dGljIGd1aW50IGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gMDsKLXN0YXRpYyBndWludCBhY3RpdmVE
ZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IGNoaWxkcmVuQ2hh
bmdlZExpc3RlbmVySWQgPSAwOwotc3RhdGljIGd1aW50IHByb3BlcnR5Q2hhbmdlZExpc3RlbmVy
SWQgPSAwOwotc3RhdGljIGd1aW50IHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSAwOwot
Ci1zdGF0aWMgdm9pZCBwcmludEFjY2Vzc2liaWxpdHlFdmVudChBdGtPYmplY3QqIGFjY2Vzc2li
bGUsIGNvbnN0IGdjaGFyKiBzaWduYWxOYW1lLCBjb25zdCBnY2hhciogc2lnbmFsVmFsdWUpCi17
Ci0gICAgLy8gRG8gbm90IGhhbmRsZSBzdGF0ZS1jaGFuZ2U6ZGVmdW5jdCBzaWduYWxzLCBhcyB0
aGUgQXRrT2JqZWN0Ci0gICAgLy8gYXNzb2NpYXRlZCB0byB0aGVtIHdpbGwgbm90IGJlIHZhbGlk
IGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KLSAgICBpZiAoIXNpZ25hbE5hbWUgfHwgIWdfc3RyY21w
MChzaWduYWxOYW1lLCAic3RhdGUtY2hhbmdlOmRlZnVuY3QiKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBnY2hhciogb2JqZWN0TmFtZSA9IGF0a19vYmplY3Rf
Z2V0X25hbWUoYWNjZXNzaWJsZSk7Ci0gICAgQXRrUm9sZSBvYmplY3RSb2xlID0gYXRrX29iamVj
dF9nZXRfcm9sZShhY2Nlc3NpYmxlKTsKLQotICAgIC8vIFRyeSB0byBhbHdheXMgcHJvdmlkZSBh
IG5hbWUgdG8gYmUgbG9nZ2VkIGZvciB0aGUgb2JqZWN0LgotICAgIGlmICghb2JqZWN0TmFtZSB8
fCAqb2JqZWN0TmFtZSA9PSAnXDAnKQotICAgICAgICBvYmplY3ROYW1lID0gIihObyBuYW1lKSI7
Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxOYW1lQW5kVmFsdWUoc2lnbmFsVmFsdWUgPyBn
X3N0cmR1cF9wcmludGYoIiVzID0gJXMiLCBzaWduYWxOYW1lLCBzaWduYWxWYWx1ZSkgOiBnX3N0
cmR1cChzaWduYWxOYW1lKSk7Ci0gICAgcHJpbnRmKCJBY2Nlc3NpYmlsaXR5IG9iamVjdCBlbWl0
dGVkIFwiJXNcIiAvIE5hbWU6IFwiJXNcIiAvIFJvbGU6ICVkXG4iLAotICAgICAgICAgICBzaWdu
YWxOYW1lQW5kVmFsdWUuZ2V0KCksIG9iamVjdE5hbWUsIG9iamVjdFJvbGUpOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9uSGludCAq
c2lnbmFsSGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
bnVtUGFyYW1WYWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdWYWx1ZSAqcGFyYW1WYWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxkIHJlY2Vp
dmUgdGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCi0gICAgaWYgKG51bVBhcmFtVmFs
dWVzIDwgMSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBBdGtPYmplY3QqIGFjY2Vzc2li
bGUgPSBBVEtfT0JKRUNUKGdfdmFsdWVfZ2V0X29iamVjdCgmcGFyYW1WYWx1ZXNbMF0pKTsKLSAg
ICBpZiAoIWFjY2Vzc2libGUgfHwgIUFUS19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCi0gICAgICAg
IHJldHVybiBUUlVFOwotCi0gICAgR1NpZ25hbFF1ZXJ5IHNpZ25hbF9xdWVyeTsKLSAgICBHT3du
UHRyPGdjaGFyPiBzaWduYWxOYW1lOwotICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbFZhbHVlOwot
Ci0gICAgZ19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFsX3F1ZXJ5
KTsKLQotICAgIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSwgInN0YXRl
LWNoYW5nZSIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50Zigic3Rh
dGUtY2hhbmdlOiVzIiwgZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVlc1sxXSkpKTsKLSAg
ICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF9i
b29sZWFuKCZwYXJhbVZhbHVlc1syXSkpKTsKLSAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2ln
bmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAiZm9jdXMtZXZlbnQiKSkgewotICAgICAgICBzaWduYWxO
YW1lLnNldChnX3N0cmR1cCgiZm9jdXMtZXZlbnQiKSk7Ci0gICAgICAgIHNpZ25hbFZhbHVlLnNl
dChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigmcGFyYW1WYWx1ZXNb
MV0pKSk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFt
ZSwgImNoaWxkcmVuLWNoYW5nZWQiKSkgewotICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1
cCgiY2hpbGRyZW4tY2hhbmdlZCIpKTsKLSAgICAgICAgc2lnbmFsVmFsdWUuc2V0KGdfc3RyZHVw
X3ByaW50ZigiJWQiLCBnX3ZhbHVlX2dldF91aW50KCZwYXJhbVZhbHVlc1sxXSkpKTsKLSAgICB9
IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsX3F1ZXJ5LnNpZ25hbF9uYW1lLCAicHJvcGVydHkt
Y2hhbmdlIikpIHsKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCJwcm9w
ZXJ0eS1jaGFuZ2U6JXMiLCBnX3F1YXJrX3RvX3N0cmluZyhzaWduYWxIaW50LT5kZXRhaWwpKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKHNpZ25hbF9xdWVy
eS5zaWduYWxfbmFtZSkpOwotCi0gICAgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoYWNjZXNzaWJs
ZSwgc2lnbmFsTmFtZS5nZXQoKSwgc2lnbmFsVmFsdWUuZ2V0KCkpOwotCi0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0KLXZvaWQgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQotewotICAgIC8v
IEVuc3VyZSBubyBjYWxsYmFja3MgYXJlIGNvbm5lY3RlZCBiZWZvcmUuCi0gICAgZGlzY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IGFjY2Vzc2li
aWxpdHkgaXMgaW5pdGlhbGl6ZWQgZm9yIHRoZSBXZWJWaWV3IGJ5IHF1ZXJ5aW5nIGZvcgotICAg
IC8vIHRoZSByb290IGFjY2Vzc2libGUgb2JqZWN0LCB3aGljaCB3aWxsIGNyZWF0ZSB0aGUgZnVs
bCBoaWVyYXJjaHkuCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRSb290QWNjZXNz
aWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKLQotICAgIC8vIEFkZCBnbG9iYWwgbGlzdGVuZXJzIGZv
ciBBdGtPYmplY3QncyBzaWduYWxzLgotICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IGF0a19h
ZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkd0azpBdGtP
YmplY3Q6c3RhdGUtY2hhbmdlIik7Ci0gICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSBhdGtfYWRk
X2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJHdGs6QXRrT2Jq
ZWN0OmZvY3VzLWV2ZW50Iik7Ci0gICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklk
ID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAi
R3RrOkF0a09iamVjdDphY3RpdmUtZGVzY2VuZGFudC1jaGFuZ2VkIik7Ci0gICAgY2hpbGRyZW5D
aGFuZ2VkTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0
RXZlbnRMaXN0ZW5lciwgIkd0azpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIpOwotICAgIHBy
b3BlcnR5Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihh
eE9iamVjdEV2ZW50TGlzdGVuZXIsICJHdGs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIpOwot
ICAgIHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9s
aXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJHdGs6QXRrT2JqZWN0OnZpc2libGUtZGF0
YS1jaGFuZ2VkIik7Ci0KLSAgICAvLyBFbnN1cmUgdGhlIEF0ayBpbnRlcmZhY2UgdHlwZXMgYXJl
IHJlZ2lzdGVyZWQsIG90aGVyd2lzZQotICAgIC8vIHRoZSBBdGtEb2N1bWVudCBzaWduYWwgaGFu
ZGxlcnMgYmVsb3cgd29uJ3QgZ2V0IHJlZ2lzdGVyZWQuCi0gICAgR09iamVjdCogZHVtbXlBeE9i
amVjdCA9IEdfT0JKRUNUKGdfb2JqZWN0X25ldyhBVEtfVFlQRV9PQkpFQ1QsIDApKTsKLSAgICBB
dGtPYmplY3QqIGR1bW15Tm9PcEF4T2JqZWN0ID0gYXRrX25vX29wX29iamVjdF9uZXcoZHVtbXlB
eE9iamVjdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoZHVtbXlOb09wQXhPYmplY3Qp
KTsKLSAgICBnX29iamVjdF91bnJlZihkdW1teUF4T2JqZWN0KTsKLX0KLQotdm9pZCBkaXNjb25u
ZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpCi17Ci0gICAgLy8gQXRrT2JqZWN0IHNpZ25hbHMu
Ci0gICAgaWYgKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2ds
b2JhbF9ldmVudF9saXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3RlbmVySWQpOwotICAgICAgICBzdGF0
ZUNoYW5nZUxpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAoZm9jdXNFdmVudExpc3RlbmVy
SWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZm9jdXNFdmVu
dExpc3RlbmVySWQpOwotICAgICAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7Ci0gICAgfQot
ICAgIGlmIChhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0
ZW5lcklkKTsKLSAgICAgICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsK
LSAgICB9Ci0gICAgaWYgKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRr
X3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCk7
Ci0gICAgICAgIGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAo
cHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9l
dmVudF9saXN0ZW5lcihwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgcHJvcGVy
dHlDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotICAgIGlmICh2aXNpYmxlRGF0YUNoYW5n
ZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVy
KHZpc2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpOwotICAgICAgICB2aXNpYmxlRGF0YUNoYW5n
ZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3MjI1NzU3Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nl
c3NpYmlsaXR5Q2FsbGJhY2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q2Fs
bGJhY2tzX2gKLSNkZWZpbmUgQWNjZXNzaWJpbGl0eUNhbGxiYWNrc19oCi0KLXZvaWQgY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLXZvaWQgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlD
YWxsYmFja3MoKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcAppbmRleCA3MGYwODFhLi44NDhiYWEx
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckd0ay5jcHAKQEAgLTM3LDQwICszNyw2IEBACiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAotc3RhdGljIGJvb2wg
bG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKLQotQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCi17Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmVsZW1lbnRBdFBvaW50KGludCB4
LCBpbnQgeSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRF
bGVtZW50KCkKLXsKLSAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpnZXRGb2N1c2VkQWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKLSAgICBp
ZiAoIWFjY2Vzc2libGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKLXsKLSAgICBBdGtPYmplY3Qq
IGFjY2Vzc2libGUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxl
RWxlbWVudChtYWluRnJhbWUpOwotICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKLX0K
LQogc3RhdGljIEF0a09iamVjdCogY2hpbGRFbGVtZW50QnlJZChBdGtPYmplY3QqIHBhcmVudCwg
Y29uc3QgY2hhciogaWQpCiB7CiAgICAgaWYgKCFBVEtfSVNfT0JKRUNUKHBhcmVudCkpCkBAIC05
Niw2ICs2MiwyNCBAQCBzdGF0aWMgQXRrT2JqZWN0KiBjaGlsZEVsZW1lbnRCeUlkKEF0a09iamVj
dCogcGFyZW50LCBjb25zdCBjaGFyKiBpZCkKICAgICByZXR1cm4gMDsKIH0KIAorQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQoKQor
eworICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OmdldEZvY3VzZWRBY2Nlc3NpYmxlRWxlbWVudChtYWluRnJhbWUpOworICAgIGlmICghYWNjZXNz
aWJsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudChhY2Nlc3NpYmxlKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKQoreworICAgIEF0a09iamVjdCogYWNjZXNzaWJs
ZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1h
aW5GcmFtZSk7CisgICAgaWYgKCFhY2Nlc3NpYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOworfQorCiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVu
dEJ5SWQoSlNTdHJpbmdSZWYgaWQpCiB7CiAgICAgQXRrT2JqZWN0KiByb290ID0gRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpnZXRSb290QWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKQEAg
LTExMywzOSArOTcsMyBAQCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZQogICAgIHJldHVybiAwOwog
CiB9Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKGJv
b2wpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ1Njcm9sbGlu
Z1N0YXJ0RXZlbnRzKGJvb2wpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnNldExvZ1ZhbHVlQ2hhbmdlRXZlbnRzKGJvb2wpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCBsb2dBY2Nlc3NpYmls
aXR5RXZlbnRzKQotewotICAgIGlmIChsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzID09IGxvZ2dpbmdB
Y2Nlc3NpYmlsaXR5RXZlbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWxvZ0FjY2Vz
c2liaWxpdHlFdmVudHMpIHsKLSAgICAgICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFj
a3MoKTsKLSAgICAgICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7
Ci0gICAgbG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKLXsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcAppbmRleCA0YWI5
OTk1Li4zMGY3YjY0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCkBAIC0zNyw0MDggKzM3LDYgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oPgogCi1zdGF0aWMgU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0
cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dl
dE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKLSAgICBHT3duUHRyPGdjaGFyPiBi
dWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwotICAgIEpT
U3RyaW5nR2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUp
OwotCi0gICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVy
LmdldCgpKTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWFBsYWNlaG9sZGVyVmFsdWUi
KQotICAgICAgICByZXR1cm4gInBsYWNlaG9sZGVyLXRleHQiOwotCi0gICAgcmV0dXJuICIiOwot
fQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyByb2xlVG9TdHJpbmcoQXRrUm9sZSByb2xlKQotewot
ICAgIHN3aXRjaCAocm9sZSkgewotICAgIGNhc2UgQVRLX1JPTEVfQUxFUlQ6Ci0gICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWEFsZXJ0IjsKLSAgICBjYXNlIEFUS19ST0xFX0NBTlZBUzoKLSAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYQ2FudmFzIjsKLSAgICBjYXNlIEFUS19ST0xFX0NIRUNLX0JP
WDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ2hlY2tCb3giOwotICAgIGNhc2UgQVRLX1JP
TEVfQ09MVU1OX0hFQURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29sdW1uSGVhZGVy
IjsKLSAgICBjYXNlIEFUS19ST0xFX0NPTUJPX0JPWDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYQ29tYm9Cb3giOwotICAgIGNhc2UgQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUU6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFdlYkFyZWEiOwotICAgIGNhc2UgQVRLX1JPTEVfRU5UUlk6Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRleHRGaWVsZCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9G
T09URVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEZvb3RlciI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9GT1JNOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhGb3JtIjsKLSAgICBjYXNlIEFU
S19ST0xFX0dST1VQSU5HOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhHcm91cCI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9IRUFESU5HOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhIZWFkaW5n
IjsKLSAgICBjYXNlIEFUS19ST0xFX0lNQUdFOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhJ
bWFnZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9JTUFHRV9NQVA6Ci0gICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWEltYWdlTWFwIjsKLSAgICBjYXNlIEFUS19ST0xFX0xBQkVMOgotICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhMYWJlbCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MSU5LOgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhMaW5rIjsKLSAgICBjYXNlIEFUS19ST0xFX0xJU1Q6Ci0gICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWExpc3QiOwotICAgIGNhc2UgQVRLX1JPTEVfTElTVF9CT1g6Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3RCb3giOwotICAgIGNhc2UgQVRLX1JPTEVfTElT
VF9JVEVNOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0SXRlbSI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9NRU5VOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51IjsKLSAgICBjYXNl
IEFUS19ST0xFX01FTlVfQkFSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51QmFyIjsK
LSAgICBjYXNlIEFUS19ST0xFX01FTlVfSVRFTToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
TWVudUl0ZW0iOwotICAgIGNhc2UgQVRLX1JPTEVfUEFHRV9UQUI6Ci0gICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWFRhYiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RBQl9MSVNUOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhUYWJHcm91cCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQU5FTDoK
LSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFS
QUdSQVBIOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXJhZ3JhcGgiOwotICAgIGNhc2Ug
QVRLX1JPTEVfUEFTU1dPUkRfVEVYVDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUGFzc3dv
cmRGaWVsZCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QVVNIX0JVVFRPTjoKLSAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1JBRElPX0JVVFRPTjoKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUmFkaW9CdXR0b24iOwotICAgIGNhc2UgQVRLX1JPTEVf
Uk9XX0hFQURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93SGVhZGVyIjsKLSAgICBj
YXNlIEFUS19ST0xFX1JVTEVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSdWxlciI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9TQ1JPTExfQkFSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhT
Y3JvbGxCYXIiOwotICAgIGNhc2UgQVRLX1JPTEVfU0NST0xMX1BBTkU6Ci0gICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWFNjcm9sbEFyZWEiOwotICAgIGNhc2UgQVRLX1JPTEVfU0VDVElPTjoKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRGl2IjsKLSAgICBjYXNlIEFUS19ST0xFX1NFUEFSQVRP
UjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSG9yaXpvbnRhbFJ1bGUiOwotICAgIGNhc2Ug
QVRLX1JPTEVfU0xJREVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhTbGlkZXIiOwotICAg
IGNhc2UgQVRLX1JPTEVfU1BJTl9CVVRUT046Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNw
aW5CdXR0b24iOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEU6Ci0gICAgICAgIHJldHVybiAiQVhS
b2xlOiBBWFRhYmxlIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NFTEw6Ci0gICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWENlbGwiOwotICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfQ09MVU1OX0hF
QURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYQ29sdW1uSGVhZGVyIjsKLSAgICBjYXNl
IEFUS19ST0xFX1RBQkxFX1JPVzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUm93IjsKLSAg
ICBjYXNlIEFUS19ST0xFX1RBQkxFX1JPV19IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWFJvd0hlYWRlciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UT0dHTEVfQlVUVE9OOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhUb2dnbGVCdXR0b24iOwotICAgIGNhc2UgQVRLX1JPTEVfVE9P
TF9CQVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFRvb2xiYXIiOwotICAgIGNhc2UgQVRL
X1JPTEVfVE9PTF9USVA6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFVzZXJJbnRlcmZhY2VU
b29sdGlwIjsKLSAgICBjYXNlIEFUS19ST0xFX1RSRUU6Ci0gICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWFRyZWUiOwotICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9UQUJMRToKLSAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYVHJlZUdyaWQiOwotICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9JVEVNOgotICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhUcmVlSXRlbSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9XSU5E
T1c6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFdpbmRvdyI7Ci0gICAgY2FzZSBBVEtfUk9M
RV9VTktOT1dOOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhVbmtub3duIjsKLSAgICBkZWZh
dWx0OgotICAgICAgICAvLyBXZSB3YW50IHRvIGRpc3Rpbmd1aXNoIEFUS19ST0xFX1VOS05PV04g
ZnJvbSBhIGtub3duIEF0a1JvbGUgd2hpY2gKLSAgICAgICAgLy8gb3VyIERSVCBpc24ndCBwcm9w
ZXJseSBoYW5kbGluZy4KLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEZJWE1FIG5vdCBpZGVudGlm
aWVkIjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIqIHJlcGxhY2VDaGFyYWN0ZXJz
Rm9yUmVzdWx0cyhnY2hhciogc3RyKQotewotICAgIFN0cmluZyB1U3RyaW5nID0gU3RyaW5nOjpm
cm9tVVRGOChzdHIpOwotCi0gICAgLy8gVGhlIG9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIg
aXMgcGFzc2VkIGFsb25nIHRvIEFUcyBzbyB3ZSBuZWVkIHRvIGJlCi0gICAgLy8gYWJsZSB0byB0
ZXN0IGZvciB0aGVpciBwcmVzZW5jZSBhbmQgZG8gc28gd2l0aG91dCBjYXVzaW5nIHRlc3QgZmFp
bHVyZXMuCi0gICAgdVN0cmluZy5yZXBsYWNlKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAi
PG9iaj4iKTsKLQotICAgIC8vIFRoZSBwcmVzZW5jZSBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaW4g
YWNjZXNzaWJsZSB0ZXh0IG9mIGEgc2luZ2xlIG9iamVjdAotICAgIC8vIGlzIGFwcHJvcHJpYXRl
LCBidXQgaXQgbWFrZXMgdGVzdCByZXN1bHRzIChlc3BlY2lhbGx5IHRoZSBhY2Nlc3NpYmxlIHRy
ZWUpCi0gICAgLy8gaGFyZGVyIHRvIHJlYWQuCi0gICAgdVN0cmluZy5yZXBsYWNlKCJcbiIsICI8
XFxuPiIpOwotCi0gICAgcmV0dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci19
Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZv
cm1VSUVsZW1lbnQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChlbGVtZW50KQotewotICAgIGlm
IChtX2VsZW1lbnQpCi0gICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQpOwotfQotCi1BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQmIG90aGVyKQotICAgIDogbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkK
LXsKLSAgICBpZiAobV9lbGVtZW50KQotICAgICAgICBnX29iamVjdF9yZWYobV9lbGVtZW50KTsK
LX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQot
ewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZWxlbWVudCk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0TGlua2VkVUlFbGVtZW50cyhW
ZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRzKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXREb2N1bWVu
dExpbmtzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVu
KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgY2hpbGRyZW4pCi17Ci0gICAgaW50IGNv
dW50ID0gY2hpbGRyZW5Db3VudCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgewotICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOwotICAgICAgICBjaGlsZHJlbi5hcHBl
bmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOwotICAgIH0KLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4mIGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotICAg
ICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChB
VEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOwotICAgICAgICBlbGVtZW50VmVjdG9yLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7Ci0gICAgfQotfQotCi1pbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93Q291bnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7Ci0KLSAg
ICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxFKG1fZWxlbWVudCkpOwotfQot
Ci1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQoKQotewotICAgIGlmICgh
bV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUo
bV9lbGVtZW50KSk7Ci0KLSAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX2NvbHVtbnMoQVRLX1RB
QkxFKG1fZWxlbWVudCkpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRy
ZW5Db3VudCgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgQVNTRVJUKEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICByZXR1cm4gYXRrX29i
amVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci19
Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVu
dEF0UG9pbnQoaW50IHgsIGludCB5KQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGF0a19jb21wb25l
bnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCB4LCB5
LCBBVEtfWFlfV0lORE9XKSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2ln
bmVkIGluZGV4KQotewotICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBjaGlsZHJl
bjsKLSAgICBnZXRDaGlsZHJlbldpdGhSYW5nZShjaGlsZHJlbiwgaW5kZXgsIGluZGV4ICsgMSk7
Ci0KLSAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBjaGlsZHJl
bi5hdCgwKTsKLQotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmRleE9mQ2hpbGQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKLXsg
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1nY2hhciogYXR0
cmlidXRlU2V0VG9TdHJpbmcoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQpCi17Ci0gICAg
R1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOwotICAgIGZvciAoR1NMaXN0KiBhdHRyaWJ1
dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy0+
bmV4dCkgewotICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0
a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBHT3duUHRyPGdjaGFyPiBh
dHRyaWJ1dGVEYXRhKGdfc3RyY29uY2F0KGF0dHJpYnV0ZS0+bmFtZSwgIjoiLCBhdHRyaWJ1dGUt
PnZhbHVlLCBOVUxMKSk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIGF0dHJpYnV0ZURh
dGEuZ2V0KCkpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy0+bmV4dCkKLSAgICAgICAgICAgIGdf
c3RyaW5nX2FwcGVuZChzdHIsICIsICIpOwotICAgIH0KLQotICAgIHJldHVybiBnX3N0cmluZ19m
cmVlKHN0ciwgRkFMU0UpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphbGxBdHRyaWJ1dGVzKCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBBU1NFUlQoQVRLX0lT
X09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBHT3duUHRyPGdjaGFyPiBhdHRyaWJ1dGVEYXRhKGF0
dHJpYnV0ZVNldFRvU3RyaW5nKGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoQVRLX09CSkVDVCht
X2VsZW1lbnQpKSkpOwotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhh
dHRyaWJ1dGVEYXRhLmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cygpCi17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwot
fQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1
bWVudExpbmtzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQoKQotewotICAgIGlmICgh
bV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEF0a1JlbGF0aW9uU2V0KiBzZXQg
PSBhdGtfb2JqZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAg
ICBpZiAoIXNldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdGtPYmplY3QqIHRhcmdldCA9
IDA7Ci0gICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfbl9yZWxhdGlvbnMoc2V0
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgQXRrUmVs
YXRpb24qIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRpb24oc2V0LCBpKTsK
LSAgICAgICAgaWYgKGF0a19yZWxhdGlvbl9nZXRfcmVsYXRpb25fdHlwZShyZWxhdGlvbikgPT0g
QVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKSB7Ci0gICAgICAgICAgICBHUHRyQXJyYXkqIHRhcmdl
dExpc3QgPSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChyZWxhdGlvbik7Ci0gICAgICAgICAgICBp
ZiAodGFyZ2V0TGlzdC0+bGVuKQotICAgICAgICAgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0
PEF0a09iamVjdCo+KGdfcHRyX2FycmF5X2luZGV4KHRhcmdldExpc3QsIDApKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGdfb2JqZWN0X3VucmVmKHNldCk7Ci0gICAgcmV0dXJuIHRhcmdldCA/
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQodGFyZ2V0KSA6IDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCgpCi17Ci0gICAg
aWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKEFUS19JU19P
QkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICBBdGtPYmplY3QqIHBhcmVudCA9ICBhdGtfb2JqZWN0
X2dldF9wYXJlbnQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICByZXR1cm4gcGFyZW50ID8g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChwYXJlbnQpIDogMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVy
aXplZEF0dHJpYnV0ZU5hbWVzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQotewotICAgIEF0a1JvbGUgcm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBpZiAoIXJvbGUp
Ci0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0g
ICAgU3RyaW5nIHJvbGVTdHJpbmcgPSByb2xlVG9TdHJpbmcocm9sZSk7Ci0gICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJvbGVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci19
Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUoKQotewotICAg
IHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xl
RGVzY3JpcHRpb24oKQotewotICAgIHJldHVybiAwOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCi17Ci0gICAgY29uc3QgZ2NoYXIqIG5hbWUgPSBhdGtf
b2JqZWN0X2dldF9uYW1lKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgR093blB0cjxnY2hh
cj4gYXhUaXRsZShnX3N0cmR1cF9wcmludGYoIkFYVGl0bGU6ICVzIiwgbmFtZSA/IG5hbWUgOiAi
IikpOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4VGl0bGUu
Z2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlw
dGlvbigpCi17Ci0gICAgY29uc3QgZ2NoYXIqIGRlc2NyaXB0aW9uID0gYXRrX29iamVjdF9nZXRf
ZGVzY3JpcHRpb24oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLQotICAgIGlmICghZGVzY3JpcHRp
b24pCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwot
Ci0gICAgR093blB0cjxnY2hhcj4gYXhEZXNjKGdfc3RyZHVwX3ByaW50ZigiQVhEZXNjcmlwdGlv
bjogJXMiLCBkZXNjcmlwdGlvbikpOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGF4RGVzYy5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lT
X1RFWFQobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7Ci0KLSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19U
RVhUKG1fZWxlbWVudCksIDAsIC0xKTsKLSAgICBHT3duUHRyPGdjaGFyPiBheFZhbHVlKGdfc3Ry
ZHVwX3ByaW50ZigiQVhWYWx1ZTogJXMiLCByZXBsYWNlQ2hhcmFjdGVyc0ZvclJlc3VsdHModGV4
dCkpKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoYXhWYWx1ZS5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICAvLyBJbiBB
VEssIHRoZSBkb2N1bWVudCBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIHRoZSBkb2N1bWVudCdzIGxv
Y2FsZS4KLSAgICBpZiAoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkp
ID09IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdlOiAlcyIsIGF0a19k
b2N1bWVudF9nZXRfbG9jYWxlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpKSkpOwotCi0gICAgLy8g
Rm9yIGFsbCBvdGhlciBvYmplY3RzLCB0aGUgbGFuZ3VhZ2UgaXMgZXhwb3NlZCBhcyBhbiBBdGtU
ZXh0IGF0dHJpYnV0ZS4KLSAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudCkpCi0gICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgZm9yIChH
U0xpc3QqIHRleHRBdHRyaWJ1dGVzID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhB
VEtfVEVYVChtX2VsZW1lbnQpKTsgdGV4dEF0dHJpYnV0ZXM7IHRleHRBdHRyaWJ1dGVzID0gdGV4
dEF0dHJpYnV0ZXMtPm5leHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUg
PSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPih0ZXh0QXR0cmlidXRlcy0+ZGF0YSk7Ci0gICAg
ICAgIGlmICghc3RyY21wKGF0a0F0dHJpYnV0ZS0+bmFtZSwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfTEFOR1VBR0UpKSkKLSAgICAgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhnX3N0cmR1cF9wcmludGYoIkFYTGFuZ3VhZ2U6ICVz
IiwgYXRrQXR0cmlidXRlLT52YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2VsZW1lbnQpCkBAIC00
NTAsNjA5ICs0OCwzIEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBU
ZXh0KCkgY29uc3QKICAgICBHT3duUHRyPGdjaGFyPiBheEhlbHBUZXh0KGdfc3RyZHVwX3ByaW50
ZigiQVhIZWxwOiAlcyIsIGhlbHBUZXh0LmRhdGEoKSkpOwogICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhheEhlbHBUZXh0LmdldCgpKTsKIH0KLQotZG91YmxlIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OngoKQotewotICAgIGludCB4LCB5OwotCi0gICAgYXRrX2NvbXBv
bmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwgJnksIEFUS19Y
WV9TQ1JFRU4pOwotCi0gICAgcmV0dXJuIHg7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp5KCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3Bv
c2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsK
LQotICAgIHJldHVybiB5OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lk
dGgoKQotewotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRf
c2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7Ci0KLSAgICBy
ZXR1cm4gd2lkdGg7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQo
KQotewotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6
ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdodCk7Ci0KLSAgICByZXR1
cm4gaGVpZ2h0OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2lu
dFgoKQotewotICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBoYXZlIGluIEFU
Sy4KLSAgICByZXR1cm4gMC5mOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2xpY2tQb2ludFkoKQotewotICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBo
YXZlIGluIEFUSy4KLSAgICByZXR1cm4gMC5mOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0Ci17Ci0gICAg
R1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKLQotICAgIGlmICghQVRLX0lTX1ZBTFVF
KG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgYXRrX3ZhbHVlX2dldF9j
dXJyZW50X3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwotICAgIGlmICghR19W
QUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICByZXR1
cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om1pblZhbHVlKCkKLXsKLSAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0g
fSB9OwotCi0gICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJu
IDAuMGY7Ci0KLSAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxl
bWVudCksICZ2YWx1ZSk7Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCi0g
ICAgICAgIHJldHVybiAwLjBmOwotICAgIHJldHVybiBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUp
OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQotewotICAg
IEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07Ci0KLSAgICBpZiAoIUFUS19JU19WQUxV
RShtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIGF0a192YWx1ZV9nZXRf
bWF4aW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKLSAgICBpZiAoIUdf
VkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgcmV0
dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24oKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4gQVRLLgotICAgIC8vIFNlZTog
aHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDU3NgotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1zdGF0aWMgYm9v
bCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBBdGtTdGF0ZVR5
cGUgc3RhdGVUeXBlKQotewotICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKLSAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0g
YWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKGVsZW1lbnQpKSk7
Ci0gICAgcmV0dXJuIGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCks
IHN0YXRlVHlwZSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVk
KCkKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVf
RU5BQkxFRCk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2lu
dExpbmVOdW1iZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVk
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkKCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkKCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9l
bGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNl
dD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpF
Q1QobV9lbGVtZW50KSkpOwotICAgIGdib29sZWFuIGlzRm9jdXNlZCA9IGF0a19zdGF0ZV9zZXRf
Y29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0VEKTsKLQotICAg
IHJldHVybiBpc0ZvY3VzZWQ7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNT
ZWxlY3RlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVu
dCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3Jh
YmJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotIAotSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURyb3BFZmZlY3RzKCkgY29uc3QKLXsgICAKLSAgICBy
ZXR1cm4gMDsgCi19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRH
UmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKLSAg
ICBnYm9vbGVhbiBpc0V4cGFuZGVkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0
ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0VYUEFOREVEKTsKLQotICAgIHJldHVybiBpc0V4cGFuZGVk
OwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19v
YmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVh
biBpc0NoZWNrZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgp
LCBBVEtfU1RBVEVfQ0hFQ0tFRCk7Ci0KLSAgICByZXR1cm4gaXNDaGVja2VkOwotfQotCi1KU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJz
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQot
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5n
UmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotaW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgSlNTdHJpbmdSZWYgaW5kZXhSYW5nZUlu
VGFibGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgYm9vbCBpc1Jvd1JhbmdlKQotewotICAg
IEdPd25QdHI8Z2NoYXI+IHJhbmdlU3RyaW5nKGdfc3RyZHVwKCJ7MCwgMH0iKSk7Ci0KLSAgICBp
ZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChlbGVtZW50
KSk7Ci0KLSAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRL
X09CSkVDVChlbGVtZW50KSk7Ci0gICAgaWYgKCFheFRhYmxlIHx8ICFBVEtfSVNfVEFCTEUoYXhU
YWJsZSkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5n
ZVN0cmluZy5nZXQoKSk7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgY2VsbCBpbiB0aGUgdGFibGUu
Ci0gICAgZ2ludCBpbmRleEluUGFyZW50ID0gYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50
KEFUS19PQkpFQ1QoZWxlbWVudCkpOwotICAgIGlmIChpbmRleEluUGFyZW50ID09IC0xKQotICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0
KCkpOwotCi0gICAgaW50IHJvdyA9IC0xOwotICAgIGludCBjb2x1bW4gPSAtMTsKLSAgICByb3cg
PSBhdGtfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBVEtfVEFCTEUoYXhUYWJsZSksIGluZGV4SW5Q
YXJlbnQpOwotICAgIGNvbHVtbiA9IGF0a190YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KEFUS19U
QUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7Ci0KLSAgICAvLyBHZXQgdGhlIGFjdHVhbCB2
YWx1ZXMsIGlmIHJvdyBhbmQgY29sdW1ucyBhcmUgdmFsaWQgdmFsdWVzLgotICAgIGlmIChyb3cg
IT0gLTEgJiYgY29sdW1uICE9IC0xKSB7Ci0gICAgICAgIGludCBiYXNlID0gMDsKLSAgICAgICAg
aW50IGxlbmd0aCA9IDA7Ci0gICAgICAgIGlmIChpc1Jvd1JhbmdlKSB7Ci0gICAgICAgICAgICBi
YXNlID0gcm93OwotICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9yb3dfZXh0ZW50
X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgYmFzZSA9IGNvbHVtbjsKLSAgICAgICAgICAgIGxlbmd0aCA9IGF0a190YWJs
ZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsK
LSAgICAgICAgfQotICAgICAgICByYW5nZVN0cmluZy5zZXQoZ19zdHJkdXBfcHJpbnRmKCJ7JWQs
ICVkfSIsIGJhc2UsIGxlbmd0aCkpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQotewotICAgIC8vIFJhbmdlIGlu
IHRhYmxlIGZvciByb3dzLgotICAgIHJldHVybiBpbmRleFJhbmdlSW5UYWJsZShtX2VsZW1lbnQs
IHRydWUpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5J
bmRleFJhbmdlKCkKLXsKLSAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3IgY29sdW1ucy4KLSAgICBy
ZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LCBmYWxzZSk7Ci19Ci0KLWludCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50KQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkgCi17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOwotfSAKLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
ZFN0cmluZ0ZvclJhbmdlKHVuc2lnbmVkLCB1bnNpZ25lZCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19
Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ1JhbmdlSXNN
aXNzcGVsbGVkKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNh
dGUoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogc3RhcnRFbGVtZW50LCBib29sIGlzRGlyZWN0aW9u
TmV4dCwgSlNTdHJpbmdSZWYgc2VhcmNoS2V5LCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0KQotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVu
c2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQotewotICAgIGlmICghbV9lbGVtZW50KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7Ci0K
LSAgICBBdGtPYmplY3QqIGZvdW5kQ2VsbCA9IGF0a190YWJsZV9yZWZfYXQoQVRLX1RBQkxFKG1f
ZWxlbWVudCksIHJvdywgY29sdW1uKTsKLSAgICByZXR1cm4gZm91bmRDZWxsID8gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudChmb3VuZENlbGwpIDogMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNp
Z25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmli
dXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIGlmICghbV9lbGVtZW50KQot
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAg
IFN0cmluZyBhdGtBdHRyaWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0
dHJpYnV0ZSk7Ci0gICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIGZvciAoR1NM
aXN0KiBhdGtBdHRyaWJ1dGVzID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhBVEtfT0JKRUNU
KG1fZWxlbWVudCkpOyBhdGtBdHRyaWJ1dGVzOyBhdGtBdHRyaWJ1dGVzID0gYXRrQXR0cmlidXRl
cy0+bmV4dCkgewotICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0YXRpY19j
YXN0PEF0a0F0dHJpYnV0ZSo+KGF0a0F0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBpZiAoIXN0
cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGF0a0F0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRrQXR0
cmlidXRlLT52YWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1i
ZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiAwLjBmOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmIGF0dHJpYnV0
ZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5n
UmVmIGF0dHJpYnV0ZSkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGFs
dGVyQ3VycmVudFZhbHVlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGludCBmYWN0b3IpCi17
Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoQVRLX0lT
X1ZBTFVFKGVsZW1lbnQpKTsKLQotICAgIEdWYWx1ZSBjdXJyZW50VmFsdWUgPSBHX1ZBTFVFX0lO
SVQ7Ci0gICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwg
JmN1cnJlbnRWYWx1ZSk7Ci0KLSAgICBHVmFsdWUgaW5jcmVtZW50ID0gR19WQUxVRV9JTklUOwot
ICAgIGF0a192YWx1ZV9nZXRfbWluaW11bV9pbmNyZW1lbnQoQVRLX1ZBTFVFKGVsZW1lbnQpLCAm
aW5jcmVtZW50KTsKLQotICAgIEdWYWx1ZSBuZXdWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgICBn
X3ZhbHVlX2luaXQoJm5ld1ZhbHVlLCBHX1RZUEVfRkxPQVQpOwotCi0gICAgZ192YWx1ZV9zZXRf
ZmxvYXQoJm5ld1ZhbHVlLCBnX3ZhbHVlX2dldF9mbG9hdCgmY3VycmVudFZhbHVlKSArIGZhY3Rv
ciAqIGdfdmFsdWVfZ2V0X2Zsb2F0KCZpbmNyZW1lbnQpKTsKLSAgICBhdGtfdmFsdWVfc2V0X2N1
cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmbmV3VmFsdWUpOwotCi0gICAgZ192YWx1
ZV91bnNldCgmbmV3VmFsdWUpOwotICAgIGdfdmFsdWVfdW5zZXQoJmluY3JlbWVudCk7Ci0gICAg
Z192YWx1ZV91bnNldCgmY3VycmVudFZhbHVlKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmNyZW1lbnQoKQotewotICAgIGFsdGVyQ3VycmVudFZhbHVlKG1fZWxlbWVudCwg
MSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50KCkKLXsKLSAg
ICBhbHRlckN1cnJlbnRWYWx1ZShtX2VsZW1lbnQsIC0xKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpwcmVzcygpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwotCi0gICAgaWYg
KCFBVEtfSVNfQUNUSU9OKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9u
bHkgb25lIGFjdGlvbiBwZXIgb2JqZWN0IGlzIHN1cHBvcnRlZCBzbyBmYXIuCi0gICAgYXRrX2Fj
dGlvbl9kb19hY3Rpb24oQVRLX0FDVElPTihtX2VsZW1lbnQpLCAwKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRp
c2Nsb3NlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYU93bnNF
bGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRmxvd1RvRWxl
bWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdElu
ZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgodW5zaWduZWQgaW5k
ZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQotewotICAgIHJldHVybiAwOwotfQot
Ci1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUo
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCi17Ci0gICAgQXRrUm9sZSByb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIGlmIChyb2xlICE9
IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQobV9l
bGVtZW50KSwgIkVuY29kaW5nIikpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudFVSSSgpCi17Ci0gICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9n
ZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIGlmIChyb2xlICE9IEFUS19ST0xF
X0RPQ1VNRU5UX0ZSQU1FKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhh
dGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSwg
IlVSSSIpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKLXsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNG
b2N1c2FibGUoKSBjb25zdAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNl
dCA9IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1l
bnQpKSk7Ci0gICAgZ2Jvb2xlYW4gaXNGb2N1c2FibGUgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5z
X3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNBQkxFKTsKLQotICAgIHJldHVy
biBpc0ZvY3VzYWJsZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVj
dGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQs
IEFUS19TVEFURV9TRUxFQ1RBQkxFKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0
YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX01VTFRJU0VMRUNUQUJMRSk7Ci19Ci0KLWJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpIGNvbnN0Ci17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xs
YXBzZWQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnRha2VGb2N1cygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24oKQotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGRTZWxl
Y3Rpb24oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb24oKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxl
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50
IHkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvR05V
bWFrZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBiOTk2MTA4Li5jYWRhMDE5
IDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtlZmls
ZS5hbQpAQCAtMTA0LDYgKzEwNCw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NQUEZMQUdT
ID0gXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCiAJLURUT1BfTEVWRUxfRElSPVwiJHtzaGVsbCBw
d2R9LyR7c3JjZGlyfVwiIFwKIAktSSQoc3JjZGlyKS9Ub29scy9EdW1wUmVuZGVyVHJlZSBcCisJ
LUkkKHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrIFwKIAktSSQoc3JjZGlyKS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jYWlybyBcCiAJLUkkKHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ayBcCkBAIC0xNDMsMTAgKzE0
NCwxMiBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAogCVRvb2xzL0R1bXBS
ZW5kZXJUcmVlL1dvcmtRdWV1ZS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWVJ
dGVtLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2NvbmZpZy5oIFwKKwlUb29scy9EdW1wUmVu
ZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIFwKKwlUb29scy9EdW1wUmVuZGVy
VHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAgXAorICAgIAlUb29scy9EdW1w
UmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwIFwKKwlUb29scy9E
dW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgXAogCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5jcHAgXAogCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWlyby5oIFwKLQlUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIFwKLQlUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAgXAogCVRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAgXAogCVRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcCBcCiAJVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBcCg==
</data>
<flag name="review"
          id="205758"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187535</attachid>
            <date>2013-02-11 02:54:40 -0800</date>
            <delta_ts>2013-02-11 03:53:21 -0800</delta_ts>
            <desc>Rebased patch</desc>
            <filename>a11y-share-drt.patch</filename>
            <type>text/plain</type>
            <size>92723</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NzBl
MjlmYy4uZTc2ZDVkYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxMy0wMi0xMSAgS3J6eXN6dG9mIEN6ZWNoICA8
ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXVtFRkxdIFNoYXJlcyBXZWJLaXQt
R1RLJ3MgRHVtcFJlbmRlclRyZWUgYWNjZXNzaWJpbGl0eSBpbXBsZW1lbnRhdGlvbiB3aXRoIG90
aGVyIFdlYmtpdCBwb3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA1MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgor
CisgICAgICAgIFNoYXJlcyBzcGVjaWZpYyBBVEsncyBhY2Nlc3NpYmlsaXR5IGltcGxlbWVudGF0
aW9uLgorICAgICAgICBLZWVwcyBwbGF0Zm9ybSBzcGVjaWZpYyBtZXRob2RzIGluIEVGTCBhbmQg
R1RLJ3MgZGlyZWN0b3JpZXMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNz
aWJpbGl0eUNhbGxiYWNrcy5oOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAuCisgICAgICAgIChwcmludEFj
Y2Vzc2liaWxpdHlFdmVudCk6CisgICAgICAgIChheE9iamVjdEV2ZW50TGlzdGVuZXIpOgorICAg
ICAgICAoY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MpOgorICAgICAgICAoZGlzY29ubmVj
dEFjY2Vzc2liaWxpdHlDYWxsYmFja3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHA6IENvcGllZCBmcm9tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAuCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0ZvY3VzRXZlbnRzKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dTY3JvbGxpbmdTdGFydEV2ZW50cyk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nVmFsdWVDaGFuZ2VFdmVudHMpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVu
dHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxp
c3RlbmVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmlj
YXRpb25MaXN0ZW5lcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRBdGsuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAuCisgICAgICAgIChjb3JlQXR0cmlidXRlVG9B
dGtBdHRyaWJ1dGUpOgorICAgICAgICAocm9sZVRvU3RyaW5nKToKKyAgICAgICAgKHJlcGxhY2VD
aGFyYWN0ZXJzRm9yUmVzdWx0cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmdldExpbmtlZFVJRWxlbWVudHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Z2V0RG9jdW1lbnRMaW5rcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpn
ZXRDaGlsZHJlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJl
bldpdGhSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmluZGV4T2ZDaGlsZCk6CisgICAgICAgIChhdHRyaWJ1dGVTZXRUb1N0cmluZyk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRM
aW5rcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50KToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcyk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cm9sZURlc2NyaXB0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnRpdGxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OngpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2xpY2tQb2ludFgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQ
b2ludFkpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24pOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bWF4VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFs
dWVEZXNjcmlwdGlvbik6CisgICAgICAgIChjaGVja0VsZW1lbnRTdGF0ZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZCk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpo
aWVyYXJjaGljYWxMZXZlbCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojphcmlh
SXNHcmFiYmVkKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZm
ZWN0cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKToKKyAgICAgICAgKGluZGV4UmFu
Z2VJblRhYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFu
Z2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzTWlzc3BlbGxlZCk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNh
dGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJv
dyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib29sQXR0cmlidXRlVmFsdWUpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZCk6Cisg
ICAgICAgIChhbHRlckN1cnJlbnRWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbmNyZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVt
ZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNzKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51KToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZFJvd0F0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXJpYU93bnNFbGVtZW50QXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRSb3dBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZGlzY2xvc2VkQnlSb3cpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YWNjZXNzaWJpbGl0eVZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1l
bnRVUkkpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dXJsKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc09mZlNjcmVlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Nv
bGxhcHNlZCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXApOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnRha2VTZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YWRkU2VsZWN0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92
ZVNlbGVjdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01h
a2VWaXNpYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFr
ZVZpc2libGVXaXRoU3ViRm9jdXMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsVG9HbG9iYWxQb2ludCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtl
TGlzdHMudHh0OiBBZGRzIEFUSyBoZWFkZXJzLCBsaWJyYXJpZXMsIG5ldyBzb3VyY2VzLgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHA6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcDoKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KToKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbTogQWRkcyByZW5hbWVkIHNvdXJjZXMuCisKIDIwMTMtMDItMTAgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBhdHRlbXB0
ZWQgYnVpbGQgZml4IGZvciBHdGsgYWZ0ZXIgcjE0MjQxMgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzIyNTc1NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eUNh
bGxiYWNrc19oCisjZGVmaW5lIEFjY2Vzc2liaWxpdHlDYWxsYmFja3NfaAorCit2b2lkIGNvbm5l
Y3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7Cit2b2lkIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5
Q2FsbGJhY2tzKCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
YXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
YXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjFlYTRmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAKQEAgLTAsMCArMSwxNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIgorCisjaWYgSEFWRShBQ0NFU1NJ
QklMSVRZKQorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCisjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdC5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShFRkwpCisjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWVDaHJvbWUuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwuaCIKKyNlbmRpZgorCitzdGF0aWMgZ3VpbnQgc3RhdGVDaGFuZ2VMaXN0ZW5lcklk
ID0gMDsKK3N0YXRpYyBndWludCBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7CitzdGF0aWMgZ3Vp
bnQgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWludCBj
aGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWludCBwcm9wZXJ0eUNoYW5n
ZWRMaXN0ZW5lcklkID0gMDsKK3N0YXRpYyBndWludCB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5l
cklkID0gMDsKKworc3RhdGljIHZvaWQgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoQXRrT2JqZWN0
KiBhY2Nlc3NpYmxlLCBjb25zdCBnY2hhciogc2lnbmFsTmFtZSwgY29uc3QgZ2NoYXIqIHNpZ25h
bFZhbHVlKQoreworICAgIC8vIERvIG5vdCBoYW5kbGUgc3RhdGUtY2hhbmdlOmRlZnVuY3Qgc2ln
bmFscywgYXMgdGhlIEF0a09iamVjdAorICAgIC8vIGFzc29jaWF0ZWQgdG8gdGhlbSB3aWxsIG5v
dCBiZSB2YWxpZCBhdCB0aGlzIHBvaW50IGFscmVhZHkuCisgICAgaWYgKCFzaWduYWxOYW1lIHx8
ICFnX3N0cmNtcDAoc2lnbmFsTmFtZSwgInN0YXRlLWNoYW5nZTpkZWZ1bmN0IikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lTX09CSkVDVChhY2Nlc3Np
YmxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgZ2NoYXIqIG9iamVjdE5hbWUgPSBh
dGtfb2JqZWN0X2dldF9uYW1lKGFjY2Vzc2libGUpOworICAgIEF0a1JvbGUgb2JqZWN0Um9sZSA9
IGF0a19vYmplY3RfZ2V0X3JvbGUoYWNjZXNzaWJsZSk7CisKKyAgICAvLyBUcnkgdG8gYWx3YXlz
IHByb3ZpZGUgYSBuYW1lIHRvIGJlIGxvZ2dlZCBmb3IgdGhlIG9iamVjdC4KKyAgICBpZiAoIW9i
amVjdE5hbWUgfHwgKm9iamVjdE5hbWUgPT0gJ1wwJykKKyAgICAgICAgb2JqZWN0TmFtZSA9ICIo
Tm8gbmFtZSkiOworCisgICAgR093blB0cjxnY2hhcj4gc2lnbmFsTmFtZUFuZFZhbHVlKHNpZ25h
bFZhbHVlID8gZ19zdHJkdXBfcHJpbnRmKCIlcyA9ICVzIiwgc2lnbmFsTmFtZSwgc2lnbmFsVmFs
dWUpIDogZ19zdHJkdXAoc2lnbmFsTmFtZSkpOworICAgIHByaW50ZigiQWNjZXNzaWJpbGl0eSBv
YmplY3QgZW1pdHRlZCBcIiVzXCIgLyBOYW1lOiBcIiVzXCIgLyBSb2xlOiAlZFxuIiwgc2lnbmFs
TmFtZUFuZFZhbHVlLmdldCgpLCBvYmplY3ROYW1lLCBvYmplY3RSb2xlKTsKK30KKworc3RhdGlj
IGdib29sZWFuIGF4T2JqZWN0RXZlbnRMaXN0ZW5lcihHU2lnbmFsSW52b2NhdGlvbkhpbnQgKnNp
Z25hbEhpbnQsIGd1aW50IG51bVBhcmFtVmFsdWVzLCBjb25zdCBHVmFsdWUgKnBhcmFtVmFsdWVz
LCBncG9pbnRlciBkYXRhKQoreworICAgIC8vIEF0IGxlYXN0IHdlIHNob3VsZCByZWNlaXZlIHRo
ZSBpbnN0YW5jZSBlbWl0dGluZyB0aGUgc2lnbmFsLgorICAgIGlmIChudW1QYXJhbVZhbHVlcyA8
IDEpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxlID0g
QVRLX09CSkVDVChnX3ZhbHVlX2dldF9vYmplY3QoJnBhcmFtVmFsdWVzWzBdKSk7CisgICAgaWYg
KCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUpKQorICAgICAgICByZXR1
cm4gVFJVRTsKKworICAgIEdTaWduYWxRdWVyeSBzaWduYWxRdWVyeTsKKyAgICBHT3duUHRyPGdj
aGFyPiBzaWduYWxOYW1lOworICAgIEdPd25QdHI8Z2NoYXI+IHNpZ25hbFZhbHVlOworCisgICAg
Z19zaWduYWxfcXVlcnkoc2lnbmFsSGludC0+c2lnbmFsX2lkLCAmc2lnbmFsUXVlcnkpOworCisg
ICAgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJzdGF0ZS1jaGFuZ2Ui
KSkgeworICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cF9wcmludGYoInN0YXRlLWNoYW5n
ZTolcyIsIGdfdmFsdWVfZ2V0X3N0cmluZygmcGFyYW1WYWx1ZXNbMV0pKSk7CisgICAgICAgIHNp
Z25hbFZhbHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigm
cGFyYW1WYWx1ZXNbMl0pKSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5
LnNpZ25hbF9uYW1lLCAiZm9jdXMtZXZlbnQiKSkgeworICAgICAgICBzaWduYWxOYW1lLnNldChn
X3N0cmR1cCgiZm9jdXMtZXZlbnQiKSk7CisgICAgICAgIHNpZ25hbFZhbHVlLnNldChnX3N0cmR1
cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigmcGFyYW1WYWx1ZXNbMV0pKSk7Cisg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lLCAiY2hpbGRy
ZW4tY2hhbmdlZCIpKSB7CisgICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKCJjaGlsZHJl
bi1jaGFuZ2VkIikpOworICAgICAgICBzaWduYWxWYWx1ZS5zZXQoZ19zdHJkdXBfcHJpbnRmKCIl
ZCIsIGdfdmFsdWVfZ2V0X3VpbnQoJnBhcmFtVmFsdWVzWzFdKSkpOworICAgIH0gZWxzZSBpZiAo
IWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgInByb3BlcnR5LWNoYW5nZSIpKQor
ICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cF9wcmludGYoInByb3BlcnR5LWNoYW5nZTol
cyIsIGdfcXVhcmtfdG9fc3RyaW5nKHNpZ25hbEhpbnQtPmRldGFpbCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwKHNpZ25hbFF1ZXJ5LnNpZ25hbF9uYW1lKSk7
CisKKyAgICBwcmludEFjY2Vzc2liaWxpdHlFdmVudChhY2Nlc3NpYmxlLCBzaWduYWxOYW1lLmdl
dCgpLCBzaWduYWxWYWx1ZS5nZXQoKSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBj
b25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpCit7CisgICAgLy8gRW5zdXJlIG5vIGNhbGxi
YWNrcyBhcmUgY29ubmVjdGVkIGJlZm9yZS4KKyAgICBkaXNjb25uZWN0QWNjZXNzaWJpbGl0eUNh
bGxiYWNrcygpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWNjZXNzaWJpbGl0eSBpcyBpbml0aWFs
aXplZCBmb3IgdGhlIFdlYlZpZXcgYnkgcXVlcnlpbmcgZm9yCisgICAgLy8gdGhlIHJvb3QgYWNj
ZXNzaWJsZSBvYmplY3QsIHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBmdWxsIGhpZXJhcmNoeS4KKyNp
ZiBQTEFURk9STShHVEspCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRSb290QWNj
ZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJvb3RBY2Nlc3NpYmxlRWxlbWVudChicm93c2VyLT5tYWlu
RnJhbWUoKSk7CisjZW5kaWYKKworICAgIC8vIEFkZCBnbG9iYWwgbGlzdGVuZXJzIGZvciBBdGtP
YmplY3QncyBzaWduYWxzLgorICAgIHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xv
YmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6
c3RhdGUtY2hhbmdlIik7CisgICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2Jh
bF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OmZv
Y3VzLWV2ZW50Iik7CisgICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gYXRr
X2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiQVRLOkF0
a09iamVjdDphY3RpdmUtZGVzY2VuZGFudC1jaGFuZ2VkIik7CisgICAgY2hpbGRyZW5DaGFuZ2Vk
TGlzdGVuZXJJZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRM
aXN0ZW5lciwgIkFUSzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIpOworICAgIHByb3BlcnR5
Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVj
dEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnByb3BlcnR5LWNoYW5nZSIpOworICAgIHZp
c2libGVEYXRhQ2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5l
cihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJBVEs6QXRrT2JqZWN0OnZpc2libGUtZGF0YS1jaGFu
Z2VkIik7CisKKyAgICAvLyBFbnN1cmUgdGhlIEF0ayBpbnRlcmZhY2UgdHlwZXMgYXJlIHJlZ2lz
dGVyZWQsIG90aGVyd2lzZQorICAgIC8vIHRoZSBBdGtEb2N1bWVudCBzaWduYWwgaGFuZGxlcnMg
YmVsb3cgd29uJ3QgZ2V0IHJlZ2lzdGVyZWQuCisgICAgR09iamVjdCogZHVtbXlBeE9iamVjdCA9
IEdfT0JKRUNUKGdfb2JqZWN0X25ldyhBVEtfVFlQRV9PQkpFQ1QsIDApKTsKKyAgICBBdGtPYmpl
Y3QqIGR1bW15Tm9PcEF4T2JqZWN0ID0gYXRrX25vX29wX29iamVjdF9uZXcoZHVtbXlBeE9iamVj
dCk7CisgICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoZHVtbXlOb09wQXhPYmplY3QpKTsKKyAg
ICBnX29iamVjdF91bnJlZihkdW1teUF4T2JqZWN0KTsKK30KKwordm9pZCBkaXNjb25uZWN0QWNj
ZXNzaWJpbGl0eUNhbGxiYWNrcygpCit7CisgICAgLy8gQXRrT2JqZWN0IHNpZ25hbHMuCisgICAg
aWYgKHN0YXRlQ2hhbmdlTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9l
dmVudF9saXN0ZW5lcihzdGF0ZUNoYW5nZUxpc3RlbmVySWQpOworICAgICAgICBzdGF0ZUNoYW5n
ZUxpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAoZm9jdXNFdmVudExpc3RlbmVySWQpIHsK
KyAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZm9jdXNFdmVudExpc3Rl
bmVySWQpOworICAgICAgICBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlm
IChhY3RpdmVEZXNjZW5kYW50Q2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92
ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklk
KTsKKyAgICAgICAgYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKKyAgICB9
CisgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQpIHsKKyAgICAgICAgYXRrX3JlbW92
ZV9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoY2hpbGRyZW5DaGFuZ2VkTGlzdGVuZXJJZCk7CisgICAg
ICAgIGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQgPSAwOworICAgIH0KKyAgICBpZiAocHJvcGVy
dHlDaGFuZ2VkTGlzdGVuZXJJZCkgeworICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9s
aXN0ZW5lcihwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkKTsKKyAgICAgICAgcHJvcGVydHlDaGFu
Z2VkTGlzdGVuZXJJZCA9IDA7CisgICAgfQorICAgIGlmICh2aXNpYmxlRGF0YUNoYW5nZWRMaXN0
ZW5lcklkKSB7CisgICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKHZpc2li
bGVEYXRhQ2hhbmdlZExpc3RlbmVySWQpOworICAgICAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0
ZW5lcklkID0gMDsKKyAgICB9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxMDMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKQEAgLTAs
MCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hh
ZWwgQWxvbnpvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgor
CisjaWYgSEFWRShBQ0NFU1NJQklMSVRZKQorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxi
YWNrcy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbmNsdWRlICJE
dW1wUmVuZGVyVHJlZS5oIgorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCitzdGF0aWMgYm9vbCBs
b2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOworCitBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKK3sKK30KKworQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgs
IGludCB5KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwor
Cit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dGb2N1c0V2ZW50cyhib29sKQor
eworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dTY3JvbGxpbmdTdGFy
dEV2ZW50cyhib29sKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRM
b2dWYWx1ZUNoYW5nZUV2ZW50cyhib29sKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKGJvb2wgbG9nQWNjZXNzaWJpbGl0eUV2
ZW50cykKK3sKKyAgICBpZiAobG9nQWNjZXNzaWJpbGl0eUV2ZW50cyA9PSBsb2dnaW5nQWNjZXNz
aWJpbGl0eUV2ZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFsb2dBY2Nlc3NpYmls
aXR5RXZlbnRzKSB7CisgICAgICAgIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7
CisgICAgICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygpOworICAg
IGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gdHJ1ZTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjIwNjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAK
QEAgLTAsMCArMSwxMDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBB
bG9uem8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisKKyNp
ZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmlu
Z1JlZi5oPgorI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVz
Lmg+CisKK3N0YXRpYyBTdHJpbmcgY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKEpTU3RyaW5n
UmVmIGF0dHJpYnV0ZSkKK3sKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4
aW11bVVURjhDU3RyaW5nU2l6ZShhdHRyaWJ1dGUpOworICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZl
cihzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7CisgICAgSlNTdHJp
bmdHZXRVVEY4Q1N0cmluZyhhdHRyaWJ1dGUsIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisK
KyAgICBTdHJpbmcgYXR0cmlidXRlU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIuZ2V0
KCkpOworICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYUGxhY2Vob2xkZXJWYWx1ZSIpCisg
ICAgICAgIHJldHVybiAicGxhY2Vob2xkZXItdGV4dCI7CisKKyAgICByZXR1cm4gIiI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIHJvbGVUb1N0cmluZyhBdGtSb2xlIHJvbGUpCit7CisgICAg
c3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBBVEtfUk9MRV9BTEVSVDoKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYQWxlcnQiOworICAgIGNhc2UgQVRLX1JPTEVfQ0FOVkFTOgorICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhDYW52YXMiOworICAgIGNhc2UgQVRLX1JPTEVfQ0hFQ0tfQk9YOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDaGVja0JveCI7CisgICAgY2FzZSBBVEtfUk9MRV9D
T0xVTU5fSEVBREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb2x1bW5IZWFkZXIiOwor
ICAgIGNhc2UgQVRLX1JPTEVfQ09NQk9fQk9YOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhD
b21ib0JveCI7CisgICAgY2FzZSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRToKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYV2ViQXJlYSI7CisgICAgY2FzZSBBVEtfUk9MRV9FTlRSWToKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYVGV4dEZpZWxkIjsKKyAgICBjYXNlIEFUS19ST0xFX0ZPT1RF
UjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRm9vdGVyIjsKKyAgICBjYXNlIEFUS19ST0xF
X0ZPUk06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEZvcm0iOworICAgIGNhc2UgQVRLX1JP
TEVfR1JPVVBJTkc6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsKKyAgICBjYXNl
IEFUS19ST0xFX0hFQURJTkc6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhlYWRpbmciOwor
ICAgIGNhc2UgQVRLX1JPTEVfSU1BR0U6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEltYWdl
IjsKKyAgICBjYXNlIEFUS19ST0xFX0lNQUdFX01BUDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYSW1hZ2VNYXAiOworICAgIGNhc2UgQVRLX1JPTEVfTEFCRUw6CisgICAgICAgIHJldHVybiAi
QVhSb2xlOiBBWExhYmVsIjsKKyAgICBjYXNlIEFUS19ST0xFX0xJTks6CisgICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWExpbmsiOworICAgIGNhc2UgQVRLX1JPTEVfTElTVDoKKyAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYTGlzdCI7CisgICAgY2FzZSBBVEtfUk9MRV9MSVNUX0JPWDoKKyAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdEJveCI7CisgICAgY2FzZSBBVEtfUk9MRV9MSVNUX0lU
RU06CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWExpc3RJdGVtIjsKKyAgICBjYXNlIEFUS19S
T0xFX01FTlU6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnUiOworICAgIGNhc2UgQVRL
X1JPTEVfTUVOVV9CQVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWE1lbnVCYXIiOworICAg
IGNhc2UgQVRLX1JPTEVfTUVOVV9JVEVNOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhNZW51
SXRlbSI7CisgICAgY2FzZSBBVEtfUk9MRV9QQUdFX1RBQjoKKyAgICAgICAgcmV0dXJuICJBWFJv
bGU6IEFYVGFiIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q6CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFRhYkdyb3VwIjsKKyAgICBjYXNlIEFUS19ST0xFX1BBTkVMOgorICAg
ICAgICByZXR1cm4gIkFYUm9sZTogQVhHcm91cCI7CisgICAgY2FzZSBBVEtfUk9MRV9QQVJBR1JB
UEg6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBhcmFncmFwaCI7CisgICAgY2FzZSBBVEtf
Uk9MRV9QQVNTV09SRF9URVhUOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhQYXNzd29yZEZp
ZWxkIjsKKyAgICBjYXNlIEFUS19ST0xFX1BVU0hfQlVUVE9OOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhCdXR0b24iOworICAgIGNhc2UgQVRLX1JPTEVfUkFESU9fQlVUVE9OOgorICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhSYWRpb0J1dHRvbiI7CisgICAgY2FzZSBBVEtfUk9MRV9ST1df
SEVBREVSOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3dIZWFkZXIiOworICAgIGNhc2Ug
QVRLX1JPTEVfUlVMRVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJ1bGVyIjsKKyAgICBj
YXNlIEFUS19ST0xFX1NDUk9MTF9CQVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNjcm9s
bEJhciI7CisgICAgY2FzZSBBVEtfUk9MRV9TQ1JPTExfUEFORToKKyAgICAgICAgcmV0dXJuICJB
WFJvbGU6IEFYU2Nyb2xsQXJlYSI7CisgICAgY2FzZSBBVEtfUk9MRV9TRUNUSU9OOgorICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhEaXYiOworICAgIGNhc2UgQVRLX1JPTEVfU0VQQVJBVE9SOgor
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhIb3Jpem9udGFsUnVsZSI7CisgICAgY2FzZSBBVEtf
Uk9MRV9TTElERVI6CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFNsaWRlciI7CisgICAgY2Fz
ZSBBVEtfUk9MRV9TUElOX0JVVFRPTjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU3BpbkJ1
dHRvbiI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6
IEFYVGFibGUiOworICAgIGNhc2UgQVRLX1JPTEVfVEFCTEVfQ0VMTDoKKyAgICAgICAgcmV0dXJu
ICJBWFJvbGU6IEFYQ2VsbCI7CisgICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9DT0xVTU5fSEVBREVS
OgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhDb2x1bW5IZWFkZXIiOworICAgIGNhc2UgQVRL
X1JPTEVfVEFCTEVfUk9XOgorICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhSb3ciOworICAgIGNh
c2UgQVRLX1JPTEVfVEFCTEVfUk9XX0hFQURFUjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
Um93SGVhZGVyIjsKKyAgICBjYXNlIEFUS19ST0xFX1RPR0dMRV9CVVRUT046CisgICAgICAgIHJl
dHVybiAiQVhSb2xlOiBBWFRvZ2dsZUJ1dHRvbiI7CisgICAgY2FzZSBBVEtfUk9MRV9UT09MX0JB
UjoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVG9vbGJhciI7CisgICAgY2FzZSBBVEtfUk9M
RV9UT09MX1RJUDoKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVXNlckludGVyZmFjZVRvb2x0
aXAiOworICAgIGNhc2UgQVRLX1JPTEVfVFJFRToKKyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
VHJlZSI7CisgICAgY2FzZSBBVEtfUk9MRV9UUkVFX1RBQkxFOgorICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhUcmVlR3JpZCI7CisgICAgY2FzZSBBVEtfUk9MRV9UUkVFX0lURU06CisgICAgICAg
IHJldHVybiAiQVhSb2xlOiBBWFRyZWVJdGVtIjsKKyAgICBjYXNlIEFUS19ST0xFX1dJTkRPVzoK
KyAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYV2luZG93IjsKKyAgICBjYXNlIEFUS19ST0xFX1VO
S05PV046CisgICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFVua25vd24iOworICAgIGRlZmF1bHQ6
CisgICAgICAgIC8vIFdlIHdhbnQgdG8gZGlzdGluZ3Vpc2ggQVRLX1JPTEVfVU5LTk9XTiBmcm9t
IGEga25vd24gQXRrUm9sZSB3aGljaAorICAgICAgICAvLyBvdXIgRFJUIGlzbid0IHByb3Blcmx5
IGhhbmRsaW5nLgorICAgICAgICByZXR1cm4gIkFYUm9sZTogRklYTUUgbm90IGlkZW50aWZpZWQi
OworICAgIH0KK30KKworc3RhdGljIGlubGluZSBnY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JS
ZXN1bHRzKGdjaGFyKiBzdHIpCit7CisgICAgU3RyaW5nIHVTdHJpbmcgPSBTdHJpbmc6OmZyb21V
VEY4KHN0cik7CisKKyAgICAvLyBUaGUgb2JqZWN0IHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBw
YXNzZWQgYWxvbmcgdG8gQVRzIHNvIHdlIG5lZWQgdG8gYmUKKyAgICAvLyBhYmxlIHRvIHRlc3Qg
Zm9yIHRoZWlyIHByZXNlbmNlIGFuZCBkbyBzbyB3aXRob3V0IGNhdXNpbmcgdGVzdCBmYWlsdXJl
cy4KKyAgICB1U3RyaW5nLnJlcGxhY2Uob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsICI8b2Jq
PiIpOworCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBhY2Nl
c3NpYmxlIHRleHQgb2YgYSBzaW5nbGUgb2JqZWN0CisgICAgLy8gaXMgYXBwcm9wcmlhdGUsIGJ1
dCBpdCBtYWtlcyB0ZXN0IHJlc3VsdHMgKGVzcGVjaWFsbHkgdGhlIGFjY2Vzc2libGUgdHJlZSkK
KyAgICAvLyBoYXJkZXIgdG8gcmVhZC4KKyAgICB1U3RyaW5nLnJlcGxhY2UoIlxuIiwgIjxcXG4+
Iik7CisKKyAgICByZXR1cm4gZ19zdHJkdXAodVN0cmluZy51dGY4KCkuZGF0YSgpKTsKK30KKwor
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJ
RWxlbWVudCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCit7CisgICAgaWYgKG1f
ZWxlbWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZWxlbWVudCk7Cit9CisKK0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCYgb3RoZXIpCisgICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQorewor
ICAgIGlmIChtX2VsZW1lbnQpCisgICAgICAgIGdfb2JqZWN0X3JlZihtX2VsZW1lbnQpOworfQor
CitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudCgpCit7Cisg
ICAgaWYgKG1fZWxlbWVudCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9lbGVtZW50KTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRMaW5rZWRVSUVsZW1lbnRzKFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudHMpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlu
a3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVj
dG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBjaGlsZHJlbikKK3sKKyAgICBpbnQgY291bnQg
PSBjaGlsZHJlbkNvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7
CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7CisgICAgfQorfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiYgZWxlbWVudFZlY3RvciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAg
IEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19P
QkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAgICAgIGVsZW1lbnRWZWN0b3IuYXBwZW5kKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKKyAgICB9Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpyb3dDb3VudCgpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKKworICAgIHJl
dHVybiBhdGtfdGFibGVfZ2V0X25fcm93cyhBVEtfVEFCTEUobV9lbGVtZW50KSk7Cit9CisKK2lu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCgpCit7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2Vs
ZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFCTEUo
bV9lbGVtZW50KSk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNv
dW50KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBB
U1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfb2JqZWN0
X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKK30KKwor
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQ
b2ludChpbnQgeCwgaW50IHkpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYXRrX2NvbXBvbmVudF9y
ZWZfYWNjZXNzaWJsZV9hdF9wb2ludChBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksIHgsIHksIEFU
S19YWV9XSU5ET1cpKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpsaW5rZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpCit7CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGNoaWxkcmVuOwor
ICAgIGdldENoaWxkcmVuV2l0aFJhbmdlKGNoaWxkcmVuLCBpbmRleCwgaW5kZXggKyAxKTsKKwor
ICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmF0
KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmluZGV4T2ZDaGlsZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQoreyAKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK2djaGFyKiBhdHRyaWJ1
dGVTZXRUb1N0cmluZyhBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCkKK3sKKyAgICBHU3Ry
aW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7CisgICAgZm9yIChHU0xpc3QqIGF0dHJpYnV0ZXMg
PSBhdHRyaWJ1dGVTZXQ7IGF0dHJpYnV0ZXM7IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLT5uZXh0
KSB7CisgICAgICAgIEF0a0F0dHJpYnV0ZSogYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0
cmlidXRlKj4oYXR0cmlidXRlcy0+ZGF0YSk7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJp
YnV0ZURhdGEoZ19zdHJjb25jYXQoYXR0cmlidXRlLT5uYW1lLCAiOiIsIGF0dHJpYnV0ZS0+dmFs
dWUsIE5VTEwpKTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgYXR0cmlidXRlRGF0YS5n
ZXQoKSk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLT5uZXh0KQorICAgICAgICAgICAgZ19zdHJp
bmdfYXBwZW5kKHN0ciwgIiwgIik7CisgICAgfQorCisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUo
c3RyLCBGQUxTRSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFs
bEF0dHJpYnV0ZXMoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIEFTU0VSVChBVEtfSVNfT0JK
RUNUKG1fZWxlbWVudCkpOworICAgIEdPd25QdHI8Z2NoYXI+IGF0dHJpYnV0ZURhdGEoYXR0cmli
dXRlU2V0VG9TdHJpbmcoYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyhBVEtfT0JKRUNUKG1fZWxl
bWVudCkpKSk7CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJp
YnV0ZURhdGEuZ2V0KCkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50
TGlua3MoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCit7CisgICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQXRrUmVsYXRpb25TZXQqIHNldCA9IGF0
a19vYmplY3RfcmVmX3JlbGF0aW9uX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlm
ICghc2V0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEF0a09iamVjdCogdGFyZ2V0ID0gMDsK
KyAgICBpbnQgY291bnQgPSBhdGtfcmVsYXRpb25fc2V0X2dldF9uX3JlbGF0aW9ucyhzZXQpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBBdGtSZWxhdGlv
biogcmVsYXRpb24gPSBhdGtfcmVsYXRpb25fc2V0X2dldF9yZWxhdGlvbihzZXQsIGkpOworICAg
ICAgICBpZiAoYXRrX3JlbGF0aW9uX2dldF9yZWxhdGlvbl90eXBlKHJlbGF0aW9uKSA9PSBBVEtf
UkVMQVRJT05fTEFCRUxMRURfQlkpIHsKKyAgICAgICAgICAgIEdQdHJBcnJheSogdGFyZ2V0TGlz
dCA9IGF0a19yZWxhdGlvbl9nZXRfdGFyZ2V0KHJlbGF0aW9uKTsKKyAgICAgICAgICAgIGlmICh0
YXJnZXRMaXN0LT5sZW4pCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8QXRr
T2JqZWN0Kj4oZ19wdHJfYXJyYXlfaW5kZXgodGFyZ2V0TGlzdCwgMCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZ19vYmplY3RfdW5yZWYoc2V0KTsKKyAgICByZXR1cm4gdGFyZ2V0ID8gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCh0YXJnZXQpIDogMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50KCkKK3sKKyAgICBpZiAo
IW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRLX0lTX09CSkVD
VChtX2VsZW1lbnQpKTsKKworICAgIEF0a09iamVjdCogcGFyZW50ID0gIGF0a19vYmplY3RfZ2V0
X3BhcmVudChBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIHJldHVybiBwYXJlbnQgPyBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KHBhcmVudCkgOiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVk
QXR0cmlidXRlTmFtZXMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCit7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29i
amVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlmICghcm9sZSkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBT
dHJpbmcgcm9sZVN0cmluZyA9IHJvbGVUb1N0cmluZyhyb2xlKTsKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocm9sZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKK30KKwor
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Vicm9sZSgpCit7CisgICAgcmV0
dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNj
cmlwdGlvbigpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRpdGxlKCkKK3sKKyAgICBjb25zdCBnY2hhciogbmFtZSA9IGF0a19vYmpl
Y3RfZ2V0X25hbWUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKyAgICBHT3duUHRyPGdjaGFyPiBh
eFRpdGxlKGdfc3RyZHVwX3ByaW50ZigiQVhUaXRsZTogJXMiLCBuYW1lID8gbmFtZSA6ICIiKSk7
CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXhUaXRsZS5nZXQo
KSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9u
KCkKK3sKKyAgICBjb25zdCBnY2hhciogZGVzY3JpcHRpb24gPSBhdGtfb2JqZWN0X2dldF9kZXNj
cmlwdGlvbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgaWYgKCFkZXNjcmlwdGlvbikK
KyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAg
ICBHT3duUHRyPGdjaGFyPiBheERlc2MoZ19zdHJkdXBfcHJpbnRmKCJBWERlc2NyaXB0aW9uOiAl
cyIsIGRlc2NyaXB0aW9uKSk7CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoYXhEZXNjLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RyaW5nVmFsdWUoKQoreworICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfVEVY
VChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKKworICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQo
bV9lbGVtZW50KSwgMCwgLTEpOworICAgIEdPd25QdHI8Z2NoYXI+IGF4VmFsdWUoZ19zdHJkdXBf
cHJpbnRmKCJBWFZhbHVlOiAlcyIsIHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyh0ZXh0KSkp
OworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhheFZhbHVlLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bGFuZ3VhZ2UoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIC8vIEluIEFUSywg
dGhlIGRvY3VtZW50IGxhbmd1YWdlIGlzIGV4cG9zZWQgYXMgdGhlIGRvY3VtZW50J3MgbG9jYWxl
LgorICAgIGlmIChhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSkgPT0g
QVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhnX3N0cmR1cF9wcmludGYoIkFYTGFuZ3VhZ2U6ICVzIiwgYXRrX2RvY3Vt
ZW50X2dldF9sb2NhbGUoQVRLX0RPQ1VNRU5UKG1fZWxlbWVudCkpKSk7CisKKyAgICAvLyBGb3Ig
YWxsIG90aGVyIG9iamVjdHMsIHRoZSBsYW5ndWFnZSBpcyBleHBvc2VkIGFzIGFuIEF0a1RleHQg
YXR0cmlidXRlLgorICAgIGlmICghQVRLX0lTX1RFWFQobV9lbGVtZW50KSkKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBmb3IgKEdTTGlz
dCogdGV4dEF0dHJpYnV0ZXMgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEFUS19U
RVhUKG1fZWxlbWVudCkpOyB0ZXh0QXR0cmlidXRlczsgdGV4dEF0dHJpYnV0ZXMgPSB0ZXh0QXR0
cmlidXRlcy0+bmV4dCkgeworICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9IHN0
YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KHRleHRBdHRyaWJ1dGVzLT5kYXRhKTsKKyAgICAgICAg
aWYgKCFzdHJjbXAoYXRrQXR0cmlidXRlLT5uYW1lLCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoQVRLX1RFWFRfQVRUUl9MQU5HVUFHRSkpKQorICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMiLCBh
dGtBdHRyaWJ1dGUtPnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp4KCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9u
KEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKKworICAg
IHJldHVybiB4OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSgpCit7Cisg
ICAgaW50IHgsIHk7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9O
RU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CisKKyAgICByZXR1cm4geTsK
K30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKK3sKKyAgICBpbnQg
d2lkdGgsIGhlaWdodDsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVO
VChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgcmV0dXJuIHdpZHRoOworfQor
Citkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KCkKK3sKKyAgICBpbnQgd2lk
dGgsIGhlaWdodDsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVCht
X2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgcmV0dXJuIGhlaWdodDsKK30KKwor
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKCkKK3sKKyAgICAvLyBO
b3RlOiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgd2UgaGF2ZSBpbiBBVEsuCisgICAgcmV0dXJuIDAu
ZjsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKK3sK
KyAgICAvLyBOb3RlOiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgd2UgaGF2ZSBpbiBBVEsuCisgICAg
cmV0dXJuIDAuZjsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3Jp
ZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCitkb3VibGUgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKSBjb25zdAoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsg
MCwgeyB7IDAgfSB9IH07CisKKyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtf
VkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKKyAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRkxPQVQo
JnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Zs
b2F0KCZ2YWx1ZSk7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1
ZSgpCit7CisgICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKKworICAgIGlmICgh
QVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgYXRr
X3ZhbHVlX2dldF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwor
ICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQorICAgICAgICByZXR1cm4gMC4w
ZjsKKyAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVlKTsKK30KKworZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7
IDAsIHsgeyAwIH0gfSB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAg
ICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X21heGltdW1fdmFsdWUoQVRL
X1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisgICAgaWYgKCFHX1ZBTFVFX0hPTERTX0ZMT0FU
KCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiAwLjBmOworICAgIHJldHVybiBnX3ZhbHVlX2dldF9m
bG9hdCgmdmFsdWUpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2
YWx1ZURlc2NyaXB0aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IGFmdGVyIGl0IGhh
cyBiZWVuIGltcGxlbWVudGVkIGluIEFUSy4KKyAgICAvLyBTZWU6IGh0dHBzOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1NzYKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tFbGVtZW50U3Rh
dGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVUeXBlIHN0YXRlVHlwZSkKK3sK
KyAgICBpZiAoIUFUS19JU19PQkpFQ1QoZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmpl
Y3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKGVsZW1lbnQpKSk7CisgICAgcmV0dXJuIGF0a19z
dGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIHN0YXRlVHlwZSk7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4g
Y2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtfU1RBVEVfRU5BQkxFRCk7Cit9CisKK2lu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzUmVxdWlyZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2Vk
KCkgY29uc3QKK3sKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9w
dEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOwor
ICAgIGdib29sZWFuIGlzRm9jdXNlZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3Rh
dGVTZXQuZ2V0KCksIEFUS19TVEFURV9GT0NVU0VEKTsKKworICAgIHJldHVybiBpc0ZvY3VzZWQ7
Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX1NFTEVD
VEVEKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExldmVs
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphcmlhRHJvcEVmZmVjdHMoKSBjb25zdAoreyAgIAorICAgIHJldHVybiAwOyAKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkgY29uc3QKK3sKKyAgICBpZiAo
IUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
R1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZf
c3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIGdib29sZWFuIGlzRXhwYW5k
ZWQgPSBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RB
VEVfRVhQQU5ERUQpOworCisgICAgcmV0dXJuIGlzRXhwYW5kZWQ7Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIUFUS19JU19P
QkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxB
dGtTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0
KEFUS19PQkpFQ1QobV9lbGVtZW50KSkpOworICAgIGdib29sZWFuIGlzQ2hlY2tlZCA9IGF0a19z
dGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0KCksIEFUS19TVEFURV9DSEVDS0VE
KTsKKworICAgIHJldHVybiBpc0NoZWNrZWQ7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
Um93SGVhZGVycygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJv
d3MoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9
CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRl
cigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aW5kZXhJblRhYmxlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxl
bWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCit7CisgICAgR093blB0cjxnY2hhcj4gcmFu
Z2VTdHJpbmcoZ19zdHJkdXAoInswLCAwfSIpKTsKKworICAgIGlmICghZWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgp
KTsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKTsKKworICAgIEF0a09iamVj
dCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQpKTsK
KyAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKKwor
ICAgIC8vIExvb2sgZm9yIHRoZSBjZWxsIGluIHRoZSB0YWJsZS4KKyAgICBnaW50IGluZGV4SW5Q
YXJlbnQgPSBhdGtfb2JqZWN0X2dldF9pbmRleF9pbl9wYXJlbnQoQVRLX09CSkVDVChlbGVtZW50
KSk7CisgICAgaWYgKGluZGV4SW5QYXJlbnQgPT0gLTEpCisgICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7CisKKyAgICBpbnQgcm93
ID0gLTE7CisgICAgaW50IGNvbHVtbiA9IC0xOworICAgIHJvdyA9IGF0a190YWJsZV9nZXRfcm93
X2F0X2luZGV4KEFUS19UQUJMRShheFRhYmxlKSwgaW5kZXhJblBhcmVudCk7CisgICAgY29sdW1u
ID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRl
eEluUGFyZW50KTsKKworICAgIC8vIEdldCB0aGUgYWN0dWFsIHZhbHVlcywgaWYgcm93IGFuZCBj
b2x1bW5zIGFyZSB2YWxpZCB2YWx1ZXMuCisgICAgaWYgKHJvdyAhPSAtMSAmJiBjb2x1bW4gIT0g
LTEpIHsKKyAgICAgICAgaW50IGJhc2UgPSAwOworICAgICAgICBpbnQgbGVuZ3RoID0gMDsKKyAg
ICAgICAgaWYgKGlzUm93UmFuZ2UpIHsKKyAgICAgICAgICAgIGJhc2UgPSByb3c7CisgICAgICAg
ICAgICBsZW5ndGggPSBhdGtfdGFibGVfZ2V0X3Jvd19leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFi
bGUpLCByb3csIGNvbHVtbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlID0g
Y29sdW1uOworICAgICAgICAgICAgbGVuZ3RoID0gYXRrX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50
X2F0KEFUS19UQUJMRShheFRhYmxlKSwgcm93LCBjb2x1bW4pOworICAgICAgICB9CisgICAgICAg
IHJhbmdlU3RyaW5nLnNldChnX3N0cmR1cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVuZ3Ro
KSk7CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJh
bmdlU3RyaW5nLmdldCgpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93SW5kZXhSYW5nZSgpCit7CisgICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9yIHJvd3MuCisg
ICAgcmV0dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudCwgdHJ1ZSk7Cit9CisKK0pTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UoKQoreworICAg
IC8vIFJhbmdlIGluIHRhYmxlIGZvciBjb2x1bW5zLgorICAgIHJldHVybiBpbmRleFJhbmdlSW5U
YWJsZShtX2VsZW1lbnQsIGZhbHNlKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleChpbnQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JS
YW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFu
Z2UodW5zaWduZWQsIHVuc2lnbmVkKSAKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9IAorCitKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2UodW5z
aWduZWQsIHVuc2lnbmVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQodW5zaWduZWQg
bG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0ZShBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50KiBzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25OZXh0LCBKU1N0cmluZ1JlZiBz
ZWFyY2hLZXksIEpTU3RyaW5nUmVmIHNlYXJjaFRleHQpCit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudAorICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNp
Z25lZCByb3cpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKKworICAgIEF0a09iamVjdCogZm91
bmRDZWxsID0gYXRrX3RhYmxlX3JlZl9hdChBVEtfVEFCTEUobV9lbGVtZW50KSwgcm93LCBjb2x1
bW4pOworICAgIHJldHVybiBmb3VuZENlbGwgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGZvdW5k
Q2VsbCkgOiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxl
Y3RlZFRleHRSYW5nZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1Jl
ZiBhdHRyaWJ1dGUpCit7CisgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgU3RyaW5nIGF0a0F0dHJpYnV0
ZU5hbWUgPSBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoYXR0cmlidXRlKTsKKyAgICBpZiAo
YXRrQXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgZm9yIChHU0xpc3QqIGF0a0F0dHJpYnV0ZXMg
PSBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7IGF0a0F0
dHJpYnV0ZXM7IGF0a0F0dHJpYnV0ZXMgPSBhdGtBdHRyaWJ1dGVzLT5uZXh0KSB7CisgICAgICAg
IEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4o
YXRrQXR0cmlidXRlcy0+ZGF0YSk7CisgICAgICAgIGlmICghc3RyY21wKGF0a0F0dHJpYnV0ZS0+
bmFtZSwgYXRrQXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdGtBdHRyaWJ1dGUtPnZhbHVlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30K
KworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIDAuMGY7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0
ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
QXR0cmlidXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxh
dGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKK3sKKyAgICBpZiAoIWVsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChBVEtfSVNfVkFMVUUoZWxlbWVudCkpOwor
CisgICAgR1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBhdGtfdmFsdWVf
Z2V0X2N1cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKKwor
ICAgIEdWYWx1ZSBpbmNyZW1lbnQgPSBHX1ZBTFVFX0lOSVQ7CisgICAgYXRrX3ZhbHVlX2dldF9t
aW5pbXVtX2luY3JlbWVudChBVEtfVkFMVUUoZWxlbWVudCksICZpbmNyZW1lbnQpOworCisgICAg
R1ZhbHVlIG5ld1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmbmV3VmFs
dWUsIEdfVFlQRV9GTE9BVCk7CisKKyAgICBnX3ZhbHVlX3NldF9mbG9hdCgmbmV3VmFsdWUsIGdf
dmFsdWVfZ2V0X2Zsb2F0KCZjdXJyZW50VmFsdWUpICsgZmFjdG9yICogZ192YWx1ZV9nZXRfZmxv
YXQoJmluY3JlbWVudCkpOworICAgIGF0a192YWx1ZV9zZXRfY3VycmVudF92YWx1ZShBVEtfVkFM
VUUoZWxlbWVudCksICZuZXdWYWx1ZSk7CisKKyAgICBnX3ZhbHVlX3Vuc2V0KCZuZXdWYWx1ZSk7
CisgICAgZ192YWx1ZV91bnNldCgmaW5jcmVtZW50KTsKKyAgICBnX3ZhbHVlX3Vuc2V0KCZjdXJy
ZW50VmFsdWUpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgp
Cit7CisgICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAxKTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpkZWNyZW1lbnQoKQoreworICAgIGFsdGVyQ3VycmVudFZhbHVl
KG1fZWxlbWVudCwgLTEpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNz
KCkKK3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KEFUS19JU19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBpZiAoIUFUS19JU19BQ1RJT04obV9l
bGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT25seSBvbmUgYWN0aW9uIHBlciBv
YmplY3QgaXMgc3VwcG9ydGVkIHNvIGZhci4KKyAgICBhdGtfYWN0aW9uX2RvX2FjdGlvbihBVEtf
QUNUSU9OKG1fZWxlbWVudCksIDApOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNob3dNZW51KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkUm93QXRJbmRleCh1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2ln
bmVkIGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFGbG93VG9FbGVtZW50QXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgp
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4g
MDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
aXNjbG9zZWRCeVJvdygpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVu
dEVuY29kaW5nKCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFU
S19PQkpFQ1QobV9lbGVtZW50KSk7CisgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRf
RlJBTUUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVu
dF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiRW5jb2Rpbmci
KSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJ
KCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSk7CisgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCisg
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19kb2N1bWVudF9nZXRfYXR0
cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVOVChtX2VsZW1lbnQpLCAiVVJJIikpOworfQorCitKU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1cmwoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5l
cihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
K30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Cit7
CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdSZWZQdHI8QXRrU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19v
YmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudCkpKTsKKyAgICBnYm9vbGVh
biBpc0ZvY3VzYWJsZSA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3RhdGVTZXQuZ2V0
KCksIEFUS19TVEFURV9GT0NVU0FCTEUpOworCisgICAgcmV0dXJuIGlzRm9jdXNhYmxlOworfQor
Citib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRFX1NFTEVDVEFC
TEUpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LCBBVEtf
U1RBVEVfTVVMVElTRUxFQ1RBQkxFKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbigp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZCgpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aGFzUG9wdXAoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3Vz
KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGFrZVNlbGVjdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZFNlbGVjdGlvbigpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92
ZVNlbGVjdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01h
a2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlz
dHMudHh0CmluZGV4IGMwNjhlYTcuLjY3ZjkwNWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
Q01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw1IEBACiBzZXQoRHVtcFJlbmRlclRyZWVfU09VUkNF
UworICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxi
YWNrc0F0ay5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWVDb21tb24uY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0N5Y2xpY1JlZHVu
ZGFuY3lDaGVjay5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvR0NDb250cm9s
bGVyLmNwcApAQCAtODgsNiArODksNyBAQCBzZXQoRHVtcFJlbmRlclRyZWVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9ydW50aW1lCiAgICAgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L0ZvcndhcmRpbmdIZWFkZXJzCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5k
ZXJUcmVlCisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2F0awogICAgICR7VE9PTFNf
RElSfS9EdW1wUmVuZGVyVHJlZS9jYWlybwogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJl
ZS9lZmwKICAgICAke1dURl9ESVJ9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
QWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhmMmM4MDIuLjAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2li
aWxpdHlDYWxsYmFja3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIgotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIldl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgotCi1zdGF0aWMgZ3VpbnQgc3RhdGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKLXN0
YXRpYyBndWludCBmb2N1c0V2ZW50TGlzdGVuZXJJZCA9IDA7Ci1zdGF0aWMgZ3VpbnQgYWN0aXZl
RGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkID0gMDsKLXN0YXRpYyBndWludCBjaGlsZHJlbkNo
YW5nZWRMaXN0ZW5lcklkID0gMDsKLXN0YXRpYyBndWludCBwcm9wZXJ0eUNoYW5nZWRMaXN0ZW5l
cklkID0gMDsKLXN0YXRpYyBndWludCB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gMDsK
LQotc3RhdGljIHZvaWQgcHJpbnRBY2Nlc3NpYmlsaXR5RXZlbnQoQXRrT2JqZWN0KiBhY2Nlc3Np
YmxlLCBjb25zdCBnY2hhciogc2lnbmFsTmFtZSwgY29uc3QgZ2NoYXIqIHNpZ25hbFZhbHVlKQot
ewotICAgIC8vIERvIG5vdCBoYW5kbGUgc3RhdGUtY2hhbmdlOmRlZnVuY3Qgc2lnbmFscywgYXMg
dGhlIEF0a09iamVjdAotICAgIC8vIGFzc29jaWF0ZWQgdG8gdGhlbSB3aWxsIG5vdCBiZSB2YWxp
ZCBhdCB0aGlzIHBvaW50IGFscmVhZHkuCi0gICAgaWYgKCFzaWduYWxOYW1lIHx8ICFnX3N0cmNt
cDAoc2lnbmFsTmFtZSwgInN0YXRlLWNoYW5nZTpkZWZ1bmN0IikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghYWNjZXNzaWJsZSB8fCAhQVRLX0lTX09CSkVDVChhY2Nlc3NpYmxlKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgZ2NoYXIqIG9iamVjdE5hbWUgPSBhdGtfb2JqZWN0
X2dldF9uYW1lKGFjY2Vzc2libGUpOwotICAgIEF0a1JvbGUgb2JqZWN0Um9sZSA9IGF0a19vYmpl
Y3RfZ2V0X3JvbGUoYWNjZXNzaWJsZSk7Ci0KLSAgICAvLyBUcnkgdG8gYWx3YXlzIHByb3ZpZGUg
YSBuYW1lIHRvIGJlIGxvZ2dlZCBmb3IgdGhlIG9iamVjdC4KLSAgICBpZiAoIW9iamVjdE5hbWUg
fHwgKm9iamVjdE5hbWUgPT0gJ1wwJykKLSAgICAgICAgb2JqZWN0TmFtZSA9ICIoTm8gbmFtZSki
OwotCi0gICAgR093blB0cjxnY2hhcj4gc2lnbmFsTmFtZUFuZFZhbHVlKHNpZ25hbFZhbHVlID8g
Z19zdHJkdXBfcHJpbnRmKCIlcyA9ICVzIiwgc2lnbmFsTmFtZSwgc2lnbmFsVmFsdWUpIDogZ19z
dHJkdXAoc2lnbmFsTmFtZSkpOwotICAgIHByaW50ZigiQWNjZXNzaWJpbGl0eSBvYmplY3QgZW1p
dHRlZCBcIiVzXCIgLyBOYW1lOiBcIiVzXCIgLyBSb2xlOiAlZFxuIiwKLSAgICAgICAgICAgc2ln
bmFsTmFtZUFuZFZhbHVlLmdldCgpLCBvYmplY3ROYW1lLCBvYmplY3RSb2xlKTsKLX0KLQotc3Rh
dGljIGdib29sZWFuIGF4T2JqZWN0RXZlbnRMaXN0ZW5lcihHU2lnbmFsSW52b2NhdGlvbkhpbnQg
KnNpZ25hbEhpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50
IG51bVBhcmFtVmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHVmFsdWUgKnBhcmFtVmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncG9pbnRlciBkYXRhKQotewotICAgIC8vIEF0IGxlYXN0IHdlIHNob3VsZCByZWNl
aXZlIHRoZSBpbnN0YW5jZSBlbWl0dGluZyB0aGUgc2lnbmFsLgotICAgIGlmIChudW1QYXJhbVZh
bHVlcyA8IDEpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgQXRrT2JqZWN0KiBhY2Nlc3Np
YmxlID0gQVRLX09CSkVDVChnX3ZhbHVlX2dldF9vYmplY3QoJnBhcmFtVmFsdWVzWzBdKSk7Ci0g
ICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUpKQotICAgICAg
ICByZXR1cm4gVFJVRTsKLQotICAgIEdTaWduYWxRdWVyeSBzaWduYWxfcXVlcnk7Ci0gICAgR093
blB0cjxnY2hhcj4gc2lnbmFsTmFtZTsKLSAgICBHT3duUHRyPGdjaGFyPiBzaWduYWxWYWx1ZTsK
LQotICAgIGdfc2lnbmFsX3F1ZXJ5KHNpZ25hbEhpbnQtPnNpZ25hbF9pZCwgJnNpZ25hbF9xdWVy
eSk7Ci0KLSAgICBpZiAoIWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25hbWUsICJzdGF0
ZS1jaGFuZ2UiKSkgewotICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cF9wcmludGYoInN0
YXRlLWNoYW5nZTolcyIsIGdfdmFsdWVfZ2V0X3N0cmluZygmcGFyYW1WYWx1ZXNbMV0pKSk7Ci0g
ICAgICAgIHNpZ25hbFZhbHVlLnNldChnX3N0cmR1cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRf
Ym9vbGVhbigmcGFyYW1WYWx1ZXNbMl0pKSk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNp
Z25hbF9xdWVyeS5zaWduYWxfbmFtZSwgImZvY3VzLWV2ZW50IikpIHsKLSAgICAgICAgc2lnbmFs
TmFtZS5zZXQoZ19zdHJkdXAoImZvY3VzLWV2ZW50IikpOwotICAgICAgICBzaWduYWxWYWx1ZS5z
ZXQoZ19zdHJkdXBfcHJpbnRmKCIlZCIsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4oJnBhcmFtVmFsdWVz
WzFdKSkpOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxfcXVlcnkuc2lnbmFsX25h
bWUsICJjaGlsZHJlbi1jaGFuZ2VkIikpIHsKLSAgICAgICAgc2lnbmFsTmFtZS5zZXQoZ19zdHJk
dXAoImNoaWxkcmVuLWNoYW5nZWQiKSk7Ci0gICAgICAgIHNpZ25hbFZhbHVlLnNldChnX3N0cmR1
cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfdWludCgmcGFyYW1WYWx1ZXNbMV0pKSk7Ci0gICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbF9xdWVyeS5zaWduYWxfbmFtZSwgInByb3BlcnR5
LWNoYW5nZSIpKSB7Ci0gICAgICAgIHNpZ25hbE5hbWUuc2V0KGdfc3RyZHVwX3ByaW50ZigicHJv
cGVydHktY2hhbmdlOiVzIiwgZ19xdWFya190b19zdHJpbmcoc2lnbmFsSGludC0+ZGV0YWlsKSkp
OwotICAgIH0gZWxzZQotICAgICAgICBzaWduYWxOYW1lLnNldChnX3N0cmR1cChzaWduYWxfcXVl
cnkuc2lnbmFsX25hbWUpKTsKLQotICAgIHByaW50QWNjZXNzaWJpbGl0eUV2ZW50KGFjY2Vzc2li
bGUsIHNpZ25hbE5hbWUuZ2V0KCksIHNpZ25hbFZhbHVlLmdldCgpKTsKLQotICAgIHJldHVybiBU
UlVFOwotfQotCi12b2lkIGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkKLXsKLSAgICAv
LyBFbnN1cmUgbm8gY2FsbGJhY2tzIGFyZSBjb25uZWN0ZWQgYmVmb3JlLgotICAgIGRpc2Nvbm5l
Y3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBhY2Nlc3Np
YmlsaXR5IGlzIGluaXRpYWxpemVkIGZvciB0aGUgV2ViVmlldyBieSBxdWVyeWluZyBmb3IKLSAg
ICAvLyB0aGUgcm9vdCBhY2Nlc3NpYmxlIG9iamVjdCwgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGZ1
bGwgaGllcmFyY2h5LgotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vz
c2libGVFbGVtZW50KG1haW5GcmFtZSk7Ci0KLSAgICAvLyBBZGQgZ2xvYmFsIGxpc3RlbmVycyBm
b3IgQXRrT2JqZWN0J3Mgc2lnbmFscy4KLSAgICBzdGF0ZUNoYW5nZUxpc3RlbmVySWQgPSBhdGtf
YWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVuZXIsICJHdGs6QXRr
T2JqZWN0OnN0YXRlLWNoYW5nZSIpOwotICAgIGZvY3VzRXZlbnRMaXN0ZW5lcklkID0gYXRrX2Fk
ZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09i
amVjdDpmb2N1cy1ldmVudCIpOwotICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJ
ZCA9IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwg
Ikd0azpBdGtPYmplY3Q6YWN0aXZlLWRlc2NlbmRhbnQtY2hhbmdlZCIpOwotICAgIGNoaWxkcmVu
Q2hhbmdlZExpc3RlbmVySWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVj
dEV2ZW50TGlzdGVuZXIsICJHdGs6QXRrT2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQiKTsKLSAgICBw
cm9wZXJ0eUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIo
YXhPYmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09iamVjdDpwcm9wZXJ0eS1jaGFuZ2UiKTsK
LSAgICB2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRf
bGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAiR3RrOkF0a09iamVjdDp2aXNpYmxlLWRh
dGEtY2hhbmdlZCIpOwotCi0gICAgLy8gRW5zdXJlIHRoZSBBdGsgaW50ZXJmYWNlIHR5cGVzIGFy
ZSByZWdpc3RlcmVkLCBvdGhlcndpc2UKLSAgICAvLyB0aGUgQXRrRG9jdW1lbnQgc2lnbmFsIGhh
bmRsZXJzIGJlbG93IHdvbid0IGdldCByZWdpc3RlcmVkLgotICAgIEdPYmplY3QqIGR1bW15QXhP
YmplY3QgPSBHX09CSkVDVChnX29iamVjdF9uZXcoQVRLX1RZUEVfT0JKRUNULCAwKSk7Ci0gICAg
QXRrT2JqZWN0KiBkdW1teU5vT3BBeE9iamVjdCA9IGF0a19ub19vcF9vYmplY3RfbmV3KGR1bW15
QXhPYmplY3QpOwotICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGR1bW15Tm9PcEF4T2JqZWN0
KSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoZHVtbXlBeE9iamVjdCk7Ci19Ci0KLXZvaWQgZGlzY29u
bmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKQotewotICAgIC8vIEF0a09iamVjdCBzaWduYWxz
LgotICAgIGlmIChzdGF0ZUNoYW5nZUxpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9n
bG9iYWxfZXZlbnRfbGlzdGVuZXIoc3RhdGVDaGFuZ2VMaXN0ZW5lcklkKTsKLSAgICAgICAgc3Rh
dGVDaGFuZ2VMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYgKGZvY3VzRXZlbnRMaXN0ZW5l
cklkKSB7Ci0gICAgICAgIGF0a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGZvY3VzRXZl
bnRMaXN0ZW5lcklkKTsKLSAgICAgICAgZm9jdXNFdmVudExpc3RlbmVySWQgPSAwOwotICAgIH0K
LSAgICBpZiAoYWN0aXZlRGVzY2VuZGFudENoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0
a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlz
dGVuZXJJZCk7Ci0gICAgICAgIGFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkTGlzdGVuZXJJZCA9IDA7
Ci0gICAgfQotICAgIGlmIChjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkKSB7Ci0gICAgICAgIGF0
a19yZW1vdmVfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGNoaWxkcmVuQ2hhbmdlZExpc3RlbmVySWQp
OwotICAgICAgICBjaGlsZHJlbkNoYW5nZWRMaXN0ZW5lcklkID0gMDsKLSAgICB9Ci0gICAgaWYg
KHByb3BlcnR5Q2hhbmdlZExpc3RlbmVySWQpIHsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxf
ZXZlbnRfbGlzdGVuZXIocHJvcGVydHlDaGFuZ2VkTGlzdGVuZXJJZCk7Ci0gICAgICAgIHByb3Bl
cnR5Q2hhbmdlZExpc3RlbmVySWQgPSAwOwotICAgIH0KLSAgICBpZiAodmlzaWJsZURhdGFDaGFu
Z2VkTGlzdGVuZXJJZCkgewotICAgICAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5l
cih2aXNpYmxlRGF0YUNoYW5nZWRMaXN0ZW5lcklkKTsKLSAgICAgICAgdmlzaWJsZURhdGFDaGFu
Z2VkTGlzdGVuZXJJZCA9IDA7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzIyNTc1Ny4uMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNj
ZXNzaWJpbGl0eUNhbGxiYWNrcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQWNjZXNzaWJpbGl0eUNh
bGxiYWNrc19oCi0jZGVmaW5lIEFjY2Vzc2liaWxpdHlDYWxsYmFja3NfaAotCi12b2lkIGNvbm5l
Y3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7Ci12b2lkIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5
Q2FsbGJhY2tzKCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKaW5kZXggNzBmMDgxYS4uODQ4YmFh
MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyR3RrLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJHdGsuY3BwCkBAIC0zNyw0MCArMzcsNiBAQAogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXQuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAKLXN0YXRpYyBib29s
IGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7Ci0KLUFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCi17Ci19Ci0KLUFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQotewotfQotCi1BY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbGVtZW50QXRQb2ludChpbnQg
eCwgaW50IHkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2Vk
RWxlbWVudCgpCi17Ci0gICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxlID0gIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Z2V0Rm9jdXNlZEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7Ci0gICAg
aWYgKCFhY2Nlc3NpYmxlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCi17Ci0gICAgQXRrT2JqZWN0
KiBhY2Nlc3NpYmxlID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRSb290QWNjZXNzaWJs
ZUVsZW1lbnQobWFpbkZyYW1lKTsKLSAgICBpZiAoIWFjY2Vzc2libGUpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7Ci19
Ci0KIHN0YXRpYyBBdGtPYmplY3QqIGNoaWxkRWxlbWVudEJ5SWQoQXRrT2JqZWN0KiBwYXJlbnQs
IGNvbnN0IGNoYXIqIGlkKQogewogICAgIGlmICghQVRLX0lTX09CSkVDVChwYXJlbnQpKQpAQCAt
OTYsNiArNjIsMjQgQEAgc3RhdGljIEF0a09iamVjdCogY2hpbGRFbGVtZW50QnlJZChBdGtPYmpl
Y3QqIHBhcmVudCwgY29uc3QgY2hhciogaWQpCiAgICAgcmV0dXJuIDA7CiB9CiAKK0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkK
K3sKKyAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpnZXRGb2N1c2VkQWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKKyAgICBpZiAoIWFjY2Vz
c2libGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoYWNjZXNzaWJsZSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKK3sKKyAgICBBdGtPYmplY3QqIGFjY2Vzc2li
bGUgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxlRWxlbWVudCht
YWluRnJhbWUpOworICAgIGlmICghYWNjZXNzaWJsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKK30KKwogQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1l
bnRCeUlkKEpTU3RyaW5nUmVmIGlkKQogewogICAgIEF0a09iamVjdCogcm9vdCA9IER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7CkBA
IC0xMTMsMzkgKzk3LDMgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmUKICAgICByZXR1cm4gMDsK
IAogfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dGb2N1c0V2ZW50cyhi
b29sKQotewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dTY3JvbGxp
bmdTdGFydEV2ZW50cyhib29sKQotewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpzZXRMb2dWYWx1ZUNoYW5nZUV2ZW50cyhib29sKQotewotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKGJvb2wgbG9nQWNjZXNzaWJp
bGl0eUV2ZW50cykKLXsKLSAgICBpZiAobG9nQWNjZXNzaWJpbGl0eUV2ZW50cyA9PSBsb2dnaW5n
QWNjZXNzaWJpbGl0eUV2ZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFsb2dBY2Nl
c3NpYmlsaXR5RXZlbnRzKSB7Ci0gICAgICAgIGRpc2Nvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJh
Y2tzKCk7Ci0gICAgICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gZmFsc2U7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygp
OwotICAgIGxvZ2dpbmdBY2Nlc3NpYmlsaXR5RXZlbnRzID0gdHJ1ZTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYp
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCi17Ci19CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKaW5kZXggNGFi
OTk5NS4uMzBmN2I2NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcApAQCAtMzcsNDA4ICszNyw2IEBACiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KIAotc3RhdGljIFN0cmluZyBjb3JlQXR0cmlidXRlVG9BdGtBdHRyaWJ1dGUoSlNT
dHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGF0dHJpYnV0ZSk7Ci0gICAgR093blB0cjxnY2hhcj4g
YnVmZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKLSAgICBK
U1N0cmluZ0dldFVURjhDU3RyaW5nKGF0dHJpYnV0ZSwgYnVmZmVyLmdldCgpLCBidWZmZXJTaXpl
KTsKLQotICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZl
ci5nZXQoKSk7Ci0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhQbGFjZWhvbGRlclZhbHVl
IikKLSAgICAgICAgcmV0dXJuICJwbGFjZWhvbGRlci10ZXh0IjsKLQotICAgIHJldHVybiAiIjsK
LX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgcm9sZVRvU3RyaW5nKEF0a1JvbGUgcm9sZSkKLXsK
LSAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIEFUS19ST0xFX0FMRVJUOgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhBbGVydCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DQU5WQVM6Ci0gICAg
ICAgIHJldHVybiAiQVhSb2xlOiBBWENhbnZhcyI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DSEVDS19C
T1g6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENoZWNrQm94IjsKLSAgICBjYXNlIEFUS19S
T0xFX0NPTFVNTl9IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbHVtbkhlYWRl
ciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DT01CT19CT1g6Ci0gICAgICAgIHJldHVybiAiQVhSb2xl
OiBBWENvbWJvQm94IjsKLSAgICBjYXNlIEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhXZWJBcmVhIjsKLSAgICBjYXNlIEFUS19ST0xFX0VOVFJZOgot
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUZXh0RmllbGQiOwotICAgIGNhc2UgQVRLX1JPTEVf
Rk9PVEVSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhGb290ZXIiOwotICAgIGNhc2UgQVRL
X1JPTEVfRk9STToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYRm9ybSI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9HUk9VUElORzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYR3JvdXAiOwotICAg
IGNhc2UgQVRLX1JPTEVfSEVBRElORzoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYSGVhZGlu
ZyI7Ci0gICAgY2FzZSBBVEtfUk9MRV9JTUFHRToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
SW1hZ2UiOwotICAgIGNhc2UgQVRLX1JPTEVfSU1BR0VfTUFQOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhJbWFnZU1hcCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MQUJFTDoKLSAgICAgICAgcmV0
dXJuICJBWFJvbGU6IEFYTGFiZWwiOwotICAgIGNhc2UgQVRLX1JPTEVfTElOSzoKLSAgICAgICAg
cmV0dXJuICJBWFJvbGU6IEFYTGluayI7Ci0gICAgY2FzZSBBVEtfUk9MRV9MSVNUOgotICAgICAg
ICByZXR1cm4gIkFYUm9sZTogQVhMaXN0IjsKLSAgICBjYXNlIEFUS19ST0xFX0xJU1RfQk9YOgot
ICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhMaXN0Qm94IjsKLSAgICBjYXNlIEFUS19ST0xFX0xJ
U1RfSVRFTToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTGlzdEl0ZW0iOwotICAgIGNhc2Ug
QVRLX1JPTEVfTUVOVToKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudSI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9NRU5VX0JBUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYTWVudUJhciI7
Ci0gICAgY2FzZSBBVEtfUk9MRV9NRU5VX0lURU06Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBB
WE1lbnVJdGVtIjsKLSAgICBjYXNlIEFUS19ST0xFX1BBR0VfVEFCOgotICAgICAgICByZXR1cm4g
IkFYUm9sZTogQVhUYWIiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFHRV9UQUJfTElTVDoKLSAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYVGFiR3JvdXAiOwotICAgIGNhc2UgQVRLX1JPTEVfUEFORUw6
Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEdyb3VwIjsKLSAgICBjYXNlIEFUS19ST0xFX1BB
UkFHUkFQSDoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUGFyYWdyYXBoIjsKLSAgICBjYXNl
IEFUS19ST0xFX1BBU1NXT1JEX1RFWFQ6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFBhc3N3
b3JkRmllbGQiOwotICAgIGNhc2UgQVRLX1JPTEVfUFVTSF9CVVRUT046Ci0gICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWEJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9SQURJT19CVVRUT046Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJhZGlvQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xF
X1JPV19IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvd0hlYWRlciI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9SVUxFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYUnVsZXIiOwot
ICAgIGNhc2UgQVRLX1JPTEVfU0NST0xMX0JBUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFY
U2Nyb2xsQmFyIjsKLSAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9QQU5FOgotICAgICAgICByZXR1
cm4gIkFYUm9sZTogQVhTY3JvbGxBcmVhIjsKLSAgICBjYXNlIEFUS19ST0xFX1NFQ1RJT046Ci0g
ICAgICAgIHJldHVybiAiQVhSb2xlOiBBWERpdiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TRVBBUkFU
T1I6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWEhvcml6b250YWxSdWxlIjsKLSAgICBjYXNl
IEFUS19ST0xFX1NMSURFUjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYU2xpZGVyIjsKLSAg
ICBjYXNlIEFUS19ST0xFX1NQSU5fQlVUVE9OOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhT
cGluQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxFOgotICAgICAgICByZXR1cm4gIkFY
Um9sZTogQVhUYWJsZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9DRUxMOgotICAgICAgICBy
ZXR1cm4gIkFYUm9sZTogQVhDZWxsIjsKLSAgICBjYXNlIEFUS19ST0xFX1RBQkxFX0NPTFVNTl9I
RUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWENvbHVtbkhlYWRlciI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9UQUJMRV9ST1c6Ci0gICAgICAgIHJldHVybiAiQVhSb2xlOiBBWFJvdyI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9UQUJMRV9ST1dfSEVBREVSOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhSb3dIZWFkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVE9HR0xFX0JVVFRPTjoKLSAgICAg
ICAgcmV0dXJuICJBWFJvbGU6IEFYVG9nZ2xlQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1RP
T0xfQkFSOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhUb29sYmFyIjsKLSAgICBjYXNlIEFU
S19ST0xFX1RPT0xfVElQOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhVc2VySW50ZXJmYWNl
VG9vbHRpcCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UUkVFOgotICAgICAgICByZXR1cm4gIkFYUm9s
ZTogQVhUcmVlIjsKLSAgICBjYXNlIEFUS19ST0xFX1RSRUVfVEFCTEU6Ci0gICAgICAgIHJldHVy
biAiQVhSb2xlOiBBWFRyZWVHcmlkIjsKLSAgICBjYXNlIEFUS19ST0xFX1RSRUVfSVRFTToKLSAg
ICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVHJlZUl0ZW0iOwotICAgIGNhc2UgQVRLX1JPTEVfV0lO
RE9XOgotICAgICAgICByZXR1cm4gIkFYUm9sZTogQVhXaW5kb3ciOwotICAgIGNhc2UgQVRLX1JP
TEVfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuICJBWFJvbGU6IEFYVW5rbm93biI7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgLy8gV2Ugd2FudCB0byBkaXN0aW5ndWlzaCBBVEtfUk9MRV9VTktOT1dO
IGZyb20gYSBrbm93biBBdGtSb2xlIHdoaWNoCi0gICAgICAgIC8vIG91ciBEUlQgaXNuJ3QgcHJv
cGVybHkgaGFuZGxpbmcuCi0gICAgICAgIHJldHVybiAiQVhSb2xlOiBGSVhNRSBub3QgaWRlbnRp
ZmllZCI7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGdjaGFyKiByZXBsYWNlQ2hhcmFjdGVy
c0ZvclJlc3VsdHMoZ2NoYXIqIHN0cikKLXsKLSAgICBTdHJpbmcgdVN0cmluZyA9IFN0cmluZzo6
ZnJvbVVURjgoc3RyKTsKLQotICAgIC8vIFRoZSBvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVy
IGlzIHBhc3NlZCBhbG9uZyB0byBBVHMgc28gd2UgbmVlZCB0byBiZQotICAgIC8vIGFibGUgdG8g
dGVzdCBmb3IgdGhlaXIgcHJlc2VuY2UgYW5kIGRvIHNvIHdpdGhvdXQgY2F1c2luZyB0ZXN0IGZh
aWx1cmVzLgotICAgIHVTdHJpbmcucmVwbGFjZShvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlciwg
IjxvYmo+Iik7Ci0KLSAgICAvLyBUaGUgcHJlc2VuY2Ugb2YgbmV3bGluZSBjaGFyYWN0ZXJzIGlu
IGFjY2Vzc2libGUgdGV4dCBvZiBhIHNpbmdsZSBvYmplY3QKLSAgICAvLyBpcyBhcHByb3ByaWF0
ZSwgYnV0IGl0IG1ha2VzIHRlc3QgcmVzdWx0cyAoZXNwZWNpYWxseSB0aGUgYWNjZXNzaWJsZSB0
cmVlKQotICAgIC8vIGhhcmRlciB0byByZWFkLgotICAgIHVTdHJpbmcucmVwbGFjZSgiXG4iLCAi
PFxcbj4iKTsKLQotICAgIHJldHVybiBnX3N0cmR1cCh1U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwot
fQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQpCi0gICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKLXsKLSAgICBp
ZiAobV9lbGVtZW50KQotICAgICAgICBnX29iamVjdF9yZWYobV9lbGVtZW50KTsKLX0KLQotQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50JiBvdGhlcikKLSAgICA6IG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQp
Ci17Ci0gICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgZ19vYmplY3RfcmVmKG1fZWxlbWVudCk7
Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KCkK
LXsKLSAgICBpZiAobV9lbGVtZW50KQotICAgICAgICBnX29iamVjdF91bnJlZihtX2VsZW1lbnQp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMo
VmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50cykKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1l
bnRMaW5rcyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJl
bihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNoaWxkcmVuKQotewotICAgIGludCBj
b3VudCA9IGNoaWxkcmVuQ291bnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKLSAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsKLSAgICAgICAgY2hpbGRyZW4uYXBw
ZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50VmVjdG9yLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLSAg
ICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
QVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsKLSAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBlbmQo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOwotICAgIH0KLX0KLQotaW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50KCkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOwotCi0g
ICAgcmV0dXJuIGF0a190YWJsZV9nZXRfbl9yb3dzKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKLX0K
LQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KCkKLXsKLSAgICBpZiAo
IW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX1RBQkxF
KG1fZWxlbWVudCkpOwotCi0gICAgcmV0dXJuIGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKEFUS19U
QUJMRShtX2VsZW1lbnQpKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxk
cmVuQ291bnQoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwotCi0gICAgcmV0dXJuIGF0a19v
YmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwot
fQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1l
bnRBdFBvaW50KGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhdGtfY29tcG9u
ZW50X3JlZl9hY2Nlc3NpYmxlX2F0X3BvaW50KEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgeCwg
eSwgQVRLX1hZX1dJTkRPVykpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNp
Z25lZCBpbmRleCkKLXsKLSAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY2hpbGRy
ZW47Ci0gICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRyZW4sIGluZGV4LCBpbmRleCArIDEp
OwotCi0gICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gY2hpbGRy
ZW4uYXQoMCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCi17
IAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotZ2NoYXIqIGF0
dHJpYnV0ZVNldFRvU3RyaW5nKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0KQotewotICAg
IEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKLSAgICBmb3IgKEdTTGlzdCogYXR0cmli
dXRlcyA9IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMt
Pm5leHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxB
dGtBdHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgR093blB0cjxnY2hhcj4g
YXR0cmlidXRlRGF0YShnX3N0cmNvbmNhdChhdHRyaWJ1dGUtPm5hbWUsICI6IiwgYXR0cmlidXRl
LT52YWx1ZSwgTlVMTCkpOwotICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBhdHRyaWJ1dGVE
YXRhLmdldCgpKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMtPm5leHQpCi0gICAgICAgICAgICBn
X3N0cmluZ19hcHBlbmQoc3RyLCAiLCAiKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ19zdHJpbmdf
ZnJlZShzdHIsIEZBTFNFKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YWxsQXR0cmlidXRlcygpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgQVNTRVJUKEFUS19J
U19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgR093blB0cjxnY2hhcj4gYXR0cmlidXRlRGF0YShh
dHRyaWJ1dGVTZXRUb1N0cmluZyhhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKEFUS19PQkpFQ1Qo
bV9lbGVtZW50KSkpKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
YXR0cmlidXRlRGF0YS5nZXQoKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMoKQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
LX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9j
dW1lbnRMaW5rcygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KCkKLXsKLSAgICBpZiAo
IW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdGtSZWxhdGlvblNldCogc2V0
ID0gYXRrX29iamVjdF9yZWZfcmVsYXRpb25fc2V0KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0g
ICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQXRrT2JqZWN0KiB0YXJnZXQg
PSAwOwotICAgIGludCBjb3VudCA9IGF0a19yZWxhdGlvbl9zZXRfZ2V0X25fcmVsYXRpb25zKHNl
dCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIEF0a1Jl
bGF0aW9uKiByZWxhdGlvbiA9IGF0a19yZWxhdGlvbl9zZXRfZ2V0X3JlbGF0aW9uKHNldCwgaSk7
Ci0gICAgICAgIGlmIChhdGtfcmVsYXRpb25fZ2V0X3JlbGF0aW9uX3R5cGUocmVsYXRpb24pID09
IEFUS19SRUxBVElPTl9MQUJFTExFRF9CWSkgewotICAgICAgICAgICAgR1B0ckFycmF5KiB0YXJn
ZXRMaXN0ID0gYXRrX3JlbGF0aW9uX2dldF90YXJnZXQocmVsYXRpb24pOwotICAgICAgICAgICAg
aWYgKHRhcmdldExpc3QtPmxlbikKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBzdGF0aWNfY2Fz
dDxBdGtPYmplY3QqPihnX3B0cl9hcnJheV9pbmRleCh0YXJnZXRMaXN0LCAwKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJlZihzZXQpOwotICAgIHJldHVybiB0YXJnZXQg
PyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHRhcmdldCkgOiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQotewotICAg
IGlmICghbV9lbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChBVEtfSVNf
T0JKRUNUKG1fZWxlbWVudCkpOwotCi0gICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAgYXRrX29iamVj
dF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgcmV0dXJuIHBhcmVudCA/
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVOYW1lcygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKLXsKLSAgICBBdGtSb2xlIHJvbGUgPSBh
dGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0gICAgaWYgKCFyb2xl
KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQot
ICAgIFN0cmluZyByb2xlU3RyaW5nID0gcm9sZVRvU3RyaW5nKHJvbGUpOwotICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyb2xlU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwot
fQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdWJyb2xlKCkKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9s
ZURlc2NyaXB0aW9uKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQotewotICAgIGNvbnN0IGdjaGFyKiBuYW1lID0gYXRr
X29iamVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwotICAgIEdPd25QdHI8Z2No
YXI+IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRpdGxlOiAlcyIsIG5hbWUgPyBuYW1lIDog
IiIpKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheFRpdGxl
LmdldCgpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3Jp
cHRpb24oKQotewotICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlvbiA9IGF0a19vYmplY3RfZ2V0
X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Ci0KLSAgICBpZiAoIWRlc2NyaXB0
aW9uKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
LQotICAgIEdPd25QdHI8Z2NoYXI+IGF4RGVzYyhnX3N0cmR1cF9wcmludGYoIkFYRGVzY3JpcHRp
b246ICVzIiwgZGVzY3JpcHRpb24pKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhheERlc2MuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19J
U19URVhUKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOwotCi0gICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtf
VEVYVChtX2VsZW1lbnQpLCAwLCAtMSk7Ci0gICAgR093blB0cjxnY2hhcj4gYXhWYWx1ZShnX3N0
cmR1cF9wcmludGYoIkFYVmFsdWU6ICVzIiwgcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKHRl
eHQpKSk7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGF4VmFsdWUuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCi17Ci0gICAgaWYgKCFtX2VsZW1lbnQpCi0gICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgLy8gSW4g
QVRLLCB0aGUgZG9jdW1lbnQgbGFuZ3VhZ2UgaXMgZXhwb3NlZCBhcyB0aGUgZG9jdW1lbnQncyBs
b2NhbGUuCi0gICAgaWYgKGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQp
KSA9PSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiQVhMYW5ndWFnZTogJXMiLCBhdGtf
ZG9jdW1lbnRfZ2V0X2xvY2FsZShBVEtfRE9DVU1FTlQobV9lbGVtZW50KSkpKTsKLQotICAgIC8v
IEZvciBhbGwgb3RoZXIgb2JqZWN0cywgdGhlIGxhbmd1YWdlIGlzIGV4cG9zZWQgYXMgYW4gQXRr
VGV4dCBhdHRyaWJ1dGUuCi0gICAgaWYgKCFBVEtfSVNfVEVYVChtX2VsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIGZvciAo
R1NMaXN0KiB0ZXh0QXR0cmlidXRlcyA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMo
QVRLX1RFWFQobV9lbGVtZW50KSk7IHRleHRBdHRyaWJ1dGVzOyB0ZXh0QXR0cmlidXRlcyA9IHRl
eHRBdHRyaWJ1dGVzLT5uZXh0KSB7Ci0gICAgICAgIEF0a0F0dHJpYnV0ZSogYXRrQXR0cmlidXRl
ID0gc3RhdGljX2Nhc3Q8QXRrQXR0cmlidXRlKj4odGV4dEF0dHJpYnV0ZXMtPmRhdGEpOwotICAg
ICAgICBpZiAoIXN0cmNtcChhdGtBdHRyaWJ1dGUtPm5hbWUsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0xBTkdVQUdFKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCJBWExhbmd1YWdlOiAl
cyIsIGF0a0F0dHJpYnV0ZS0+dmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdAogewogICAgIGlmICghbV9lbGVtZW50KQpAQCAt
NDUwLDYwOSArNDgsMyBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxw
VGV4dCgpIGNvbnN0CiAgICAgR093blB0cjxnY2hhcj4gYXhIZWxwVGV4dChnX3N0cmR1cF9wcmlu
dGYoIkFYSGVscDogJXMiLCBoZWxwVGV4dC5kYXRhKCkpKTsKICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoYXhIZWxwVGV4dC5nZXQoKSk7CiB9Ci0KLWRvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIGF0a19jb21w
b25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtf
WFlfU0NSRUVOKTsKLQotICAgIHJldHVybiB4OwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6eSgpCi17Ci0gICAgaW50IHgsIHk7Ci0KLSAgICBhdGtfY29tcG9uZW50X2dldF9w
b3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7
Ci0KLSAgICByZXR1cm4geTsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Ondp
ZHRoKCkKLXsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0
X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAg
cmV0dXJuIHdpZHRoOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0
KCkKLXsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKLQotICAgIGF0a19jb21wb25lbnRfZ2V0X3Np
emUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOwotCi0gICAgcmV0
dXJuIGhlaWdodDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9p
bnRYKCkKLXsKLSAgICAvLyBOb3RlOiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgd2UgaGF2ZSBpbiBB
VEsuCi0gICAgcmV0dXJuIDAuZjsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNsaWNrUG9pbnRZKCkKLXsKLSAgICAvLyBOb3RlOiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgd2Ug
aGF2ZSBpbiBBVEsuCi0gICAgcmV0dXJuIDAuZjsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQot
Ci1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKSBjb25zdAotewotICAg
IEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7IDAgfSB9IH07Ci0KLSAgICBpZiAoIUFUS19JU19WQUxV
RShtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIGF0a192YWx1ZV9nZXRf
Y3VycmVudF92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKLSAgICBpZiAoIUdf
VkFMVUVfSE9MRFNfRkxPQVQoJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgcmV0
dXJuIGdfdmFsdWVfZ2V0X2Zsb2F0KCZ2YWx1ZSk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjptaW5WYWx1ZSgpCi17Ci0gICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9
IH0gfTsKLQotICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCi0gICAgICAgIHJldHVy
biAwLjBmOwotCi0gICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2Vs
ZW1lbnQpLCAmdmFsdWUpOwotICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQot
ICAgICAgICByZXR1cm4gMC4wZjsKLSAgICByZXR1cm4gZ192YWx1ZV9nZXRfZmxvYXQoJnZhbHVl
KTsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKLXsKLSAg
ICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9OwotCi0gICAgaWYgKCFBVEtfSVNfVkFM
VUUobV9lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICBhdGtfdmFsdWVfZ2V0
X21heGltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7Ci0gICAgaWYgKCFH
X1ZBTFVFX0hPTERTX0ZMT0FUKCZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiAwLjBmOwotICAgIHJl
dHVybiBnX3ZhbHVlX2dldF9mbG9hdCgmdmFsdWUpOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50IGFmdGVyIGl0IGhhcyBiZWVuIGltcGxlbWVudGVkIGluIEFUSy4KLSAgICAvLyBTZWU6
IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1NzYKLSAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotc3RhdGljIGJv
b2wgY2hlY2tFbGVtZW50U3RhdGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgQXRrU3RhdGVU
eXBlIHN0YXRlVHlwZSkKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QoZWxlbWVudCkpCi0gICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9
IGFkb3B0R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChlbGVtZW50KSkp
OwotICAgIHJldHVybiBhdGtfc3RhdGVfc2V0X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgp
LCBzdGF0ZVR5cGUpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxl
ZCgpCi17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudCwgQVRLX1NUQVRF
X0VOQUJMRUQpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9p
bnRMaW5lTnVtYmVyKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNQcmVzc0FjdGlvblN1cHBvcnRl
ZCgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luY3JlbWVudEFjdGlvblN1cHBvcnRlZCgp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZCgpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkKCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRm9jdXNlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1f
ZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8QXRrU3RhdGVT
ZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX3N0YXRlX3NldChBVEtfT0JK
RUNUKG1fZWxlbWVudCkpKTsKLSAgICBnYm9vbGVhbiBpc0ZvY3VzZWQgPSBhdGtfc3RhdGVfc2V0
X2NvbnRhaW5zX3N0YXRlKHN0YXRlU2V0LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNFRCk7Ci0KLSAg
ICByZXR1cm4gaXNGb2N1c2VkOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
U2VsZWN0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1l
bnQsIEFUS19TVEFURV9TRUxFQ1RFRCk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAot
ICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFJc0dy
YWJiZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSAKLUpTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0Ci17ICAgCi0gICAg
cmV0dXJuIDA7IAotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQo
KSBjb25zdAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0
R1JlZihhdGtfb2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Ci0g
ICAgZ2Jvb2xlYW4gaXNFeHBhbmRlZCA9IGF0a19zdGF0ZV9zZXRfY29udGFpbnNfc3RhdGUoc3Rh
dGVTZXQuZ2V0KCksIEFUS19TVEFURV9FWFBBTkRFRCk7Ci0KLSAgICByZXR1cm4gaXNFeHBhbmRl
ZDsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAot
ewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBHUmVmUHRyPEF0a1N0YXRlU2V0PiBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdGtf
b2JqZWN0X3JlZl9zdGF0ZV9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKSk7Ci0gICAgZ2Jvb2xl
YW4gaXNDaGVja2VkID0gYXRrX3N0YXRlX3NldF9jb250YWluc19zdGF0ZShzdGF0ZVNldC5nZXQo
KSwgQVRLX1NUQVRFX0NIRUNLRUQpOwotCi0gICAgcmV0dXJuIGlzQ2hlY2tlZDsKLX0KLQotSlNT
dHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVy
cygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0K
LUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMo
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mUm93cygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mSGVhZGVyKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWludCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGUoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJ
blRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKLXsKLSAg
ICBHT3duUHRyPGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgiezAsIDB9IikpOwotCi0gICAg
aWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwotCi0gICAgQVNTRVJUKEFUS19JU19PQkpFQ1QoZWxlbWVu
dCkpOwotCi0gICAgQXRrT2JqZWN0KiBheFRhYmxlID0gYXRrX29iamVjdF9nZXRfcGFyZW50KEFU
S19PQkpFQ1QoZWxlbWVudCkpOwotICAgIGlmICghYXhUYWJsZSB8fCAhQVRLX0lTX1RBQkxFKGF4
VGFibGUpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmFu
Z2VTdHJpbmcuZ2V0KCkpOwotCi0gICAgLy8gTG9vayBmb3IgdGhlIGNlbGwgaW4gdGhlIHRhYmxl
LgotICAgIGdpbnQgaW5kZXhJblBhcmVudCA9IGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVu
dChBVEtfT0JKRUNUKGVsZW1lbnQpKTsKLSAgICBpZiAoaW5kZXhJblBhcmVudCA9PSAtMSkKLSAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdl
dCgpKTsKLQotICAgIGludCByb3cgPSAtMTsKLSAgICBpbnQgY29sdW1uID0gLTE7Ci0gICAgcm93
ID0gYXRrX3RhYmxlX2dldF9yb3dfYXRfaW5kZXgoQVRLX1RBQkxFKGF4VGFibGUpLCBpbmRleElu
UGFyZW50KTsKLSAgICBjb2x1bW4gPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9hdF9pbmRleChBVEtf
VEFCTEUoYXhUYWJsZSksIGluZGV4SW5QYXJlbnQpOwotCi0gICAgLy8gR2V0IHRoZSBhY3R1YWwg
dmFsdWVzLCBpZiByb3cgYW5kIGNvbHVtbnMgYXJlIHZhbGlkIHZhbHVlcy4KLSAgICBpZiAocm93
ICE9IC0xICYmIGNvbHVtbiAhPSAtMSkgewotICAgICAgICBpbnQgYmFzZSA9IDA7Ci0gICAgICAg
IGludCBsZW5ndGggPSAwOwotICAgICAgICBpZiAoaXNSb3dSYW5nZSkgewotICAgICAgICAgICAg
YmFzZSA9IHJvdzsKLSAgICAgICAgICAgIGxlbmd0aCA9IGF0a190YWJsZV9nZXRfcm93X2V4dGVu
dF9hdChBVEtfVEFCTEUoYXhUYWJsZSksIHJvdywgY29sdW1uKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGJhc2UgPSBjb2x1bW47Ci0gICAgICAgICAgICBsZW5ndGggPSBhdGtfdGFi
bGVfZ2V0X2NvbHVtbl9leHRlbnRfYXQoQVRLX1RBQkxFKGF4VGFibGUpLCByb3csIGNvbHVtbik7
Ci0gICAgICAgIH0KLSAgICAgICAgcmFuZ2VTdHJpbmcuc2V0KGdfc3RyZHVwX3ByaW50ZigieyVk
LCAlZH0iLCBiYXNlLCBsZW5ndGgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcocmFuZ2VTdHJpbmcuZ2V0KCkpOwotfQotCi1KU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlKCkKLXsKLSAgICAvLyBSYW5nZSBp
biB0YWJsZSBmb3Igcm93cy4KLSAgICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50
LCB0cnVlKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1u
SW5kZXhSYW5nZSgpCi17Ci0gICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9yIGNvbHVtbnMuCi0gICAg
cmV0dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudCwgZmFsc2UpOwotfQotCi1pbnQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCkKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpIAotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKLX0gCi0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZWRTdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCwgdW5zaWduZWQpCi17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlz
TWlzc3BlbGxlZCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlZGlj
YXRlKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHN0YXJ0RWxlbWVudCwgYm9vbCBpc0RpcmVjdGlv
bk5leHQsIEpTU3RyaW5nUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1
bnNpZ25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdykKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBU1NFUlQoQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpOwot
Ci0gICAgQXRrT2JqZWN0KiBmb3VuZENlbGwgPSBhdGtfdGFibGVfcmVmX2F0KEFUS19UQUJMRSht
X2VsZW1lbnQpLCByb3csIGNvbHVtbik7Ci0gICAgcmV0dXJuIGZvdW5kQ2VsbCA/IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQoZm91bmRDZWxsKSA6IDA7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5z
aWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICBpZiAoIW1fZWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAg
ICBTdHJpbmcgYXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShh
dHRyaWJ1dGUpOwotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBmb3IgKEdT
TGlzdCogYXRrQXR0cmlidXRlcyA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXMoQVRLX09CSkVD
VChtX2VsZW1lbnQpKTsgYXRrQXR0cmlidXRlczsgYXRrQXR0cmlidXRlcyA9IGF0a0F0dHJpYnV0
ZXMtPm5leHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdGtBdHRyaWJ1dGUgPSBzdGF0aWNf
Y2FzdDxBdGtBdHRyaWJ1dGUqPihhdGtBdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgaWYgKCFz
dHJjbXAoYXRrQXR0cmlidXRlLT5uYW1lLCBhdGtBdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkp
KQotICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a0F0
dHJpYnV0ZS0+dmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVt
YmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMC4wZjsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpib29sQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZShKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVN1cHBvcnRlZChKU1N0cmlu
Z1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBh
bHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFjdG9yKQot
ewotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKEFUS19J
U19WQUxVRShlbGVtZW50KSk7Ci0KLSAgICBHVmFsdWUgY3VycmVudFZhbHVlID0gR19WQUxVRV9J
TklUOwotICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUoZWxlbWVudCks
ICZjdXJyZW50VmFsdWUpOwotCi0gICAgR1ZhbHVlIGluY3JlbWVudCA9IEdfVkFMVUVfSU5JVDsK
LSAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1faW5jcmVtZW50KEFUS19WQUxVRShlbGVtZW50KSwg
JmluY3JlbWVudCk7Ci0KLSAgICBHVmFsdWUgbmV3VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAg
Z192YWx1ZV9pbml0KCZuZXdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsKLQotICAgIGdfdmFsdWVfc2V0
X2Zsb2F0KCZuZXdWYWx1ZSwgZ192YWx1ZV9nZXRfZmxvYXQoJmN1cnJlbnRWYWx1ZSkgKyBmYWN0
b3IgKiBnX3ZhbHVlX2dldF9mbG9hdCgmaW5jcmVtZW50KSk7Ci0gICAgYXRrX3ZhbHVlX3NldF9j
dXJyZW50X3ZhbHVlKEFUS19WQUxVRShlbGVtZW50KSwgJm5ld1ZhbHVlKTsKLQotICAgIGdfdmFs
dWVfdW5zZXQoJm5ld1ZhbHVlKTsKLSAgICBnX3ZhbHVlX3Vuc2V0KCZpbmNyZW1lbnQpOwotICAg
IGdfdmFsdWVfdW5zZXQoJmN1cnJlbnRWYWx1ZSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5jcmVtZW50KCkKLXsKLSAgICBhbHRlckN1cnJlbnRWYWx1ZShtX2VsZW1lbnQs
IDEpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCgpCi17Ci0g
ICAgYWx0ZXJDdXJyZW50VmFsdWUobV9lbGVtZW50LCAtMSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cHJlc3MoKQotewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKLQotICAgIGlm
ICghQVRLX0lTX0FDVElPTihtX2VsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBP
bmx5IG9uZSBhY3Rpb24gcGVyIG9iamVjdCBpcyBzdXBwb3J0ZWQgc28gZmFyLgotICAgIGF0a19h
Y3Rpb25fZG9fYWN0aW9uKEFUS19BQ1RJT04obV9lbGVtZW50KSwgMCk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2hvd01lbnUoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
aXNjbG9zZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFPd25z
RWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUZsb3dUb0Vs
ZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkUm93QXRJ
bmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dBdEluZGV4KHVuc2lnbmVkIGlu
ZGV4KQotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZEJ5Um93KCkKLXsKLSAgICByZXR1cm4gMDsKLX0K
LQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZhbHVl
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQotewotICAgIEF0a1JvbGUgcm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBpZiAocm9sZSAh
PSBBVEtfUk9MRV9ET0NVTUVOVF9GUkFNRSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoYXRrX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWUoQVRLX0RPQ1VNRU5UKG1f
ZWxlbWVudCksICJFbmNvZGluZyIpKTsKLX0KLQotSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZG9jdW1lbnRVUkkoKQotewotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3Rf
Z2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKLSAgICBpZiAocm9sZSAhPSBBVEtfUk9M
RV9ET0NVTUVOVF9GUkFNRSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
YXRrX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWUoQVRLX0RPQ1VNRU5UKG1fZWxlbWVudCks
ICJVUkkiKSk7Ci19Ci0KLUpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgp
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFk
ZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJhY2spCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigpCi17Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Rm9jdXNhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0ZVNldD4gc3RhdGVT
ZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19PQkpFQ1QobV9lbGVt
ZW50KSkpOwotICAgIGdib29sZWFuIGlzRm9jdXNhYmxlID0gYXRrX3N0YXRlX3NldF9jb250YWlu
c19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7Ci0KLSAgICByZXR1
cm4gaXNGb2N1c2FibGU7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxl
Y3RhYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50
LCBBVEtfU1RBVEVfU0VMRUNUQUJMRSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBjaGVja0VsZW1lbnRT
dGF0ZShtX2VsZW1lbnQsIEFUS19TVEFURV9NVUxUSVNFTEVDVEFCTEUpOwotfQotCi1ib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzT2ZmU2NyZWVuKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29s
bGFwc2VkKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSWdub3JlZCgpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCgpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKLXsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkU2Vs
ZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJs
ZSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGlu
dCB5KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0dO
VW1ha2VmaWxlLmFtIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggNjNiY2ZiMi4uZTY3NGFl
MSAxMDA2NDQKLS0tIGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvR05VbWFrZWZp
bGUuYW0KQEAgLTEwNiw2ICsxMDYsNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DUFBGTEFH
UyA9IFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAogCS1EVE9QX0xFVkVMX0RJUj1cIiR7c2hlbGwg
cHdkfS8ke3NyY2Rpcn1cIiBcCiAJLUkkKHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRyZWUgXAor
CS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ayBcCiAJLUkkKHNyY2RpcikvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsgXApAQCAtMTQ1LDEwICsx
NDYsMTIgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlUb29scy9EdW1w
UmVuZGVyVHJlZS9Xb3JrUXVldWUuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVl
SXRlbS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jb25maWcuaCBcCisJVG9vbHMvRHVtcFJl
bmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBcCisJVG9vbHMvRHVtcFJlbmRl
clRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3NBdGsuY3BwIFwKKyAgICAJVG9vbHMvRHVt
cFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcCBcCisJVG9vbHMv
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwIFwKIAlUb29s
cy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIFwKIAlUb29s
cy9EdW1wUmVuZGVyVHJlZS9jYWlyby9QaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCBcCi0JVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuaCBcCi0JVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDYWxsYmFja3MuY3BwIFwKIAlUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIFwKIAlUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAgXAogCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgXAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>