<?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>76783</bug_id>
          
          <creation_ts>2012-01-21 08:51:37 -0800</creation_ts>
          <short_desc>[GTK] Refactor GTK&apos;s accessibilitity code to be more modular</short_desc>
          <delta_ts>2012-01-24 13:18:54 -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>Accessibility</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Mario Sanchez Prada">mario</assigned_to>
          <cc>mrobinson</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>540139</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-21 08:51:37 -0800</bug_when>
    <thetext>So far, the AccessibilityObject wrapper for ATK has been mainly implemented in terms of the following few files, inside WebCore/accessibility/gtk:

  - AccessibilityObjectWrapperAtk.cpp: 2780 lines
  - AccessibilityObjectWrapperAtk.h: 67 lines
  - WebKitAccessibleHyperlink.cpp: 408 lines
  - WebKitAccessibleHyperlink.h: 63 lines

As you can see, there&apos;s a BIG file which basically implements both all the functions for an AtkObject wrapping WebCore&apos;s AccessibilityObject *and* also all the ATK interfaces supported at the time by WebKitGTK+, which makes that file huge.

Then we have WebKitAccessibleHyperlink.[h|cpp] in separate files because it represents another kind of GObject (it&apos;s a subclass of AtkHyperlink, which is *not* and AtkObject), which has been created separately not to mix more things inside of that AccessibilityObjectWrapperAtk.cpp file.

The obvious problem with that huge file is that its destiny seems to be to keep growing out of control as long as we add more code, implement more interfaces, fix bugs... which doesn&apos;t look like a good idea from the point of view of readability and also because of more practical issues (not to mix so many unrelated things in the same file).

So, the proposal behind this bug is to take all the implementations for the different ATK interfaces out of that file (similarly to what Mozilla does), so we can keep all the related code, includes, internal functions... properly organized in different files. This way, we would leave in the wrapper&apos;s file just the implementation of AtkObject&apos;s functions and the code to decide which interfaces would implement each (dynamically generated) subclass of WebKitAccessible, and nothing else.

Also, bonus points for this approach is that it would give us a good opportunity to make all that code (2780) compliant with WebKit&apos;s coding style rules once and for all, which is a nice plus if you ask me :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540147</commentid>
    <comment_count>1</comment_count>
      <attachid>123450</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-21 09:45:14 -0800</bug_when>
    <thetext>Created attachment 123450
Patch proposal

Now attaching the patch to &quot;fix&quot; this &quot;issue&quot;.

As you can see the patch is huge, and does not contains any new test. The reason for that, as you probably are already guessing, is that this patch doesn&apos;t change any behavior compared to what is in trunk at the time of writing this: it just moves code around to distribute it among different files, and rename some things to maatch WK&apos;s coding style.

I checked it several times locally and it keeps passing all the tests (both API and layout ones) so, combined with the fact that it didn&apos;t change anything, makes it a safe patch, I think.

So, now asking for review. Thank you in advance!

PS: It would be nice to get this patch (if approved) integrated soon, so other patches in the ATK code that might get in in the meanwhile don&apos;t make too hard to keep this big patch up-to-date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540244</commentid>
    <comment_count>2</comment_count>
      <attachid>123450</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 08:05:51 -0800</bug_when>
    <thetext>Comment on attachment 123450
Patch proposal

Removing the r? flag, since I&apos;ll be now uploading a series of patches (which all will build and pass the tests at any step, if applied sequentially) for the same purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540247</commentid>
    <comment_count>3</comment_count>
      <attachid>123474</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 08:53:05 -0800</bug_when>
    <thetext>Created attachment 123474
1. Rename file for ATK AccessibilityObject wrapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540248</commentid>
    <comment_count>4</comment_count>
      <attachid>123475</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 08:56:56 -0800</bug_when>
    <thetext>Created attachment 123475
2. Rename WebKitAccessible&apos;s public functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540250</commentid>
    <comment_count>5</comment_count>
      <attachid>123476</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 08:58:38 -0800</bug_when>
    <thetext>Created attachment 123476
3. Fix typo in class struct and coding style in WebKitAccessibleHyperlink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540251</commentid>
    <comment_count>6</comment_count>
      <attachid>123477</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 09:02:35 -0800</bug_when>
    <thetext>Created attachment 123477
4. Move function returnString() to a new utility file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540253</commentid>
    <comment_count>7</comment_count>
      <attachid>123478</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 09:04:02 -0800</bug_when>
    <thetext>Created attachment 123478
5. New files for the implementation of the AtkAction interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540254</commentid>
    <comment_count>8</comment_count>
      <attachid>123477</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-22 09:04:46 -0800</bug_when>
    <thetext>Comment on attachment 123477
4. Move function returnString() to a new utility file

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Move common function returnString() our from the wrapper and

I think you have an extra &quot;our&quot; here.

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h:28
&gt; +G_BEGIN_DECLS

No need for G_BEGIN_DECLS and G_END_DECLS here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540258</commentid>
    <comment_count>9</comment_count>
      <attachid>123479</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 09:08:07 -0800</bug_when>
    <thetext>Created attachment 123479
6. New files for the implementation of the AtkComponent interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540259</commentid>
    <comment_count>10</comment_count>
      <attachid>123478</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-22 09:09:36 -0800</bug_when>
    <thetext>Comment on attachment 123478
5. New files for the implementation of the AtkAction interface

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

Please fix the issues below.

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceAction.h:41
&gt; +G_BEGIN_DECLS
&gt; +
&gt; +void webkitAccessibleActionInterfaceInit(AtkActionIface*);
&gt; +
&gt; +gboolean webkitAccessibleActionDoAction(AtkAction*, gint index);
&gt; +
&gt; +gint webkitAccessibleActionGetNActions(AtkAction*);
&gt; +
&gt; +const gchar* webkitAccessibleActionGetDescription(AtkAction*, gint index);
&gt; +
&gt; +const gchar* webkitAccessibleActionGetKeybinding(AtkAction*, gint index);
&gt; +
&gt; +const gchar* webkitAccessibleActionGetName(AtkAction*, gint index);
&gt; +
&gt; +G_END_DECLS

No need to put B_BEGIN_DECLS/G_END_DECLS. I don&apos;t think we usually separate function declarations by newlines like this.

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:2436
&gt; +    {(GInterfaceInitFunc)webkitAccessibleActionInterfaceInit,

You should use a static cast here since you&apos;re rewriting the line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540263</commentid>
    <comment_count>11</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 09:46:15 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; [...]
&gt; No need to put B_BEGIN_DECLS/G_END_DECLS. I don&apos;t think we usually separate function declarations by newlines like this.

Ok. Will fix it before landing.

&gt; &gt; Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:2436
&gt; &gt; +    {(GInterfaceInitFunc)webkitAccessibleActionInterfaceInit,
&gt; 
&gt; You should use a static cast here since you&apos;re rewriting the line.

static_cast doesn&apos;t seem to work in this case, so I think the way to go is use reinterpret_cast instead. I know it&apos;s the most dangerous cast, but in this case is really equivalent to what we already have in place, so I think it&apos;s just fine.

Note: Before uploading more patches, I will update then with this suggestions. Thanks for the feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540264</commentid>
    <comment_count>12</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 09:46:39 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 123477 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123477&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Move common function returnString() our from the wrapper and
&gt; 
&gt; I think you have an extra &quot;our&quot; here.
&gt; 
&gt; &gt; Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h:28
&gt; &gt; +G_BEGIN_DECLS
&gt; 
&gt; No need for G_BEGIN_DECLS and G_END_DECLS here.

Will fix this two as well before landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540267</commentid>
    <comment_count>13</comment_count>
      <attachid>123481</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 09:56:24 -0800</bug_when>
    <thetext>Created attachment 123481
4. Move function returnString() to a new utility file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540268</commentid>
    <comment_count>14</comment_count>
      <attachid>123477</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 09:57:03 -0800</bug_when>
    <thetext>Comment on attachment 123477
4. Move function returnString() to a new utility file

I uploaded a newer version of this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540272</commentid>
    <comment_count>15</comment_count>
      <attachid>123482</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 10:07:06 -0800</bug_when>
    <thetext>Created attachment 123482
6. New files for the implementation of the AtkComponent interface

Uploading new version of this patch, taking into account the issues Martin pointed out for the one about the AtkAction interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540273</commentid>
    <comment_count>16</comment_count>
      <attachid>123483</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 10:11:45 -0800</bug_when>
    <thetext>Created attachment 123483
6. New files for the implementation of the AtkComponent interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540274</commentid>
    <comment_count>17</comment_count>
      <attachid>123482</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 10:12:44 -0800</bug_when>
    <thetext>Comment on attachment 123482
6. New files for the implementation of the AtkComponent interface

Looks like git format-patch messed up with this patch, so marking it as obsolete. Sorry for the spam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540275</commentid>
    <comment_count>18</comment_count>
      <attachid>123484</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 10:18:40 -0800</bug_when>
    <thetext>Created attachment 123484
7. New files for the implementation of the AtkDocument interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540276</commentid>
    <comment_count>19</comment_count>
      <attachid>123485</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 10:24:06 -0800</bug_when>
    <thetext>Created attachment 123485
8. New files for the implementation of the AtkEditableText interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540277</commentid>
    <comment_count>20</comment_count>
      <attachid>123486</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 10:29:22 -0800</bug_when>
    <thetext>Created attachment 123486
9. New files for the implementation of the AtkHyperlinkImpl interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540278</commentid>
    <comment_count>21</comment_count>
      <attachid>123487</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 10:32:13 -0800</bug_when>
    <thetext>Created attachment 123487
10. New files for the implementation of the AtkHypertext interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540286</commentid>
    <comment_count>22</comment_count>
      <attachid>123490</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:08:02 -0800</bug_when>
    <thetext>Created attachment 123490
10. New files for the implementation of the AtkHypertext interface

Attaching the patch again since the previous one missed the needed include line for WebkitAccessibleInterfaceHypertext.h in the ATK wrapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540288</commentid>
    <comment_count>23</comment_count>
      <attachid>123491</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:10:01 -0800</bug_when>
    <thetext>Created attachment 123491
11. New files for the implementation of the AtkImage interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540289</commentid>
    <comment_count>24</comment_count>
      <attachid>123492</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:12:41 -0800</bug_when>
    <thetext>Created attachment 123492
12. New files for the implementation of the AtkSelection interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540290</commentid>
    <comment_count>25</comment_count>
      <attachid>123493</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:14:08 -0800</bug_when>
    <thetext>Created attachment 123493
13. New files for the implementation of the AtkText interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540293</commentid>
    <comment_count>26</comment_count>
      <attachid>123494</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:16:15 -0800</bug_when>
    <thetext>Created attachment 123494
14. New files for the implementation of the AtkTable interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540295</commentid>
    <comment_count>27</comment_count>
      <attachid>123495</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:17:50 -0800</bug_when>
    <thetext>Created attachment 123495
15. New files for the implementation of the AtkValue interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540296</commentid>
    <comment_count>28</comment_count>
      <attachid>123496</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:20:13 -0800</bug_when>
    <thetext>Created attachment 123496
16. Cleanup the list of includes in WebKitAccessibleWrapperAtk.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540297</commentid>
    <comment_count>29</comment_count>
      <attachid>123497</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-22 11:22:32 -0800</bug_when>
    <thetext>Created attachment 123497
17. Fix coding style in the ATK AccessibilityObject wrapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540450</commentid>
    <comment_count>30</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-23 02:21:20 -0800</bug_when>
    <thetext>Committed r105604: &lt;http://trac.webkit.org/changeset/105604&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540465</commentid>
    <comment_count>31</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-23 03:43:45 -0800</bug_when>
    <thetext>Committed r105607: &lt;http://trac.webkit.org/changeset/105607&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540466</commentid>
    <comment_count>32</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-23 03:46:20 -0800</bug_when>
    <thetext>Committed r105608: &lt;http://trac.webkit.org/changeset/105608&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540469</commentid>
    <comment_count>33</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-23 03:55:17 -0800</bug_when>
    <thetext>Committed r105610: &lt;http://trac.webkit.org/changeset/105610&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540517</commentid>
    <comment_count>34</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-23 06:45:40 -0800</bug_when>
    <thetext>Committed r105618: &lt;http://trac.webkit.org/changeset/105618&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540629</commentid>
    <comment_count>35</comment_count>
      <attachid>123483</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 10:04:34 -0800</bug_when>
    <thetext>Comment on attachment 123483
6. New files for the implementation of the AtkComponent interface

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

Looks good, but consider the rename below.

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h:34
&gt; +void contentsToAtk(WebCore::AccessibilityObject*, AtkCoordType, WebCore::IntRect, gint* x, gint* y, gint* width = 0, gint* height = 0);

If you need to put a comment explaining the method before the definition, it&apos;s a good sign that you should just rename the method to explain it.

contentsRelativetoAtkCoordinateType?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540630</commentid>
    <comment_count>36</comment_count>
      <attachid>123484</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 10:06:00 -0800</bug_when>
    <thetext>Comment on attachment 123484
7. New files for the implementation of the AtkDocument interface

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

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h:34
&gt; +// Adds an accessibility attribute to an AtkAttributeSet, by name and value.
&gt; +AtkAttributeSet* addAttributeToSet(AtkAttributeSet*, const char* name, const char* value);

Instead of having a comment explaining this function, ensure the function name is descriptive enough. In this case, it probably is and you can just omit the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540632</commentid>
    <comment_count>37</comment_count>
      <attachid>123490</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 10:09:36 -0800</bug_when>
    <thetext>Comment on attachment 123490
10. New files for the implementation of the AtkHypertext interface

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

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceHypertext.h:28
&gt; +AtkHyperlink* webkitAccessibleHypertextGetLink(AtkHypertext*, gint index);
&gt; +gint webkitAccessibleHypertextGetNLinks(AtkHypertext*);
&gt; +gint webkitAccessibleHypertextGetLinkIndex(AtkHypertext*, gint charIndex);

Are these methods used outside the file? If not they shouldn&apos;t be listed here and instead of should be declared at the top of the file and statically. This seems to be an issue with all of the patches. If you like, you can make this change after all the patches have landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540633</commentid>
    <comment_count>38</comment_count>
      <attachid>123492</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 10:11:07 -0800</bug_when>
    <thetext>Comment on attachment 123492
12. New files for the implementation of the AtkSelection interface

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

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp:166
&gt; +    return false;

It&apos;s a bit more correct to return FALSE or TRUE for functions that return gboolean, but this won&apos;t break anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540638</commentid>
    <comment_count>39</comment_count>
      <attachid>123493</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 10:17:23 -0800</bug_when>
    <thetext>Comment on attachment 123493
13. New files for the implementation of the AtkText interface

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

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceText.cpp:51
&gt; +#include &quot;htmlediting.h&quot;
&gt; +
&gt; +#include &lt;libgail-util/gail-util.h&gt;
&gt; +#include &lt;pango/pango.h&gt;

There is no newline needed between the includes here.

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceText.cpp:139
&gt; +            gchar* text = convertUniCharToUTF8(renderText-&gt;characters(), renderText-&gt;textLength(), box-&gt;start(), box-&gt;end());

Wow! I think you could remove convertUniCharToUTF8 completely and just do:

String text = String(renderText-&gt;characters(), renderText-&gt;textLength());
g_string_append(text.substring(box-&gt;start(), box-&gt;end() - box-&gt;start()).utf8().data());

text is being leaked here anyway.

I know this is just code movement, but you might as well fix this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540640</commentid>
    <comment_count>40</comment_count>
      <attachid>123496</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 10:18:41 -0800</bug_when>
    <thetext>Comment on attachment 123496
16. Cleanup the list of includes in WebKitAccessibleWrapperAtk.cpp

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

Please fix the remaining style issue before landing.

&gt; Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:-82
&gt;  #include &quot;visible_units.h&quot;
&gt;  
&gt; -#include &lt;atk/atk.h&gt;
&gt; -#include &lt;glib.h&gt;

There should be no extra new line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541208</commentid>
    <comment_count>41</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 03:04:08 -0800</bug_when>
    <thetext>Committed r105716: &lt;http://trac.webkit.org/changeset/105716&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541223</commentid>
    <comment_count>42</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 03:41:00 -0800</bug_when>
    <thetext>Committed r105721: &lt;http://trac.webkit.org/changeset/105721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541224</commentid>
    <comment_count>43</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 03:48:09 -0800</bug_when>
    <thetext>Committed r105722: &lt;http://trac.webkit.org/changeset/105722&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541229</commentid>
    <comment_count>44</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 03:55:34 -0800</bug_when>
    <thetext>Committed r105724: &lt;http://trac.webkit.org/changeset/105724&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541232</commentid>
    <comment_count>45</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 03:59:08 -0800</bug_when>
    <thetext>Committed r105725: &lt;http://trac.webkit.org/changeset/105725&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541233</commentid>
    <comment_count>46</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 04:04:35 -0800</bug_when>
    <thetext>Committed r105726: &lt;http://trac.webkit.org/changeset/105726&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541242</commentid>
    <comment_count>47</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 04:25:30 -0800</bug_when>
    <thetext>Committed r105727: &lt;http://trac.webkit.org/changeset/105727&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541275</commentid>
    <comment_count>48</comment_count>
      <attachid>123720</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 05:54:14 -0800</bug_when>
    <thetext>Created attachment 123720
13. New files for the implementation of the AtkText interface

(In reply to comment #39)
&gt; [...]
&gt; &gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceText.cpp:51
&gt; &gt; +#include &quot;htmlediting.h&quot;
&gt; &gt; +
&gt; &gt; +#include &lt;libgail-util/gail-util.h&gt;
&gt; &gt; +#include &lt;pango/pango.h&gt;
&gt; 
&gt; There is no newline needed between the includes here.

Ok. Fixed.

&gt; &gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceText.cpp:139
&gt; &gt; +            gchar* text = convertUniCharToUTF8(renderText-&gt;characters(), renderText-&gt;textLength(), box-&gt;start(), box-&gt;end());
&gt; 
&gt; Wow! I think you could remove convertUniCharToUTF8 completely and just do:
&gt; 
&gt; String text = String(renderText-&gt;characters(), renderText-&gt;textLength());
&gt; g_string_append(text.substring(box-&gt;start(), box-&gt;end() - box-&gt;start()).utf8().data());

Hmm... I&apos;m afraid that wouldn&apos;t work fine in this specific case, since convertUniCharToUTF8() does some more -a11y specific- stuff than what the String class provides, such as replacing breaklines with blank spaces, so the text exposed through the AtkText interface can be seen as a single string for multiline paragraphs.

However, perhaps this is something that could be fixed/improved without needing this (strange?) function, but at the time of this refactoring I&apos;d rather leave it as it is, since that way all the tests keep passing, which is something that doesn&apos;t happen if I use the two lines you proposed here (some API tests will fail).

&gt; text is being leaked here anyway.

Good point. I already fixed this in this new patch, by using GOwnPtr.

&gt; I know this is just code movement, but you might as well fix this one.

I fixed the extra line and the leak, but left the call to convertUniCharToUTF8() in the patch since, as I mentioned above, using your suggestion will break the tests, and so perhaps such a change would deserve a different bug to treat it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541319</commentid>
    <comment_count>49</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 07:36:53 -0800</bug_when>
    <thetext>[Replying to two comments at once]

(In reply to comment #37)
&gt; (From update of attachment 123490 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123490&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceHypertext.h:28
&gt; &gt; +AtkHyperlink* webkitAccessibleHypertextGetLink(AtkHypertext*, gint index);
&gt; &gt; +gint webkitAccessibleHypertextGetNLinks(AtkHypertext*);
&gt; &gt; +gint webkitAccessibleHypertextGetLinkIndex(AtkHypertext*, gint charIndex);
&gt; 
&gt; Are these methods used outside the file? If not they shouldn&apos;t be listed here and instead of should be 
&gt; declared at the top of the file and statically. This seems to be an issue with all of the patches. If you like, 
&gt; you can make this change after all the patches have landed.

The thing is that sometimes it could be interesting to call to some of those functions from the wrapper or even from the implementation files for other ATK interfaces (e.g. Some functions from WebKitInterfaceText are used from WebKitInterfaceTable.cpp), so that&apos;s why I thought it would be interesting to make this functions in the header files.

Another option would be to just make public the WebKitAccessibleXYZInit() function in there and using the generic ATK functions for the interfaces where needed, instead of the specific functions implementing those interfaces in WebKitGTK, but I somewhat I&apos;m inclined to think that the second approach is better since, at the end, even if we use for instance atk_text_get_text() in WebKitAccessibleInterfaceTable.cpp (instead of webkitAccessibleTextGetText, as available in WebKitAccessibleInterfaceText.h), the AtkText object we pass to it must be an instance of WebKitAccessible (subclass of AtkObject) implementing the AtkText interface. And it turns out that whenever we need to call functions of one interface from another interface&apos;s implementation (or the wrapper&apos;s implementation), as we are always inside WebKitGTK, those objects will always be instances of WebKitAccessible, so why to do the extra roundtrip of calling to more generic functions (e.g. AtkText&apos;s functions) instead of using those already provided by our custom implementation for those ATK interfaces (e.g. WebKitAccessibleInterfaceText) ? 

I would understand reasons based on &quot;keeping it more abstract&quot;, but at the end you need that the AtkObjects passed to them are actually instances of our wrapper (otherwise they will fail to find the WebCore&apos;s a11y object they rely on), and so I only need additional an unnecesary levels of indirection in calling, for instance, atk_text_get_text() instead of directly. webkitAccessibleTextGetText.

So, if we agree on this, I think it&apos;s better to publish all the functions related to the implementation of the API for each ATK interface in the header files. If, for the contrary, we finally agree it&apos;s better to use more generic functions, we would only publish the WebKitAccessibleXYZInterfaceInit() functions and change calls as needed. But I&apos;d rather track that as a separate bug in any case.

Opinions? :)

(In reply to comment #38)
&gt; (From update of attachment 123492 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123492&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp:166
&gt; &gt; +    return false;
&gt; 
&gt; It&apos;s a bit more correct to return FALSE or TRUE for functions that return gboolean, but this 
&gt; won&apos;t break anything.

I changed that before landing the patch.

Thanks for the feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541346</commentid>
    <comment_count>50</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 08:23:15 -0800</bug_when>
    <thetext>Committed r105740: &lt;http://trac.webkit.org/changeset/105740&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541353</commentid>
    <comment_count>51</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-24 08:39:16 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; Another option would be to just make public the WebKitAccessibleXYZInit() function in there and using the generic ATK functions for the interfaces where needed, instead of the specific functions implementing those interfaces in WebKitGTK, but I somewhat I&apos;m inclined to think that the second approach is better since, at the end, even if we use for instance atk_text_get_text() in WebKitAccessibleInterfaceTable.cpp (instead of webkitAccessibleTextGetText, as available in WebKitAccessibleInterfaceText.h), the AtkText object we pass to it must be an instance of WebKitAccessible (subclass of AtkObject) implementing the AtkText interface. And it turns out that whenever we need to call functions of one interface from another interface&apos;s implementation (or the wrapper&apos;s implementation), as we are always inside WebKitGTK, those objects will always be instances of WebKitAccessible, so why to do the extra roundtrip of calling to more generic functions (e.g. AtkText&apos;s functions) instead of using those already provided by our custom implementation for those ATK interfaces (e.g. WebKitAccessibleInterfaceText) ? 

I don&apos;t have a strong opinion either way. I do think that if the method isn&apos;t called outside the file though, it shouldn&apos;t be exported in the header. Why not just export the ones that you do use outside the file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541356</commentid>
    <comment_count>52</comment_count>
      <attachid>123720</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-24 08:44:49 -0800</bug_when>
    <thetext>Comment on attachment 123720
13. New files for the implementation of the AtkText interface

Thanks for fixing the leak. Mario has agreed to try to replace the use of Pango with a followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541388</commentid>
    <comment_count>53</comment_count>
      <attachid>123750</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 09:28:58 -0800</bug_when>
    <thetext>Created attachment 123750
13. New files for the implementation of the AtkText interface

(In reply to comment #48)
&gt; [...]&gt; &gt; &gt; Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceText.cpp:139
&gt; &gt; &gt; +            gchar* text = convertUniCharToUTF8(renderText-&gt;characters(), renderText-&gt;textLength(), box-&gt;start(), box-&gt;end());
&gt; &gt; 
&gt; &gt; Wow! I think you could remove convertUniCharToUTF8 completely and just do:
&gt; &gt; 
&gt; &gt; String text = String(renderText-&gt;characters(), renderText-&gt;textLength());
&gt; &gt; g_string_append(text.substring(box-&gt;start(), box-&gt;end() - box-&gt;start()).utf8().data());
&gt; 
&gt; Hmm... I&apos;m afraid that wouldn&apos;t work fine in this specific case, since convertUniCharToUTF8() does some more -a11y specific- stuff than what the String class provides, such as replacing breaklines with blank spaces, so the text exposed through the AtkText interface can be seen as a single string for multiline paragraphs.
&gt; 
&gt; However, perhaps this is something that could be fixed/improved without needing this (strange?) function, but at the time of this refactoring I&apos;d rather leave it as it is, since that way all the tests keep passing, which is something that doesn&apos;t happen if I use the two lines you proposed here (some API tests will fail).

You were right: it was possible to get rid of convertUniCharToUTF8(), so now uploding a new patch that also contains that change (and still passes the tests!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541418</commentid>
    <comment_count>54</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 10:02:26 -0800</bug_when>
    <thetext>Committed r105745: &lt;http://trac.webkit.org/changeset/105745&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541421</commentid>
    <comment_count>55</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 10:04:31 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; [...]
&gt; I don&apos;t have a strong opinion either way. I do think that if the method isn&apos;t called outside the file though, it shouldn&apos;t be exported in the header. Why not just export the ones that you do use outside the file?

I just think that it be nice to keep them all of them exposed in the header files so they are already there if needed from somewhere inside accessibility/gtk. That is, I see it as an internal library for being used by WebKitGTK a11y code :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541449</commentid>
    <comment_count>56</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 10:28:38 -0800</bug_when>
    <thetext>Committed r105749: &lt;http://trac.webkit.org/changeset/105749&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541461</commentid>
    <comment_count>57</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 10:38:01 -0800</bug_when>
    <thetext>Committed r105752: &lt;http://trac.webkit.org/changeset/105752&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541462</commentid>
    <comment_count>58</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-24 10:40:28 -0800</bug_when>
    <thetext>(In reply to comment #55)

&gt; I just think that it be nice to keep them all of them exposed in the header files so they are already there if needed from somewhere inside accessibility/gtk. That is, I see it as an internal library for being used by WebKitGTK a11y code :-)

Think of it this way: when something is static to a file you know for certain that it&apos;s fine to change the behavior of something or remove it. Exporting all the methods unconditionally is like making all members public in an object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541470</commentid>
    <comment_count>59</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 10:49:08 -0800</bug_when>
    <thetext>Committed r105754: &lt;http://trac.webkit.org/changeset/105754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541511</commentid>
    <comment_count>60</comment_count>
      <attachid>123777</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 11:30:15 -0800</bug_when>
    <thetext>Created attachment 123777
18. Don&apos;t expose functions for the ATK interfaces in header files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541514</commentid>
    <comment_count>61</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 11:31:41 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; (In reply to comment #55)
&gt; 
&gt; &gt; I just think that it be nice to keep them all of them exposed in the header files so they are already there if needed from somewhere inside accessibility/gtk. That is, I see it as an internal library for being used by WebKitGTK a11y code :-)
&gt; 
&gt; Think of it this way: when something is static to a file you know for certain that it&apos;s fine to change the behavior of something or remove it. Exporting all the methods unconditionally is like making all members public in an object.

As you can see in comment #60, I just added a last patch to this bug to fix that. 

So yes... you &quot;won&quot; :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541517</commentid>
    <comment_count>62</comment_count>
      <attachid>123777</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-24 11:34:48 -0800</bug_when>
    <thetext>Comment on attachment 123777
18. Don&apos;t expose functions for the ATK interfaces in header files

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541603</commentid>
    <comment_count>63</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-01-24 13:18:54 -0800</bug_when>
    <thetext>Committed r105791: &lt;http://trac.webkit.org/changeset/105791&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123450</attachid>
            <date>2012-01-21 09:45:14 -0800</date>
            <delta_ts>2012-01-22 08:52:46 -0800</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-01-21-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>289120</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5OWRkMmUzMzQ1NmYyZjQzMDAxOWE5NjJiYmFkYmUxODJlZGI4OGQwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDIwIEphbiAyMDEyIDE2OjI2OjU4ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0yMSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJl
IG1vcmUgbW9kdWxhcgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Njc4MwoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
U3BsaXQgdGhlIGNvbnRlbnQgb2YgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGFj
cm9zcwogICAgICAgIGRpZmZlcmVudCBmaWxlcywgYnkgbGVhdmluZyB0aGUgQXRrT2JqZWN0J3Mg
Y29kZSBpbiB0aGUgbWFpbiBvbmVzCiAgICAgICAgZm9yIHRoZSB3cmFwcGVyIChub3cgY2FsbGVk
IFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLltofGNwcF0pCiAgICAgICAgYW5kIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBlYWNoIEFUSyBpbnRlcmZhY2UgaW4gc2VwYXJhdGUgZmlsZXMuCgogICAg
ICAgIE1haW4gZmlsZSBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBVEsgd3JhcHBlci4K
CiAgICAgICAgSW4gdGhlIHNhbWUgd2F5IHRoYXQgaGFwcGVuZWQgd2l0aCB0aGUgaW1wbGVtZW50
YXRpb24gb2YgdGhlIEFUSwogICAgICAgIGludGVyZmFjZXMsIGFsbCB0aGUgZnVuY3Rpb25zIGlu
IHRoaXMgbmV3IGZpbGUgd2VyZSB0YWtlbiBmcm9tIHRoZQogICAgICAgIG9sZCBmaWxlIEFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCwganVzdCBjaGFuZ2luZyB0aGUKICAgICAgICBu
YW1lcyBvZiB0aGVtIGluIHNvbWUgb2Nhc3Npb25zIHRvIG1hdGNoIFdlYktpdCdzIGNvZGluZyBz
dHlsZS4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBl
ckF0ay5jcHA6IEFkZGVkLgogICAgICAgIChmYWxsYmFja09iamVjdCk6CiAgICAgICAgKGNvcmUp
OgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0TmFtZSk6CiAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVHZXREZXNjcmlwdGlvbik6CiAgICAgICAgKHNldEF0a1JlbGF0aW9uU2V0RnJvbUNvcmVP
YmplY3QpOgogICAgICAgIChpc1Jvb3RPYmplY3QpOgogICAgICAgIChhdGtQYXJlbnRPZlJvb3RP
YmplY3QpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0UGFyZW50KToKICAgICAgICAoZ2V0
TkNoaWxkcmVuRm9yVGFibGUpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0TkNoaWxkcmVu
KToKICAgICAgICAoZ2V0Q2hpbGRGb3JUYWJsZSk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVS
ZWZDaGlsZCk6CiAgICAgICAgKGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3cpOgogICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlR2V0SW5kZXhJblBhcmVudCk6CiAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVHZXRBdHRyaWJ1dGVzKToKICAgICAgICAoYXRrUm9sZSk6CiAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVHZXRSb2xlKToKICAgICAgICAoaXNUZXh0V2l0aENhcmV0KToKICAgICAgICAoc2V0
QXRrU3RhdGVTZXRGcm9tQ29yZU9iamVjdCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVSZWZT
dGF0ZVNldCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVSZWZSZWxhdGlvblNldCk6CiAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVJbml0KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUZpbmFs
aXplKToKICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfY2xhc3NfaW5pdCk6CiAgICAgICAgKHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKToKICAgICAgICAoR2V0QXRrSW50ZXJmYWNlVHlwZUZy
b21XQUlUeXBlKToKICAgICAgICAoZ2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QpOgogICAgICAg
IChnZXRVbmlxdWVBY2Nlc3NpYmlsaXR5VHlwZU5hbWUpOgogICAgICAgIChnZXRBY2Nlc3NpYmls
aXR5VHlwZUZyb21PYmplY3QpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlTmV3KToKICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZURldGFjaCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRG
b2N1c2VkRWxlbWVudCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5
T2JqZWN0KToKICAgICAgICAob2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKToK
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmg6
IEFkZGVkCgogICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBB
dGtBY3Rpb24gaW50ZXJmYWNlLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uY3BwOiBBZGRlZC4KICAgICAgICAoY29yZSk6CiAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVBY3Rpb25JbnRlcmZhY2VJbml0KToKICAgICAgICAod2Via2l0
QWNjZXNzaWJsZUFjdGlvbkRvQWN0aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUFjdGlv
bkdldE5BY3Rpb25zKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldERlc2NyaXB0
aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldEtleWJpbmRpbmcpOgogICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0TmFtZSk6CiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmg6IEFkZGVkLgoKICAgICAg
ICBOZXcgZmlsZXMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrQ29tcG9uZW50IGlu
dGVyZmFjZS4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlQ29tcG9uZW50LmNwcDogQWRkZWQuCiAgICAgICAgKGNvcmUpOgogICAgICAgIChhdGtU
b0NvbnRlbnRzKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEludGVyZmFjZUlu
aXQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9p
bnQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R2V0RXh0ZW50cyk6CiAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHcmFiRm9jdXMpOgogICAgICAgICogYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oOiBBZGRlZC4K
CiAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0RvY3Vt
ZW50IGludGVyZmFjZS4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlRG9jdW1lbnQuY3BwOiBBZGRlZC4KICAgICAgICAoY29yZSk6CiAgICAgICAg
KGRvY3VtZW50QXR0cmlidXRlVmFsdWUpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRG9jdW1l
bnRJbnRlcmZhY2VJbml0KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0QXR0
cmlidXRlVmFsdWUpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1
dGVzKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0TG9jYWxlKToKICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5o
OiBBZGRlZC4KCiAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEF0a0VkaXRhYmxlVGV4dCBpbnRlcmZhY2UuCgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5jcHA6IEFkZGVkLgogICAgICAg
IChjb3JlKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEludGVyZmFjZUlu
aXQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRl
cyk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRTZXRUZXh0Q29udGVudHMp
OgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0SW5zZXJ0VGV4dCk6CiAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRDb3B5VGV4dCk6CiAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVFZGl0YWJsZVRleHRDdXRUZXh0KToKICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZUVkaXRhYmxlVGV4dERlbGV0ZVRleHQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRWRpdGFi
bGVUZXh0UGFzdGVUZXh0KToKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaDogQWRkZWQuCgogICAgICAgIE5ldyBmaWxlcyBm
b3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtIeXBlcmxpbmtJbXBsIGludGVyZmFjZS4K
CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlw
ZXJsaW5rSW1wbC5jcHA6IEFkZGVkLgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5r
SW1wbEludGVyZmFjZUluaXQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1w
bEdldEh5cGVybGluayk6CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5oOiBBZGRlZC4KCiAgICAgICAgTmV3IGZpbGVzIGZv
ciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0h5cGVydGV4dCBpbnRlcmZhY2UuCgogICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4
dC5jcHA6IEFkZGVkLgogICAgICAgIChjb3JlKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5
cGVydGV4dEludGVyZmFjZUluaXQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0
R2V0TGluayk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MpOgog
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4KToKICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuaDog
QWRkZWQuCgogICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBB
dGtJbWFnZSBpbnRlcmZhY2UuCgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcDogQWRkZWQuCiAgICAgICAgKGNvcmUpOgogICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VJbnRlcmZhY2VJbml0KToKICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUltYWdlR2V0SW1hZ2VQb3NpdGlvbik6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJ
bWFnZUdldEltYWdlRGVzY3JpcHRpb24pOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VH
ZXRJbWFnZVNpemUpOgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZUltYWdlLmg6IEFkZGVkLgoKICAgICAgICBOZXcgZmlsZXMgZm9yIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgQXRrU2VsZWN0aW9uIGludGVyZmFjZS4KCiAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcDogQWRk
ZWQuCiAgICAgICAgKGNvcmUpOgogICAgICAgIChsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKToKICAg
ICAgICAob3B0aW9uRnJvbUxpc3QpOgogICAgICAgIChvcHRpb25Gcm9tU2VsZWN0aW9uKToKICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUluaXQpOgogICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQWRkU2VsZWN0aW9uKToKICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVNlbGVjdGlvblJlZlNlbGVjdGlvbik6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rp
b25HZXRTZWxlY3Rpb25Db3VudCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25J
c0NoaWxkU2VsZWN0ZWQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uUmVtb3Zl
U2VsZWN0aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblNlbGVjdEFsbFNl
bGVjdGlvbik6CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlU2VsZWN0aW9uLmg6IEFkZGVkLgoKICAgICAgICBOZXcgZmlsZXMgZm9yIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgQXRrVGFibGUgaW50ZXJmYWNlLgoKICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHA6IEFkZGVkLgogICAg
ICAgIChjb3JlKToKICAgICAgICAoY2VsbCk6CiAgICAgICAgKGNlbGxJbmRleCk6CiAgICAgICAg
KGNlbGxBdEluZGV4KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlSW50ZXJmYWNlSW5p
dCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZVJlZkF0KToKICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0SW5kZXhBdCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUdldENvbHVtbkF0SW5kZXgpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dB
dEluZGV4KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnMpOgogICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROUm93cyk6CiAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUYWJsZUdldENvbHVtbkV4dGVudEF0KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRh
YmxlR2V0Um93RXh0ZW50QXQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1
bW5IZWFkZXIpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXIpOgog
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKToKICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uRGVzY3JpcHRpb24pOgogICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXRSb3dEZXNjcmlwdGlvbik6CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuaDogQWRkZWQuCgogICAgICAgIE5ldyBm
aWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFjZS4KCiAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5j
cHA6IEFkZGVkLgogICAgICAgIChjb3JlKToKICAgICAgICAodXRmOFN1YnN0cik6CiAgICAgICAg
KGNvbnZlcnRVbmlDaGFyVG9VVEY4KToKICAgICAgICAodGV4dEZvclJlbmRlcmVyKToKICAgICAg
ICAodGV4dEZvck9iamVjdCk6CiAgICAgICAgKGdldEdhaWxUZXh0VXRpbEZvckF0ayk6CiAgICAg
ICAgKGdldFBhbmdvTGF5b3V0Rm9yQXRrKToKICAgICAgICAoYmFzZWxpbmVQb3NpdGlvbkZvclJl
bmRlck9iamVjdCk6CiAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmpl
Y3QpOgogICAgICAgIChjb21wYXJlQXR0cmlidXRlKToKICAgICAgICAoYXR0cmlidXRlU2V0RGlm
ZmVyZW5jZSk6CiAgICAgICAgKGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgpOgogICAgICAgIChn
ZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KToKICAgICAgICAoZ2V0UnVuQXR0cmlidXRl
c0Zyb21BY2Nlc2liaWxpdHlPYmplY3QpOgogICAgICAgICh0ZXh0RXh0ZW50cyk6CiAgICAgICAg
KGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGV4dEludGVyZmFjZUluaXQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQp
OgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRlck9mZnNldCk6CiAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zmc2V0KToKICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0KToKICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0Q2FyZXRPZmZzZXQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJ1bkF0
dHJpYnV0ZXMpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldERlZmF1bHRBdHRyaWJ1
dGVzKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJFeHRlbnRzKToK
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRSYW5nZUV4dGVudHMpOgogICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckNvdW50KToKICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRPZmZzZXRBdFBvaW50KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRl
eHRHZXROU2VsZWN0aW9ucyk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0
aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRBZGRTZWxlY3Rpb24pOgogICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFJlbW92ZVNlbGVjdGlvbik6CiAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRT
ZXRDYXJldE9mZnNldCk6CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5oOiBBZGRlZC4KCiAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIEF0a1ZhbHVlIGludGVyZmFjZS4KCiAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuY3BwOiBBZGRlZC4KICAg
ICAgICAoY29yZSk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVWYWx1ZUludGVyZmFjZUluaXQp
OgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJyZW50VmFsdWUpOgogICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNYXhpbXVtVmFsdWUpOgogICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWUpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VmFsdWVTZXRDdXJyZW50VmFsdWUpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRN
aW5pbXVtSW5jcmVtZW50KToKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VWYWx1ZS5oOiBBZGRlZC4KCiAgICAgICAgTmV3IGZpbGUgdG8ga2VlcCBp
biBvbmUgcGxhY2Ugc29tZSB1dGlsaXR5IGZ1bmN0aW9ucyB0byBiZSB1c2VkCiAgICAgICAgcHJp
dmF0ZWx5IGJ5IHRoZSBBVEsgd3JhcHBlciwgYXMgd2VsbCBhcyBieSB0aGUgaW1wbGVtZW50YXRp
b24gb2YKICAgICAgICBBdGtIeXBlcmxpbmsgYW5kIHRoZSBBVEsgaW50ZXJmYWNlcy4KCiAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHA6IEFkZGVkLgog
ICAgICAgIChhZGRBdHRyaWJ1dGVUb1NldCk6IEZyb20gdGhlIG9sZCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckF0ay5jcHAuCiAgICAgICAgKGNvbnRlbnRzVG9BdGspOiBEaXR0by4KICAgICAg
ICAocmV0dXJuU3RyaW5nKTogRGl0dG8uCiAgICAgICAgKHNlbGVjdGlvbkJlbG9uZ3NUb09iamVj
dCk6IERpdHRvLgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0
aWwuaDogQWRkZWQuCgogICAgICAgIFVwZGF0ZWQgbmFtZXMgb2YgZnVuY3Rpb25zIGZyb20gdGhl
IHdyYXBwZXIgdG8gdGhlIG5ldyBuYW1lcywKICAgICAgICBmaXhlZCBjb2Rpbmcgc3R5bGUgYW5k
IGEgdHlwbyBpbiB0aGUgaGVhZGVyIGZpbGUsIGFuZCB1cGRhdGVkCiAgICAgICAgY29weXJpZ2h0
IGhlYWRlcnMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBBdGtIeXBlcmxpbmsuCgogICAgICAg
ICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHA6CiAgICAg
ICAgKGNvcmUpOiBDYWxsIHRvIHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0
LgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5o
OiBVcGRhdGVkIG5hbWVzLgoKICAgICAgICBVcGRhdGUgdGhlIGluY2x1ZGUgZm9yIHRoZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0IHdyYXBwZXIgaGVhZGVyLgoKICAgICAgICAqIGVkaXRpbmcvZ3RrL0Zy
YW1lU2VsZWN0aW9uR3RrLmNwcDoKCiAgICAgICAgVXBkYXRlIGNhbGxzIHRvIG9sZCBmdW5jdGlv
bnMgaW4gQVRLLXNwZWNpZmljJ3MgQVhPYmplY3RDYWNoZS4KCiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6ZGV0YWNoV3JhcHBlcik6IFJlcGxhY2Ugb2xkIGNhbGwgdG8KICAgICAgICB3ZWJraXRf
YWNjZXNzaWJsZV9kZXRhY2ggd2l0aCB3ZWJraXRBY2Nlc3NpYmxlRGV0YWNoLgogICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKTogUmVwbGFjZSBvbGQgY2FsbCB0
bwogICAgICAgIHdlYmtpdF9hY2Nlc3NpYmxlX25ldyB3aXRoIHdlYmtpdEFjY2Vzc2libGVOZXcu
CgogICAgICAgIFJlbW92ZWQgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuW2h8Y3BwXSBm
aWxlcywgdG8gYmUKICAgICAgICByZXBsYWNlZCBmcm9tIG5vdyBvbiBieSBXZWJLaXRBY2Nlc3Np
YmxlV3JhcHBlckF0ay5baHxjcHBdLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDogUmVtb3ZlZC4KICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmg6IFJlbW92ZWQuCgogICAg
ICAgIFVwZGF0ZSBuYW1lcyBvZiB0aGUgZmlsZXMgZm9yIHRoZSBBVEsgd3JhcHBlciwgYW5kIGFk
ZCB0aGUgbmV3CiAgICAgICAgZmlsZXMgYWRkZWQgdG8gd2ViY29yZWd0a19zb3VyY2VzLgoKICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFVwZGF0ZWQuCgoyMDEyLTAxLTIxICBNYXJpbyBT
YW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgW0dUS10gUmVmYWN0
b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCiAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzgzCgogICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBVcGRhdGUgdGhlIGluY2x1ZGUgZm9y
IHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdyYXBwZXIgaGVhZGVyIGFuZAogICAgICAgIHVwZGF0
ZSBjYWxscyB0byB0aGUgb2xkIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQu
CgogICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoK
ICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGb2N1c2VkQWNjZXNzaWJsZUVs
ZW1lbnQpOiBDYWxsIHRvCiAgICAgICAgd2Via2l0QWNjZXNzaWJsZUdldEZvY3VzZWRFbGVtZW50
LCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbGQgbmFtZS4KICAgICAgICAobW9kaWZ5QWNjZXNzaWJp
bGl0eVZhbHVlKTogRGl0dG8uCiAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6YWNj
ZXNzaWJpbGl0eUhlbHBUZXh0KTogRGl0dG8uCiAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZnJh
bWUuY3BwOgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDI2NSArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAg
ICAgICAgICAgICAgfCAgIDI4ICstCiAuLi4vV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9i
amVjdENhY2hlQXRrLmNwcCB8ICAgIDYgKy0KIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJBdGsuY3BwICAgICAgICAgIHwgMjc4MCAtLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcCAgICAgICAgICAgICAgfCAgIDIwICstCiAu
Li4vYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oICB8ICAgMTAg
Ky0KIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAgICAgICAgIHwg
ICA4OCArCiAuLi4vZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCAgICAgICAg
ICB8ICAgNTIgKwogLi4uL2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNw
cCAgICAgfCAgIDk1ICsKIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVu
dC5oICAgICAgIHwgICA0OCArCiAuLi4vZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1
bWVudC5jcHAgICAgICB8ICAxMDUgKwogLi4uL2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
RG9jdW1lbnQuaCAgICAgICAgfCAgIDQ4ICsKIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUVkaXRhYmxlVGV4dC5jcHAgIHwgIDEyMyArCiAuLi4vZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VFZGl0YWJsZVRleHQuaCAgICB8ICAgNTYgKwogLi4uL2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5jcHAgfCAgIDQzICsKIC4uLi9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuaCAgIHwgICAzMyArCiAuLi4vZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuY3BwICAgICB8ICAxMDYgKwogLi4uL2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmggICAgICAgfCAgIDM3ICsKIC4uLi9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcCAgICAgICAgIHwgICA3NyArCiAu
Li4vZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5oICAgICAgICAgICB8ICAgNDgg
KwogLi4uL2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcCAgICAgfCAg
MjUxICsrCiAuLi4vZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaCAgICAg
ICB8ICAgNTYgKwogLi4uL2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwICAg
ICAgICAgfCAgMjQ4ICsrCiAuLi4vZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5o
ICAgICAgICAgICB8ICAgNjggKwogLi4uL2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4
dC5jcHAgICAgICAgICAgfCAgODQ5ICsrKysrKwogLi4uL2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5oICAgICAgICAgICAgfCAgIDc4ICsKIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVZhbHVlLmNwcCAgICAgICAgIHwgICA5MCArCiAuLi4vZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VWYWx1ZS5oICAgICAgICAgICB8ICAgNDEgKwogLi4uL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCAgICAgfCAgMTExICsKIC4uLi9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oICAgICAgIHwgICA1MCArCiAuLi4vZ3Rr
L1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCAgICAgICAgICAgICB8IDEwNjAgKysrKysr
KysKIC4uLmN0V3JhcHBlckF0ay5oID0+IFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmh9IHwg
ICAzNCArLQogU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3Bw
ICAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTcgKwogLi4uL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5jcHAgICAgfCAgICA4ICstCiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZnJhbWUuY3BwICAgICAgICB8ICAgIDIgKy0KIDM2IGZpbGVzIGNoYW5nZWQsIDQyMDggaW5zZXJ0
aW9ucygrKSwgMjgyNSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rp
b24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUNvbXBvbmVudC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VEb2N1bWVudC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4
dC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlSHlwZXJsaW5rSW1wbC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1w
bC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlSHlwZXJ0ZXh0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZUltYWdlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFs
dWUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlVXRpbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCiByZW5hbWUgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsve0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmggPT4gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaH0gKDY5JSkKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYWJhMGQ3OS4uODk5NmRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2OCBAQAorMjAxMi0w
MS0yMSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dUS10gUmVmYWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBt
b2R1bGFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Njc4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNw
bGl0IHRoZSBjb250ZW50IG9mIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBhY3Jv
c3MKKyAgICAgICAgZGlmZmVyZW50IGZpbGVzLCBieSBsZWF2aW5nIHRoZSBBdGtPYmplY3QncyBj
b2RlIGluIHRoZSBtYWluIG9uZXMKKyAgICAgICAgZm9yIHRoZSB3cmFwcGVyIChub3cgY2FsbGVk
IFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLltofGNwcF0pCisgICAgICAgIGFuZCB0aGUgaW1w
bGVtZW50YXRpb24gb2YgZWFjaCBBVEsgaW50ZXJmYWNlIGluIHNlcGFyYXRlIGZpbGVzLgorCisg
ICAgICAgIE1haW4gZmlsZSBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBVEsgd3JhcHBl
ci4KKworICAgICAgICBJbiB0aGUgc2FtZSB3YXkgdGhhdCBoYXBwZW5lZCB3aXRoIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgQVRLCisgICAgICAgIGludGVyZmFjZXMsIGFsbCB0aGUgZnVuY3Rp
b25zIGluIHRoaXMgbmV3IGZpbGUgd2VyZSB0YWtlbiBmcm9tIHRoZQorICAgICAgICBvbGQgZmls
ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAsIGp1c3QgY2hhbmdpbmcgdGhlCisg
ICAgICAgIG5hbWVzIG9mIHRoZW0gaW4gc29tZSBvY2Fzc2lvbnMgdG8gbWF0Y2ggV2ViS2l0J3Mg
Y29kaW5nIHN0eWxlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNz
aWJsZVdyYXBwZXJBdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKGZhbGxiYWNrT2JqZWN0KToKKyAg
ICAgICAgKGNvcmUpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldE5hbWUpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUdldERlc2NyaXB0aW9uKToKKyAgICAgICAgKHNldEF0a1JlbGF0
aW9uU2V0RnJvbUNvcmVPYmplY3QpOgorICAgICAgICAoaXNSb290T2JqZWN0KToKKyAgICAgICAg
KGF0a1BhcmVudE9mUm9vdE9iamVjdCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0UGFy
ZW50KToKKyAgICAgICAgKGdldE5DaGlsZHJlbkZvclRhYmxlKToKKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVHZXROQ2hpbGRyZW4pOgorICAgICAgICAoZ2V0Q2hpbGRGb3JUYWJsZSk6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlUmVmQ2hpbGQpOgorICAgICAgICAoZ2V0SW5kZXhJblBhcmVu
dEZvckNlbGxJblJvdyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0SW5kZXhJblBhcmVu
dCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0QXR0cmlidXRlcyk6CisgICAgICAgIChh
dGtSb2xlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRSb2xlKToKKyAgICAgICAgKGlz
VGV4dFdpdGhDYXJldCk6CisgICAgICAgIChzZXRBdGtTdGF0ZVNldEZyb21Db3JlT2JqZWN0KToK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVSZWZTdGF0ZVNldCk6CisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlUmVmUmVsYXRpb25TZXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUluaXQp
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9h
Y2Nlc3NpYmxlX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X3R5
cGUpOgorICAgICAgICAoR2V0QXRrSW50ZXJmYWNlVHlwZUZyb21XQUlUeXBlKToKKyAgICAgICAg
KGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KToKKyAgICAgICAgKGdldFVuaXF1ZUFjY2Vzc2li
aWxpdHlUeXBlTmFtZSk6CisgICAgICAgIChnZXRBY2Nlc3NpYmlsaXR5VHlwZUZyb21PYmplY3Qp
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZU5ldyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlRGV0YWNoKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRGb2N1c2VkRWxlbWVudCk6
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAg
ICAgIChvYmplY3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmlnbm9yZWQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmg6IEFkZGVkCisKKyAg
ICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0FjdGlvbiBp
bnRlcmZhY2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlQWN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVBY3Rpb25JbnRlcmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVBY3Rpb25Eb0FjdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0
TkFjdGlvbnMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldERlc2NyaXB0aW9u
KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXRLZXliaW5kaW5nKToKKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXROYW1lKToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmg6IEFkZGVkLgorCisgICAg
ICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtDb21wb25lbnQg
aW50ZXJmYWNlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZUNvbXBvbmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoY29yZSk6CisgICAgICAg
IChhdGtUb0NvbnRlbnRzKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRl
cmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRSZWZBY2Nlc3Np
YmxlQXRQb2ludCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R2V0RXh0ZW50
cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R3JhYkZvY3VzKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50
Lmg6IEFkZGVkLgorCisgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9m
IHRoZSBBdGtEb2N1bWVudCBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KGNvcmUpOgorICAgICAgICAoZG9jdW1lbnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlRG9jdW1lbnRJbnRlcmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVEb2N1bWVudEdldEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVEb2N1bWVudEdldEF0dHJpYnV0ZXMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZURvY3Vt
ZW50R2V0TG9jYWxlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlRG9jdW1lbnQuaDogQWRkZWQuCisKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0
aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0VkaXRhYmxlVGV4dCBpbnRlcmZhY2UuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFi
bGVUZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVFZGl0YWJsZVRleHRJbnRlcmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRTZXRSdW5BdHRyaWJ1dGVzKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRTZXRUZXh0Q29udGVudHMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZUVkaXRhYmxlVGV4dEluc2VydFRleHQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUVkaXRh
YmxlVGV4dENvcHlUZXh0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRD
dXRUZXh0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHREZWxldGVUZXh0
KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRQYXN0ZVRleHQpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJs
ZVRleHQuaDogQWRkZWQuCisKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEF0a0h5cGVybGlua0ltcGwgaW50ZXJmYWNlLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsSW50ZXJmYWNlSW5p
dCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluayk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5
cGVybGlua0ltcGwuaDogQWRkZWQuCisKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0h5cGVydGV4dCBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmNwcDogQWRk
ZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRJ
bnRlcmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5r
KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRleCk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oOiBBZGRl
ZC4KKworICAgICAgICBOZXcgZmlsZXMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRr
SW1hZ2UgaW50ZXJmYWNlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVJbWFnZUludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VQb3NpdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlSW1hZ2VHZXRJbWFnZURlc2NyaXB0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJ
bWFnZUdldEltYWdlU2l6ZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUltYWdlLmg6IEFkZGVkLgorCisgICAgICAgIE5ldyBmaWxlcyBmb3Ig
dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoY29yZSk6CisgICAgICAgIChsaXN0T2JqZWN0Rm9yU2Vs
ZWN0aW9uKToKKyAgICAgICAgKG9wdGlvbkZyb21MaXN0KToKKyAgICAgICAgKG9wdGlvbkZyb21T
ZWxlY3Rpb24pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUlu
aXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkFkZFNlbGVjdGlvbik6Cisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQ2xlYXJTZWxlY3Rpb24pOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlZlNlbGVjdGlvbik6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlU2VsZWN0aW9uR2V0U2VsZWN0aW9uQ291bnQpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVNlbGVjdGlvbklzQ2hpbGRTZWxlY3RlZCk6CisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlU2VsZWN0aW9uUmVtb3ZlU2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25TZWxlY3RBbGxTZWxlY3Rpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaDogQWRkZWQuCisKKyAgICAg
ICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RhYmxlIGludGVy
ZmFjZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoY29yZSk6CisgICAgICAgIChjZWxsKToK
KyAgICAgICAgKGNlbGxJbmRleCk6CisgICAgICAgIChjZWxsQXRJbmRleCk6CisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlVGFibGVJbnRlcmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUYWJsZVJlZkF0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldEluZGV4
QXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uQXRJbmRleCk6Cisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dBdEluZGV4KToKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2x1bW5zKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUdldE5Sb3dzKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVt
bkV4dGVudEF0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0V4dGVudEF0
KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRlcik6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXIpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0Q2FwdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVHZXRDb2x1bW5EZXNjcmlwdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVH
ZXRSb3dEZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRhYmxlLmg6IEFkZGVkLgorCisgICAgICAgIE5ldyBmaWxlcyBmb3Ig
dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFjZS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDogQWRk
ZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKHV0ZjhTdWJzdHIpOgorICAgICAgICAoY29u
dmVydFVuaUNoYXJUb1VURjgpOgorICAgICAgICAodGV4dEZvclJlbmRlcmVyKToKKyAgICAgICAg
KHRleHRGb3JPYmplY3QpOgorICAgICAgICAoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKToKKyAgICAg
ICAgKGdldFBhbmdvTGF5b3V0Rm9yQXRrKToKKyAgICAgICAgKGJhc2VsaW5lUG9zaXRpb25Gb3JS
ZW5kZXJPYmplY3QpOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9i
amVjdCk6CisgICAgICAgIChjb21wYXJlQXR0cmlidXRlKToKKyAgICAgICAgKGF0dHJpYnV0ZVNl
dERpZmZlcmVuY2UpOgorICAgICAgICAoYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aCk6CisgICAg
ICAgIChnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KToKKyAgICAgICAgKGdldFJ1bkF0
dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKHRleHRFeHRlbnRzKToK
KyAgICAgICAgKGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0VGV4dCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRlck9m
ZnNldCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBdE9mZnNldCk6Cisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldCk6CisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0UnVuQXR0cmlidXRlcyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldERlZmF1bHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2hhcmFjdGVyRXh0ZW50cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdl
RXh0ZW50cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckNvdW50
KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0T2Zmc2V0QXRQb2ludCk6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE5TZWxlY3Rpb25zKToKKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVU
ZXh0QWRkU2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKToKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0Q2FyZXRPZmZzZXQpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0Lmg6IEFkZGVkLgor
CisgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtWYWx1
ZSBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdCk6CisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVmFsdWVHZXRDdXJyZW50VmFsdWUpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVZh
bHVlR2V0TWF4aW11bVZhbHVlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1p
bmltdW1WYWx1ZSk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVTZXRDdXJyZW50VmFs
dWUpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bUluY3JlbWVudCk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZh
bHVlLmg6IEFkZGVkLgorCisgICAgICAgIE5ldyBmaWxlIHRvIGtlZXAgaW4gb25lIHBsYWNlIHNv
bWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gYmUgdXNlZAorICAgICAgICBwcml2YXRlbHkgYnkgdGhl
IEFUSyB3cmFwcGVyLCBhcyB3ZWxsIGFzIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAg
ICBBdGtIeXBlcmxpbmsgYW5kIHRoZSBBVEsgaW50ZXJmYWNlcy4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcDogQWRkZWQuCisgICAgICAgIChh
ZGRBdHRyaWJ1dGVUb1NldCk6IEZyb20gdGhlIG9sZCBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAuCisgICAgICAgIChjb250ZW50c1RvQXRrKTogRGl0dG8uCisgICAgICAgIChyZXR1
cm5TdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdCk6IERp
dHRvLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmg6
IEFkZGVkLgorCisgICAgICAgIFVwZGF0ZWQgbmFtZXMgb2YgZnVuY3Rpb25zIGZyb20gdGhlIHdy
YXBwZXIgdG8gdGhlIG5ldyBuYW1lcywKKyAgICAgICAgZml4ZWQgY29kaW5nIHN0eWxlIGFuZCBh
IHR5cG8gaW4gdGhlIGhlYWRlciBmaWxlLCBhbmQgdXBkYXRlZAorICAgICAgICBjb3B5cmlnaHQg
aGVhZGVycyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIEF0a0h5cGVybGluay4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwOgorICAg
ICAgICAoY29yZSk6IENhbGwgdG8gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmpl
Y3QuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGlu
ay5oOiBVcGRhdGVkIG5hbWVzLgorCisgICAgICAgIFVwZGF0ZSB0aGUgaW5jbHVkZSBmb3IgdGhl
IEFjY2Vzc2liaWxpdHlPYmplY3Qgd3JhcHBlciBoZWFkZXIuCisKKyAgICAgICAgKiBlZGl0aW5n
L2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHA6CisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIG9s
ZCBmdW5jdGlvbnMgaW4gQVRLLXNwZWNpZmljJ3MgQVhPYmplY3RDYWNoZS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcik6IFJlcGxhY2Ugb2xkIGNhbGwgdG8KKyAg
ICAgICAgd2Via2l0X2FjY2Vzc2libGVfZGV0YWNoIHdpdGggd2Via2l0QWNjZXNzaWJsZURldGFj
aC4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIpOiBSZXBs
YWNlIG9sZCBjYWxsIHRvCisgICAgICAgIHdlYmtpdF9hY2Nlc3NpYmxlX25ldyB3aXRoIHdlYmtp
dEFjY2Vzc2libGVOZXcuCisKKyAgICAgICAgUmVtb3ZlZCBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckF0ay5baHxjcHBdIGZpbGVzLCB0byBiZQorICAgICAgICByZXBsYWNlZCBmcm9tIG5vdyBv
biBieSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5baHxjcHBdLgorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmg6IFJlbW92ZWQuCisKKyAgICAgICAgVXBkYXRlIG5hbWVzIG9mIHRoZSBmaWxlcyBmb3Ig
dGhlIEFUSyB3cmFwcGVyLCBhbmQgYWRkIHRoZSBuZXcKKyAgICAgICAgZmlsZXMgYWRkZWQgdG8g
d2ViY29yZWd0a19zb3VyY2VzLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogVXBk
YXRlZC4KKwogMjAxMi0wMS0yMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5Acmlt
LmNvbT4KIAogICAgICAgICA8ZmVJbWFnZT4gaWdub3JlcyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJu
b25lIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMjEzMDFjNy4uMzMyYWVmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NDIxLDExICs0NDIxLDM1IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAjIFdlYkNvcmUgZmlsZXMgdGhhdCB1c2UgR1RLL0dESyBvciBh
bnkgb3RoZXIgZGVwZW5kZW5jeSB0aGF0IHJlcXVpcmVzIEdUSysuCiB3ZWJjb3JlZ3RrX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RBdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVI
eXBlcmxpbmsuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUh5cGVybGluay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VD
b21wb25lbnQuaCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1l
bnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmggXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlw
ZXJsaW5rSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuaCBcCisJ
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZUh5cGVydGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9u
LmggXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VTZWxlY3Rpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuaCBcCisJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRl
eHQuaCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCisJU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyR3RrLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRl
eCAwZGM0ZTUyLi5jMjQyMjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtMjEsMjQgKzIxLDI0IEBACiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgogCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5o
IgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgog
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0
ay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGV0YWNo
V3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCiB7Ci0gICAgd2Via2l0X2FjY2Vzc2li
bGVfZGV0YWNoKFdFQktJVF9BQ0NFU1NJQkxFKG9iai0+d3JhcHBlcigpKSk7CisgICAgd2Via2l0
QWNjZXNzaWJsZURldGFjaChXRUJLSVRfQUNDRVNTSUJMRShvYmotPndyYXBwZXIoKSkpOwogfQog
CiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCog
b2JqKQogewotICAgIEF0a09iamVjdCogYXRrT2JqID0gQVRLX09CSkVDVCh3ZWJraXRfYWNjZXNz
aWJsZV9uZXcob2JqKSk7CisgICAgQXRrT2JqZWN0KiBhdGtPYmogPSBBVEtfT0JKRUNUKHdlYmtp
dEFjY2Vzc2libGVOZXcob2JqKSk7CiAgICAgb2JqLT5zZXRXcmFwcGVyKGF0a09iaik7CiAgICAg
Z19vYmplY3RfdW5yZWYoYXRrT2JqKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFkYWNhZi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckF0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzgwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEg
Uy5MLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KLSAqCi0gKiBQb3J0aW9ucyBm
cm9tIE1vemlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6Ci0gKgotICogVGhlIE9yaWdp
bmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9w
ZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAq
IFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQg
KEMpIDIwMDIKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmgiCi0KLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0KLSNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3QuaCIKLSNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5TGlzdEJveC5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmgi
Ci0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbC5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIgotI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgotI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVz
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKLSNp
bmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkdPd25QdHIuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIK
LSNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgot
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5o
IgotI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgot
Ci0jaW5jbHVkZSA8YXRrL2F0ay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGli
L2dwcmludGYuaD4KLSNpbmNsdWRlIDxsaWJnYWlsLXV0aWwvZ2FpbC11dGlsLmg+Ci0jaW5jbHVk
ZSA8cGFuZ28vcGFuZ28uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1zdGF0aWMgR1F1YXJrIGh5cGVybGlua09iamVjdFF1YXJrID0gMDsKLQotc3RhdGljIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGZhbGxiYWNrT2JqZWN0KCkKLXsKLSAgICAvLyBGSVhNRTogQW4gQVhP
YmplY3RDYWNoZSB3aXRoIGEgRG9jdW1lbnQgaXMgbWVhbmluZ2xlc3MuCi0gICAgc3RhdGljIEFY
T2JqZWN0Q2FjaGUqIGZhbGxiYWNrQ2FjaGUgPSBuZXcgQVhPYmplY3RDYWNoZSgwKTsKLSAgICBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gMDsKLSAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICAvLyBGSVhNRTogdXNpbmcgZmFsbGJhY2tDYWNoZS0+Z2V0T3JDcmVhdGUoTGlz
dEJveE9wdGlvblJvbGUpIGlzIGEgaGFjawotICAgICAgICBvYmplY3QgPSBmYWxsYmFja0NhY2hl
LT5nZXRPckNyZWF0ZShMaXN0Qm94T3B0aW9uUm9sZSk7Ci0gICAgICAgIG9iamVjdC0+cmVmKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotLy8gVXNlZCB0byBwcm92aWRlIGNv
bnN0IGNoYXIqIHJldHVybnMuCi1zdGF0aWMgY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyKQotewotICAgIHN0YXRpYyBDU3RyaW5nIHJldHVybmVkU3RyaW5nOwotICAg
IHJldHVybmVkU3RyaW5nID0gc3RyLnV0ZjgoKTsKLSAgICByZXR1cm4gcmV0dXJuZWRTdHJpbmcu
ZGF0YSgpOwotfQotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShXZWJLaXRBY2Nl
c3NpYmxlKiBhY2Nlc3NpYmxlKQotewotICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gYWNjZXNzaWJsZS0+bV9vYmplY3Q7Ci19Ci0KLXN0YXRpYyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a09iamVjdCogb2JqZWN0KQotewotICAgIGlmICgh
V0VCS0lUX0lTX0FDQ0VTU0lCTEUob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gY29yZShXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpKTsKLX0KLQotc3RhdGljIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmUoQXRrQWN0aW9uKiBhY3Rpb24pCi17Ci0gICAgcmV0dXJuIGNv
cmUoQVRLX09CSkVDVChhY3Rpb24pKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmUoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgcmV0dXJuIGNvcmUoQVRLX09C
SkVDVChzZWxlY3Rpb24pKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUo
QXRrVGV4dCogdGV4dCkKLXsKLSAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHRleHQpKTsKLX0K
LQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRWRpdGFibGVUZXh0KiB0ZXh0
KQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwotfQotCi1zdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtDb21wb25lbnQqIGNvbXBvbmVudCkKLXsKLSAgICBy
ZXR1cm4gY29yZShBVEtfT0JKRUNUKGNvbXBvbmVudCkpOwotfQotCi1zdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZShBdGtJbWFnZSogaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNvcmUoQVRL
X09CSkVDVChpbWFnZSkpOwotfQotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShB
dGtUYWJsZSogdGFibGUpCi17Ci0gICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVCh0YWJsZSkpOwot
fQotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtIeXBlcnRleHQqIGh5cGVy
dGV4dCkKLXsKLSAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKGh5cGVydGV4dCkpOwotfQotCi1z
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtEb2N1bWVudCogZG9jdW1lbnQpCi17
Ci0gICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChkb2N1bWVudCkpOwotfQotCi1zdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtWYWx1ZSogdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNv
cmUoQVRLX09CSkVDVCh2YWx1ZSkpOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBl
bmRPZmZzZXQpOwotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9u
YW1lKEF0a09iamVjdCogb2JqZWN0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QgPSBjb3JlKG9iamVjdCk7Ci0gICAgaWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyhjb3JlT2JqZWN0
LT5zdHJpbmdWYWx1ZSgpKTsKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc0NvbnRyb2woKSkgewot
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYWJlbCA9IGNvcmVPYmplY3QtPmNvcnJlc3Bv
bmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KCk7Ci0gICAgICAgIGlmIChsYWJlbCkgewotICAg
ICAgICAgICAgQXRrT2JqZWN0KiBhdGtPYmplY3QgPSBsYWJlbC0+d3JhcHBlcigpOwotICAgICAg
ICAgICAgaWYgKEFUS19JU19URVhUKGF0a09iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQoYXRrT2JqZWN0KSwgMCwg
LTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVHJ5IHRleHQgdW5kZXIgdGhlIG5vZGUuCi0g
ICAgICAgIFN0cmluZyB0ZXh0VW5kZXIgPSBjb3JlT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCk7
Ci0gICAgICAgIGlmICh0ZXh0VW5kZXIubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gcmV0
dXJuU3RyaW5nKHRleHRVbmRlcik7Ci0gICAgfQotCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzSW1h
Z2UoKSB8fCBjb3JlT2JqZWN0LT5pc0lucHV0SW1hZ2UoKSkgewotICAgICAgICBOb2RlKiBub2Rl
ID0gY29yZU9iamVjdC0+bm9kZSgpOwotICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0hUTUxF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRlIHJhdGhlciB0aGFu
IGFsdFRleHQgU3RyaW5nIHNvIGFzIG5vdCB0byBmYWxsIGJhY2sgb24gdGl0bGUuCi0gICAgICAg
ICAgICBTdHJpbmcgYWx0ID0gdG9IVE1MRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6YWx0QXR0cik7Ci0gICAgICAgICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyhhbHQpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gRmFsbGJhY2sgZm9yIHRoZSB3ZWJBcmVhIG9iamVjdDoganVzdCByZXR1cm4gdGhlIGRv
Y3VtZW50J3MgdGl0bGUuCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzV2ViQXJlYSgpKSB7Ci0gICAg
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgICAg
IGlmIChkb2N1bWVudCkKLSAgICAgICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcoZG9jdW1lbnQt
PnRpdGxlKCkpOwotICAgIH0KLQotICAgIC8vIE5vdGhpbmcgd29ya2VkIHNvIGZhciwgdHJ5IHdp
dGggdGhlIEFjY2Vzc2liaWxpdHlPYmplY3QncwotICAgIC8vIHRpdGxlKCkgYmVmb3JlIGdvaW5n
IGFoZWFkIHdpdGggc3RyaW5nVmFsdWUoKS4KLSAgICBTdHJpbmcgYXhUaXRsZSA9IGNvcmVPYmpl
Y3QtPnRpdGxlKCk7Ci0gICAgaWYgKCFheFRpdGxlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHJldHVyblN0cmluZyhheFRpdGxlKTsKLQotICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZU9i
amVjdC0+c3RyaW5nVmFsdWUoKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X2Rlc2NyaXB0aW9uKEF0a09iamVjdCogb2JqZWN0KQotewotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7Ci0gICAgTm9kZSogbm9k
ZSA9IDA7Ci0gICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KQotICAgICAgICBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8IGNvcmVPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkg
IT0gVW5rbm93blJvbGUpCi0gICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZU9iamVjdC0+
YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkpOwotCi0gICAgLy8gYXRrX3RhYmxlX2dldF9zdW1t
YXJ5IHJldHVybnMgYW4gQXRrT2JqZWN0LiBXZSBoYXZlIG5vIHN1bW1hcnkgb2JqZWN0LCBzbyBl
eHBvc2Ugc3VtbWFyeSBoZXJlLgotICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBU
YWJsZVJvbGUpIHsKLSAgICAgICAgU3RyaW5nIHN1bW1hcnkgPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVFbGVtZW50Kj4obm9kZSktPnN1bW1hcnkoKTsKLSAgICAgICAgaWYgKCFzdW1tYXJ5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcoc3VtbWFyeSk7Ci0gICAgfQot
Ci0gICAgLy8gVGhlIHRpdGxlIGF0dHJpYnV0ZSBzaG91bGQgYmUgcmVsaWFibHkgYXZhaWxhYmxl
IGFzIHRoZSBvYmplY3QncyBkZXNjcmlwdG9uLgotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGZh
bGwgYmFjayBvbiBvdGhlciBhdHRyaWJ1dGVzIGluIGl0cyBhYnNlbmNlLiBTZWUgYnVnIDI1NTI0
LgotICAgIFN0cmluZyB0aXRsZSA9IHRvSFRNTEVsZW1lbnQobm9kZSktPnRpdGxlKCk7Ci0gICAg
aWYgKCF0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcodGl0bGUp
OwotCi0gICAgcmV0dXJuIHJldHVyblN0cmluZyhjb3JlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5RGVz
Y3JpcHRpb24oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEF0a1JlbGF0aW9uU2V0RnJvbUNvcmVP
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrUmVsYXRpb25TZXQqIHJl
bGF0aW9uU2V0KQotewotICAgIGlmIChjb3JlT2JqZWN0LT5pc0NvbnRyb2woKSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYWJlbCA9IGNvcmVPYmplY3QtPmNvcnJlc3BvbmRpbmdM
YWJlbEZvckNvbnRyb2xFbGVtZW50KCk7Ci0gICAgICAgIGlmIChsYWJlbCkKLSAgICAgICAgICAg
IGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19S
RUxBVElPTl9MQUJFTExFRF9CWSwgbGFiZWwtPndyYXBwZXIoKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29udHJvbCA9IGNvcmVPYmplY3QtPmNvcnJlc3Bv
bmRpbmdDb250cm9sRm9yTGFiZWxFbGVtZW50KCk7Ci0gICAgICAgIGlmIChjb250cm9sKQotICAg
ICAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9hZGRfcmVsYXRpb25fYnlfdHlwZShyZWxhdGlvblNl
dCwgQVRLX1JFTEFUSU9OX0xBQkVMX0ZPUiwgY29udHJvbC0+d3JhcHBlcigpKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBncG9pbnRlciB3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MgPSAwOwot
Ci1zdGF0aWMgYm9vbCBpc1Jvb3RPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCkKLXsKLSAgICAvLyBUaGUgcm9vdCBhY2Nlc3NpYmxlIG9iamVjdCBpbiBXZWJDb3JlIGlzIGFs
d2F5cyBhbiBvYmplY3Qgd2l0aAotICAgIC8vIHRoZSBTY3JvbGxlZEFyZWEgcm9sZSB3aXRoIG9u
ZSBjaGlsZCB3aXRoIHRoZSBXZWJBcmVhIHJvbGUuCi0gICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFj
b3JlT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCA9IGNvcmVPYmplY3QtPmZpcnN0Q2hpbGQo
KTsKLSAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgIWZpcnN0Q2hpbGQtPmlzV2ViQXJlYSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEF0a09i
amVjdCogYXRrUGFyZW50T2ZSb290T2JqZWN0KEF0a09iamVjdCogb2JqZWN0KQotewotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7Ci0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZVBhcmVudCA9IGNvcmVPYmplY3QtPnBhcmVudE9iamVjdFVuaWdu
b3JlZCgpOwotCi0gICAgLy8gVGhlIHRvcCBsZXZlbCBvYmplY3QgY2xhaW1zIHRvIG5vdCBoYXZl
IGEgcGFyZW50LiBUaGlzIG1ha2VzIGl0Ci0gICAgLy8gaW1wb3NzaWJsZSBmb3IgYXNzaXN0aXZl
IHRlY2hub2xvZ2llcyB0byBhc2NlbmQgdGhlIGFjY2Vzc2libGUKLSAgICAvLyBoaWVyYXJjaHkg
YWxsIHRoZSB3YXkgdG8gdGhlIGFwcGxpY2F0aW9uLiAoQnVnIDMwNDg5KQotICAgIGlmICghY29y
ZVBhcmVudCAmJiBpc1Jvb3RPYmplY3QoY29yZU9iamVjdCkpIHsKLSAgICAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFkb2N1bWVu
dCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cgPSBkb2N1bWVudC0+dmlldygpLT5ob3N0V2luZG93KCk7Ci0gICAgICAgIGlmIChob3N0V2lu
ZG93KSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgc2Nyb2xsVmlldyA9IGhvc3RX
aW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFZpZXcp
IHsKLSAgICAgICAgICAgICAgICBHdGtXaWRnZXQqIHNjcm9sbFZpZXdQYXJlbnQgPSBndGtfd2lk
Z2V0X2dldF9wYXJlbnQoc2Nyb2xsVmlldyk7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFZp
ZXdQYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hY2Nl
c3NpYmxlKHNjcm9sbFZpZXdQYXJlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCFjb3JlUGFyZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBjb3JlUGFyZW50LT53cmFwcGVyKCk7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9h
Y2Nlc3NpYmxlX2dldF9wYXJlbnQoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgLy8gQ2hlY2sg
Zmlyc3QgaWYgdGhlIHBhcmVudCBoYXMgYmVlbiBhbHJlYWR5IHNldC4KLSAgICBBdGtPYmplY3Qq
IGFjY2Vzc2libGVQYXJlbnQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3Bh
cmVudF9jbGFzcyktPmdldF9wYXJlbnQob2JqZWN0KTsKLSAgICBpZiAoYWNjZXNzaWJsZVBhcmVu
dCkKLSAgICAgICAgcmV0dXJuIGFjY2Vzc2libGVQYXJlbnQ7Ci0KLSAgICAvLyBQYXJlbnQgbm90
IHNldCB5ZXQsIHNvIHRyeSB0byBmaW5kIGl0IGluIHRoZSBoaWVyYXJjaHkuCi0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKLSAgICBpZiAoIWNvcmVP
YmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZVBhcmVudCA9IGNvcmVPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotCi0gICAgaWYg
KCFjb3JlUGFyZW50ICYmIGlzUm9vdE9iamVjdChjb3JlT2JqZWN0KSkKLSAgICAgICAgcmV0dXJu
IGF0a1BhcmVudE9mUm9vdE9iamVjdChvYmplY3QpOwotCi0gICAgaWYgKCFjb3JlUGFyZW50KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEdUSyBkb2Vzbid0IGV4cG9zZSB0YWJsZSByb3dz
IHRvIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGJ1dCB3ZQotICAgIC8vIG5lZWQgdG8gaGF2ZSB0
aGVtIGFueXdheSBpbiB0aGUgaGllcmFyY2h5IGZyb20gV2ViQ29yZSB0bwotICAgIC8vIHByb3Bl
cmx5IHBlcmZvcm0gY29vcmRpbmF0ZXMgY2FsY3VsYXRpb25zIHdoZW4gcmVxdWVzdGVkLgotICAg
IGlmIChjb3JlUGFyZW50LT5pc1RhYmxlUm93KCkgJiYgY29yZU9iamVjdC0+aXNUYWJsZUNlbGwo
KSkKLSAgICAgICAgY29yZVBhcmVudCA9IGNvcmVQYXJlbnQtPnBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpOwotCi0gICAgcmV0dXJuIGNvcmVQYXJlbnQtPndyYXBwZXIoKTsKLX0KLQotc3RhdGljIGdp
bnQgZ2V0TkNoaWxkcmVuRm9yVGFibGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkK
LXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
dGFibGVDaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IHRhYmxl
Q2hpbGRyZW5Db3VudCA9IHRhYmxlQ2hpbGRyZW4uc2l6ZSgpOwotICAgIHNpemVfdCBjZWxsc0Nv
dW50ID0gMDsKLQotICAgIC8vIExvb2sgZm9yIHRoZSBhY3R1YWwgaW5kZXggb2YgdGhlIGNlbGwg
aW5zaWRlIHRoZSB0YWJsZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGVDaGls
ZHJlbkNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKHRhYmxlQ2hpbGRyZW5baV0tPmlzVGFibGVS
b3coKSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHJvd0NoaWxkcmVuID0gdGFibGVDaGlsZHJlbltpXS0+Y2hpbGRyZW4oKTsK
LSAgICAgICAgICAgIGNlbGxzQ291bnQgKz0gcm93Q2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNlbGxzQ291bnQrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2Vs
bHNDb3VudDsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfZ2V0X25fY2hpbGRy
ZW4oQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCA9IGNvcmUob2JqZWN0KTsKLQotICAgIC8vIFRhYmxlcyBzaG91bGQgYmUgdHJlYXRlZCBp
biBhIGRpZmZlcmVudCB3YXkgYmVjYXVzZSByb3dzIHNob3VsZAotICAgIC8vIGJlIGJ5cGFzc2Vk
IGZvciBHVEsgd2hlbiBleHBvc2luZyB0aGUgYWNjZXNzaWJsZSBoaWVyYXJjaHkuCi0gICAgaWYg
KGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBnZXRO
Q2hpbGRyZW5Gb3JUYWJsZShjb3JlT2JqZWN0KTsKLQotICAgIHJldHVybiBjb3JlT2JqZWN0LT5j
aGlsZHJlbigpLnNpemUoKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldENo
aWxkRm9yVGFibGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgZ2ludCBpbmRleCkK
LXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
dGFibGVDaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IHRhYmxl
Q2hpbGRyZW5Db3VudCA9IHRhYmxlQ2hpbGRyZW4uc2l6ZSgpOwotICAgIHNpemVfdCBjZWxsc0Nv
dW50ID0gMDsKLQotICAgIC8vIExvb2sgZm9yIHRoZSBhY3R1YWwgaW5kZXggb2YgdGhlIGNlbGwg
aW5zaWRlIHRoZSB0YWJsZS4KLSAgICBzaXplX3QgY3VycmVudCA9IHN0YXRpY19jYXN0PHNpemVf
dD4oaW5kZXgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZUNoaWxkcmVuQ291
bnQ7ICsraSkgewotICAgICAgICBpZiAodGFibGVDaGlsZHJlbltpXS0+aXNUYWJsZVJvdygpKSB7
Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3Igcm93Q2hpbGRyZW4gPSB0YWJsZUNoaWxkcmVuW2ldLT5jaGlsZHJlbigpOwotICAgICAg
ICAgICAgc2l6ZV90IHJvd0NoaWxkcmVuQ291bnQgPSByb3dDaGlsZHJlbi5zaXplKCk7Ci0gICAg
ICAgICAgICBpZiAoY3VycmVudCA8IGNlbGxzQ291bnQgKyByb3dDaGlsZHJlbkNvdW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiByb3dDaGlsZHJlbi5hdChjdXJyZW50IC0gY2VsbHNDb3VudCku
Z2V0KCk7Ci0gICAgICAgICAgICBjZWxsc0NvdW50ICs9IHJvd0NoaWxkcmVuQ291bnQ7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoY2VsbHNDb3VudCA9PSBjdXJyZW50KQotICAgICAgICAgICAgcmV0dXJu
IHRhYmxlQ2hpbGRyZW5baV0uZ2V0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNlbGxz
Q291bnQrKzsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGRuJ3QgcmVhY2ggaWYgdGhlIGNoaWxkIHdh
cyBmb3VuZC4KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIEF0a09iamVjdCogd2Via2l0X2Fj
Y2Vzc2libGVfcmVmX2NoaWxkKEF0a09iamVjdCogb2JqZWN0LCBnaW50IGluZGV4KQotewotICAg
IGlmIChpbmRleCA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlQ2hpbGQgPSAwOwotCi0gICAgLy8gVGFibGVzIGFyZSBzcGVjaWFsIGNhc2VzIGluIEdU
SyBiZWNhdXNlIHJvd3Mgc2hvdWxkIGJlCi0gICAgLy8gYnlwYXNzZWQsIGJ1dCBzdGlsbCB0YWtp
bmcgdGhlaXIgY2VsbHMgaW50byBhY2NvdW50LgotICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vz
c2liaWxpdHlUYWJsZSgpKQotICAgICAgICBjb3JlQ2hpbGQgPSBnZXRDaGlsZEZvclRhYmxlKGNv
cmVPYmplY3QsIGluZGV4KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZU9iamVjdC0+Y2hp
bGRyZW4oKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gY2hp
bGRyZW4uc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNvcmVDaGlsZCA9
IGNoaWxkcmVuLmF0KGluZGV4KS5nZXQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvcmVDaGlsZCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdGtPYmplY3QqIGNoaWxkID0gY29yZUNoaWxkLT53
cmFwcGVyKCk7Ci0gICAgYXRrX29iamVjdF9zZXRfcGFyZW50KGNoaWxkLCBvYmplY3QpOwotICAg
IGdfb2JqZWN0X3JlZihjaGlsZCk7Ci0KLSAgICByZXR1cm4gY2hpbGQ7Ci19Ci0KLXN0YXRpYyBn
aW50IGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3coQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBjb3JlT2JqZWN0
LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0
dXJuIC0xOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ3JhbmRQYXJlbnQgPSBwYXJlbnQt
PnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlmICghZ3JhbmRQYXJlbnQpCi0gICAgICAg
IHJldHVybiAtMTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciByb3dzID0gZ3JhbmRQYXJlbnQtPmNoaWxkcmVuKCk7Ci0gICAgc2l6ZV90IHJv
d3NDb3VudCA9IHJvd3Muc2l6ZSgpOwotICAgIHNpemVfdCBwcmV2aW91c0NlbGxzQ291bnQgPSAw
OwotCi0gICAgLy8gTG9vayBmb3IgdGhlIGFjdHVhbCBpbmRleCBvZiB0aGUgY2VsbCBpbnNpZGUg
dGhlIHRhYmxlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb3dzQ291bnQ7ICsraSkg
ewotICAgICAgICBpZiAoIXJvd3NbaV0tPmlzVGFibGVSb3coKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciBjZWxscyA9IHJvd3NbaV0tPmNoaWxkcmVuKCk7Ci0gICAgICAgIHNpemVfdCBjZWxs
c0NvdW50ID0gY2VsbHMuc2l6ZSgpOwotCi0gICAgICAgIGlmIChyb3dzW2ldID09IHBhcmVudCkg
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNlbGxzQ291bnQ7ICsraikg
ewotICAgICAgICAgICAgICAgIGlmIChjZWxsc1tqXSA9PSBjb3JlT2JqZWN0KQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDZWxsc0NvdW50ICsgajsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHByZXZpb3VzQ2VsbHNDb3VudCArPSBjZWxsc0NvdW50Owot
ICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotCi1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNz
aWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50KEF0a09iamVjdCogb2JqZWN0KQotewotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7Ci0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gY29yZU9iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7
Ci0KLSAgICBpZiAoIXBhcmVudCAmJiBpc1Jvb3RPYmplY3QoY29yZU9iamVjdCkpIHsKLSAgICAg
ICAgQXRrT2JqZWN0KiBhdGtQYXJlbnQgPSBhdGtQYXJlbnRPZlJvb3RPYmplY3Qob2JqZWN0KTsK
LSAgICAgICAgaWYgKCFhdGtQYXJlbnQpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAg
ICAgdW5zaWduZWQgY291bnQgPSBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4o
YXRrUGFyZW50KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKLSAgICAgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKGF0a1BhcmVudCwgaSk7Ci0gICAgICAgICAgICBib29sIGNoaWxkSXNPYmplY3Qg
PSBjaGlsZCA9PSBvYmplY3Q7Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZihjaGlsZCk7Ci0g
ICAgICAgICAgICBpZiAoY2hpbGRJc09iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5lZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmRleCBv
ZiB0aGUgY2VsbCBpbiB0aGUgdGFibGUsIGFzCi0gICAgLy8gcm93cyB3b24ndCBiZSBleHBvc2Vk
IHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgaW4gR1RLLgotICAgIGlmIChwYXJlbnQgJiYgcGFy
ZW50LT5pc1RhYmxlUm93KCkgJiYgY29yZU9iamVjdC0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAg
cmV0dXJuIGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3coY29yZU9iamVjdCk7Ci0KLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4g
PSBwYXJlbnQtPmNoaWxkcmVuKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
aWYgKGNoaWxkcmVuW2ldID09IGNvcmVPYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGFkZEF0
dHJpYnV0ZVRvU2V0KEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0LCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKLXsKLSAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGdfbWFsbG9jKHNpemVvZihBdGtBdHRyaWJ1dGUp
KSk7Ci0gICAgYXR0cmlidXRlLT5uYW1lID0gZ19zdHJkdXAobmFtZSk7Ci0gICAgYXR0cmlidXRl
LT52YWx1ZSA9IGdfc3RyZHVwKHZhbHVlKTsKLSAgICBhdHRyaWJ1dGVTZXQgPSBnX3NsaXN0X3By
ZXBlbmQoYXR0cmlidXRlU2V0LCBhdHRyaWJ1dGUpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZVNl
dDsKLX0KLQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2F0
dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBhdHRy
aWJ1dGVTZXQgPSAwOwotICAgIGF0dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJp
YnV0ZVNldCwgInRvb2xraXQiLCAiV2ViS2l0R3RrIik7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIGlmICghY29yZU9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsKLQotICAgIGludCBoZWFkaW5nTGV2ZWwgPSBjb3Jl
T2JqZWN0LT5oZWFkaW5nTGV2ZWwoKTsKLSAgICBpZiAoaGVhZGluZ0xldmVsKSB7Ci0gICAgICAg
IFN0cmluZyB2YWx1ZSA9IFN0cmluZzo6bnVtYmVyKGhlYWRpbmdMZXZlbCk7Ci0gICAgICAgIGF0
dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgImxldmVsIiwgdmFs
dWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSAnbGF5b3V0LWd1ZXNz
JyBhdHRyaWJ1dGUgdG8gaGVscCBBc3Npc3RpdmUKLSAgICAvLyBUZWNobm9sb2dpZXMga25vdyB3
aGVuIGFuIGV4cG9zZWQgdGFibGUgaXMgbm90IGRhdGEgdGFibGUuCi0gICAgaWYgKGNvcmVPYmpl
Y3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgIWNvcmVPYmplY3QtPmlzRGF0YVRhYmxlKCkp
Ci0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwg
ImxheW91dC1ndWVzcyIsICJ0cnVlIik7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlU2V0OwotfQot
Ci1zdGF0aWMgQXRrUm9sZSBhdGtSb2xlKEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUpCi17Ci0gICAg
c3dpdGNoIChyb2xlKSB7Ci0gICAgY2FzZSBVbmtub3duUm9sZToKLSAgICAgICAgcmV0dXJuIEFU
S19ST0xFX1VOS05PV047Ci0gICAgY2FzZSBCdXR0b25Sb2xlOgotICAgICAgICByZXR1cm4gQVRL
X1JPTEVfUFVTSF9CVVRUT047Ci0gICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6Ci0gICAgICAgIHJl
dHVybiBBVEtfUk9MRV9SQURJT19CVVRUT047Ci0gICAgY2FzZSBDaGVja0JveFJvbGU6Ci0gICAg
ICAgIHJldHVybiBBVEtfUk9MRV9DSEVDS19CT1g7Ci0gICAgY2FzZSBTbGlkZXJSb2xlOgotICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfU0xJREVSOwotICAgIGNhc2UgVGFiR3JvdXBSb2xlOgotICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfUEFHRV9UQUJfTElTVDsKLSAgICBjYXNlIFRleHRGaWVsZFJv
bGU6Ci0gICAgY2FzZSBUZXh0QXJlYVJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9FTlRS
WTsKLSAgICBjYXNlIFN0YXRpY1RleHRSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEVY
VDsKLSAgICBjYXNlIE91dGxpbmVSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVFJFRTsK
LSAgICBjYXNlIE1lbnVCYXJSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUVOVV9CQVI7
Ci0gICAgY2FzZSBNZW51TGlzdFBvcHVwUm9sZToKLSAgICBjYXNlIE1lbnVSb2xlOgotICAgICAg
ICByZXR1cm4gQVRLX1JPTEVfTUVOVTsKLSAgICBjYXNlIE1lbnVMaXN0T3B0aW9uUm9sZToKLSAg
ICBjYXNlIE1lbnVJdGVtUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX01FTlVfSVRFTTsK
LSAgICBjYXNlIENvbHVtblJvbGU6Ci0gICAgICAgIC8vcmV0dXJuIEFUS19ST0xFX1RBQkxFX0NP
TFVNTl9IRUFERVI7IC8vIElzIHRoaXMgcmlnaHQ/Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9V
TktOT1dOOyAvLyBNYXRjaGVzIE1vemlsbGEKLSAgICBjYXNlIFJvd1JvbGU6Ci0gICAgICAgIC8v
cmV0dXJuIEFUS19ST0xFX1RBQkxFX1JPV19IRUFERVI7IC8vIElzIHRoaXMgcmlnaHQ/Ci0gICAg
ICAgIHJldHVybiBBVEtfUk9MRV9MSVNUX0lURU07IC8vIE1hdGNoZXMgTW96aWxsYQotICAgIGNh
c2UgVG9vbGJhclJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9UT09MX0JBUjsKLSAgICBj
YXNlIEJ1c3lJbmRpY2F0b3JSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfUFJPR1JFU1Nf
QkFSOyAvLyBJcyB0aGlzIHJpZ2h0PwotICAgIGNhc2UgUHJvZ3Jlc3NJbmRpY2F0b3JSb2xlOgot
ICAgICAgICAvL3JldHVybiBBVEtfUk9MRV9TUElOX0JVVFRPTjsgLy8gU29tZSBjb25mdXNpb24g
YWJvdXQgdGhpcyByb2xlIGluIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCi0gICAgICAg
IHJldHVybiBBVEtfUk9MRV9QUk9HUkVTU19CQVI7Ci0gICAgY2FzZSBXaW5kb3dSb2xlOgotICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfV0lORE9XOwotICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgot
ICAgIGNhc2UgQ29tYm9Cb3hSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfQ09NQk9fQk9Y
OwotICAgIGNhc2UgU3BsaXRHcm91cFJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9TUExJ
VF9QQU5FOwotICAgIGNhc2UgU3BsaXR0ZXJSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVf
U0VQQVJBVE9SOwotICAgIGNhc2UgQ29sb3JXZWxsUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19S
T0xFX0NPTE9SX0NIT09TRVI7Ci0gICAgY2FzZSBMaXN0Um9sZToKLSAgICAgICAgcmV0dXJuIEFU
S19ST0xFX0xJU1Q7Ci0gICAgY2FzZSBTY3JvbGxCYXJSb2xlOgotICAgICAgICByZXR1cm4gQVRL
X1JPTEVfU0NST0xMX0JBUjsKLSAgICBjYXNlIFNjcm9sbEFyZWFSb2xlOgotICAgICAgICByZXR1
cm4gQVRLX1JPTEVfU0NST0xMX1BBTkU7Ci0gICAgY2FzZSBHcmlkUm9sZTogLy8gSXMgdGhpcyBy
aWdodD8KLSAgICBjYXNlIFRhYmxlUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RBQkxF
OwotICAgIGNhc2UgQXBwbGljYXRpb25Sb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfQVBQ
TElDQVRJT047Ci0gICAgY2FzZSBHcm91cFJvbGU6Ci0gICAgY2FzZSBSYWRpb0dyb3VwUm9sZToK
LSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBTkVMOwotICAgIGNhc2UgUm93SGVhZGVyUm9sZTog
Ly8gUm93IGhlYWRlcnMgYXJlIGNlbGxzIGFmdGVyIGFsbC4KLSAgICBjYXNlIENvbHVtbkhlYWRl
clJvbGU6IC8vIENvbHVtbiBoZWFkZXJzIGFyZSBjZWxscyBhZnRlciBhbGwuCi0gICAgY2FzZSBD
ZWxsUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RBQkxFX0NFTEw7Ci0gICAgY2FzZSBM
aW5rUm9sZToKLSAgICBjYXNlIFdlYkNvcmVMaW5rUm9sZToKLSAgICBjYXNlIEltYWdlTWFwTGlu
a1JvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9MSU5LOwotICAgIGNhc2UgSW1hZ2VNYXBS
b2xlOgotICAgIGNhc2UgSW1hZ2VSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfSU1BR0U7
Ci0gICAgY2FzZSBMaXN0TWFya2VyUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RFWFQ7
Ci0gICAgY2FzZSBXZWJBcmVhUm9sZToKLSAgICAgICAgLy9yZXR1cm4gQVRLX1JPTEVfSFRNTF9D
T05UQUlORVI7IC8vIElzIHRoaXMgcmlnaHQ/Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9ET0NV
TUVOVF9GUkFNRTsKLSAgICBjYXNlIEhlYWRpbmdSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JP
TEVfSEVBRElORzsKLSAgICBjYXNlIExpc3RCb3hSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JP
TEVfTElTVDsKLSAgICBjYXNlIExpc3RJdGVtUm9sZToKLSAgICBjYXNlIExpc3RCb3hPcHRpb25S
b2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfTElTVF9JVEVNOwotICAgIGNhc2UgUGFyYWdy
YXBoUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBUkFHUkFQSDsKLSAgICBjYXNlIExh
YmVsUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xBQkVMOwotICAgIGNhc2UgRGl2Um9s
ZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NFQ1RJT047Ci0gICAgY2FzZSBGb3JtUm9sZToK
LSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0ZPUk07Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIEFUS19ST0xFX1VOS05PV047Ci0gICAgfQotfQotCi1zdGF0aWMgQXRrUm9sZSB3ZWJraXRf
YWNjZXNzaWJsZV9nZXRfcm9sZShBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotCi0gICAgaWYgKCFjb3JlT2Jq
ZWN0KQotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVU5LTk9XTjsKLQotICAgIC8vIE5vdGU6IFdo
eSBkb2Vzbid0IFdlYkNvcmUgaGF2ZSBhIHBhc3N3b3JkIGZpZWxkIGZvciB0aGlzCi0gICAgaWYg
KGNvcmVPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKQotICAgICAgICByZXR1cm4gQVRLX1JPTEVf
UEFTU1dPUkRfVEVYVDsKLQotICAgIHJldHVybiBhdGtSb2xlKGNvcmVPYmplY3QtPnJvbGVWYWx1
ZSgpKTsKLX0KLQotc3RhdGljIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKLXsK
LSAgICBpZiAoIWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2VsZWN0aW9uLmlz
Tm9uZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugd2FudCB0byBjaGVjayB0aGF0IGJvdGggdGhl
IHNlbGVjdGlvbiBpbnRlcnNlY3RzIHRoZSBub2RlCi0gICAgLy8gQU5EIHRoYXQgdGhlIHNlbGVj
dGlvbiBpcyBub3QganVzdCAidG91Y2hpbmciIG9uZSBvZiB0aGUKLSAgICAvLyBib3VuZGFyaWVz
IGZvciB0aGUgc2VsZWN0ZWQgbm9kZS4gV2Ugd2FudCB0byBjaGVjayB3aGV0aGVyIHRoZQotICAg
IC8vIG5vZGUgaXMgYWN0dWFsbHkgaW5zaWRlIHRoZSByZWdpb24sIGF0IGxlYXN0IHBhcnRpYWxs
eS4KLSAgICBOb2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOwotICAgIE5vZGUqIGxhc3RE
ZXNjZW5kYW50ID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICByZXR1cm4gKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlLCBlYykKLSAgICAg
ICAgICAgICYmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zm
c2V0KCkpCi0gICAgICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERl
c2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0
RGVzY2VuZGFudCkpKTsKLX0KLQotc3RhdGljIGJvb2wgaXNUZXh0V2l0aENhcmV0KEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3Jl
T2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsK
LSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsK
LSAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2hlY2sgdGV4dCBvYmplY3RzIGFuZCBw
YXJhZ3JhcGhzIG9ubHkuCi0gICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVPYmplY3QtPndy
YXBwZXIoKTsKLSAgICBBdGtSb2xlIHJvbGUgPSBheE9iamVjdCA/IGF0a19vYmplY3RfZ2V0X3Jv
bGUoYXhPYmplY3QpIDogQVRLX1JPTEVfSU5WQUxJRDsKLSAgICBpZiAocm9sZSAhPSBBVEtfUk9M
RV9URVhUICYmIHJvbGUgIT0gQVRLX1JPTEVfUEFSQUdSQVBIKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBGaW5hbGx5LCBjaGVjayB3aGV0aGVyIHRoZSBjYXJldCBpcyBzZXQgaW4g
dGhlIGN1cnJlbnQgb2JqZWN0LgotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gY29y
ZU9iamVjdC0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJldCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0
KGNvcmVPYmplY3QsIHNlbGVjdGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEF0a1N0YXRlU2V0
RnJvbUNvcmVPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrU3RhdGVT
ZXQqIHN0YXRlU2V0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IGNvcmVP
YmplY3QtPnBhcmVudE9iamVjdCgpOwotICAgIGJvb2wgaXNMaXN0Qm94T3B0aW9uID0gcGFyZW50
ICYmIHBhcmVudC0+aXNMaXN0Qm94KCk7Ci0KLSAgICAvLyBQbGVhc2Uga2VlcCB0aGUgc3RhdGUg
bGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIKLSAgICBpZiAoY29yZU9iamVjdC0+aXNDaGVja2Vk
KCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
Q0hFQ0tFRCk7Ci0KLSAgICAvLyBGSVhNRTogaXNSZWFkT25seSBkb2VzIG5vdCBzZWVtIHRvIGRv
IHRoZSByaWdodCB0aGluZyBmb3IKLSAgICAvLyBjb250cm9scywgc28gY2hlY2sgZXhwbGljaXRs
eSBmb3IgdGhlbS4gSW4gYWRkaXRpb24sIGJlY2F1c2UKLSAgICAvLyBpc1JlYWRPbmx5IGlzIGZh
bHNlIGZvciBsaXN0Qm94T3B0aW9ucywgd2UgbmVlZCB0byBhZGQgb25lCi0gICAgLy8gbW9yZSBj
aGVjayBzbyB0aGF0IHdlIGRvIG5vdCBwcmVzZW50IHRoZW0gYXMgYmVpbmcgImVkaXRhYmxlIi4K
LSAgICBpZiAoKCFjb3JlT2JqZWN0LT5pc1JlYWRPbmx5KCkgfHwKLSAgICAgICAgKGNvcmVPYmpl
Y3QtPmlzQ29udHJvbCgpICYmIGNvcmVPYmplY3QtPmNhblNldFZhbHVlQXR0cmlidXRlKCkpKSAm
JgotICAgICAgICAhaXNMaXN0Qm94T3B0aW9uKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9z
dGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0VESVRBQkxFKTsKLQotICAgIC8vIEZJWE1FOiBQdXQg
Ym90aCBFTkFCTEVEIGFuZCBTRU5TSVRJVkUgdG9nZXRoZXIgaGVyZSBmb3Igbm93Ci0gICAgaWYg
KGNvcmVPYmplY3QtPmlzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0
YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRU5BQkxFRCk7Ci0gICAgICAgIGF0a19zdGF0ZV9zZXRf
YWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0VOU0lUSVZFKTsKLSAgICB9Ci0KLSAgICBp
ZiAoY29yZU9iamVjdC0+Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSkKLSAgICAgICAgYXRrX3N0
YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9FWFBBTkRBQkxFKTsKLQotICAg
IGlmIChjb3JlT2JqZWN0LT5pc0V4cGFuZGVkKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRk
X3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRVhQQU5ERUQpOwotCi0gICAgaWYgKGNvcmVPYmpl
Y3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0
YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRk9DVVNBQkxFKTsKLQotICAgIGlmIChjb3JlT2JqZWN0
LT5pc0ZvY3VzZWQoKSB8fCBpc1RleHRXaXRoQ2FyZXQoY29yZU9iamVjdCkpCi0gICAgICAgIGF0
a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRk9DVVNFRCk7Ci0KLSAg
ICAvLyBUT0RPOiBBVEtfU1RBVEVfSE9SSVpPTlRBTAotCi0gICAgaWYgKGNvcmVPYmplY3QtPmlz
SW5kZXRlcm1pbmF0ZSgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNl
dCwgQVRLX1NUQVRFX0lOREVURVJNSU5BVEUpOwotCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzTXVs
dGlTZWxlY3RhYmxlKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0
LCBBVEtfU1RBVEVfTVVMVElTRUxFQ1RBQkxFKTsKLQotICAgIC8vIFRPRE86IEFUS19TVEFURV9P
UEFRVUUKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc1ByZXNzZWQoKSkKLSAgICAgICAgYXRrX3N0
YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9QUkVTU0VEKTsKLQotICAgIC8v
IFRPRE86IEFUS19TVEFURV9TRUxFQ1RBQkxFX1RFWFQKLQotICAgIGlmIChjb3JlT2JqZWN0LT5j
YW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpKSB7Ci0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0
YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0VMRUNUQUJMRSk7Ci0gICAgICAgIC8vIEl0ZW1zIGlu
IGZvY3VzYWJsZSBsaXN0cyBpbiBHdGsgaGF2ZSBib3RoIFNUQVRFX1NFTEVDVHtBQkxFLEVEfQot
ICAgICAgICAvLyBhbmQgU1RBVEVfRk9DVVN7QUJMRSxFRH0uIFdlJ2xsIGZha2UgdGhlIGxhdHRl
ciBiYXNlZCBvbiB0aGUKLSAgICAgICAgLy8gZm9ybWVyLgotICAgICAgICBpZiAoaXNMaXN0Qm94
T3B0aW9uKQotICAgICAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFU
S19TVEFURV9GT0NVU0FCTEUpOwotICAgIH0KLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc1NlbGVj
dGVkKCkpIHsKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19T
VEFURV9TRUxFQ1RFRCk7Ci0gICAgICAgIC8vIEl0ZW1zIGluIGZvY3VzYWJsZSBsaXN0cyBpbiBH
dGsgaGF2ZSBib3RoIFNUQVRFX1NFTEVDVHtBQkxFLEVEfQotICAgICAgICAvLyBhbmQgU1RBVEVf
Rk9DVVN7QUJMRSxFRH0uIFdlJ2xsIGZha2UgdGhlIGxhdHRlciBiYXNlZCBvbiB0aGUKLSAgICAg
ICAgLy8gZm9ybWVyLgotICAgICAgICBpZiAoaXNMaXN0Qm94T3B0aW9uKQotICAgICAgICAgICAg
YXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NVU0VEKTsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogR3JvdXAgYm90aCBTSE9XSU5HIGFuZCBWSVNJQkxFIGhlcmUg
Zm9yIG5vdwotICAgIC8vIE5vdCBzdXJlIGhvdyB0byBoYW5kbGUgdGhpcyBpbiBXZWJLaXQsIHNl
ZSBidWcKLSAgICAvLyBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDk2NTAgZm9yIG90aGVyCi0gICAgLy8gaXNzdWVzIHdpdGggU0hPV0lORyB2cyBWSVNJQkxFIHdp
dGhpbiBHVEsrCi0gICAgaWYgKCFjb3JlT2JqZWN0LT5pc09mZlNjcmVlbigpKSB7Ci0gICAgICAg
IGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0hPV0lORyk7Ci0g
ICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfVklTSUJM
RSk7Ci0gICAgfQotCi0gICAgLy8gTXV0dWFsbHkgZXhjbHVzaXZlLCBzbyB3ZSBncm91cCB0aGVz
ZSB0d28KLSAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGV4dEZpZWxkUm9sZSkK
LSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9TSU5H
TEVfTElORSk7Ci0gICAgZWxzZSBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGV4dEFy
ZWFSb2xlKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX01VTFRJX0xJTkUpOwotCi0gICAgLy8gVE9ETzogQVRLX1NUQVRFX1NFTlNJVElWRQotCi0g
ICAgLy8gVE9ETzogQVRLX1NUQVRFX1ZFUlRJQ0FMCi0KLSAgICBpZiAoY29yZU9iamVjdC0+aXNW
aXNpdGVkKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtf
U1RBVEVfVklTSVRFRCk7Ci19Ci0KLXN0YXRpYyBBdGtTdGF0ZVNldCogd2Via2l0X2FjY2Vzc2li
bGVfcmVmX3N0YXRlX3NldChBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBdGtTdGF0ZVNldCog
c3RhdGVTZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFz
cyktPnJlZl9zdGF0ZV9zZXQob2JqZWN0KTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0ID0gY29yZShvYmplY3QpOwotCi0gICAgaWYgKGNvcmVPYmplY3QgPT0gZmFsbGJhY2tP
YmplY3QoKSkgewotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRL
X1NUQVRFX0RFRlVOQ1QpOwotICAgICAgICByZXR1cm4gc3RhdGVTZXQ7Ci0gICAgfQotCi0gICAg
Ly8gVGV4dCBvYmplY3RzIG11c3QgYmUgZm9jdXNhYmxlLgotICAgIEF0a1JvbGUgcm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUob2JqZWN0KTsKLSAgICBpZiAocm9sZSA9PSBBVEtfUk9MRV9URVhU
IHx8IHJvbGUgPT0gQVRLX1JPTEVfUEFSQUdSQVBIKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2Fk
ZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7Ci0KLSAgICBzZXRBdGtTdGF0
ZVNldEZyb21Db3JlT2JqZWN0KGNvcmVPYmplY3QsIHN0YXRlU2V0KTsKLSAgICByZXR1cm4gc3Rh
dGVTZXQ7Ci19Ci0KLXN0YXRpYyBBdGtSZWxhdGlvblNldCogd2Via2l0X2FjY2Vzc2libGVfcmVm
X3JlbGF0aW9uX3NldChBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBdGtSZWxhdGlvblNldCog
cmVsYXRpb25TZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9j
bGFzcyktPnJlZl9yZWxhdGlvbl9zZXQob2JqZWN0KTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotCi0gICAgc2V0QXRrUmVsYXRpb25TZXRGcm9t
Q29yZU9iamVjdChjb3JlT2JqZWN0LCByZWxhdGlvblNldCk7Ci0KLSAgICByZXR1cm4gcmVsYXRp
b25TZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQoQXRrT2JqZWN0
KiBvYmplY3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKEFUS19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+aW5pdGlhbGl6ZSkKLSAgICAgICAgQVRLX09C
SkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKG9i
amVjdCwgZGF0YSk7Ci0KLSAgICBXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpLT5tX29iamVjdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KGRhdGEpOwotfQotCi1zdGF0
aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0g
ICAgLy8gVGhpcyBpcyBhIGdvb2QgdGltZSB0byBjbGVhciB0aGUgcmV0dXJuIGJ1ZmZlci4KLSAg
ICByZXR1cm5TdHJpbmcoU3RyaW5nKCkpOwotCi0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Fj
Y2Vzc2libGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2FjY2Vzc2libGVfY2xhc3NfaW5pdChBdGtPYmplY3RDbGFzcyoga2xhc3MpCi17
Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7
Ci0KLSAgICB3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVl
a19wYXJlbnQoa2xhc3MpOwotCi0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX2ZpbmFsaXplOwotCi0gICAga2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRfYWNj
ZXNzaWJsZV9pbml0OwotICAgIGtsYXNzLT5nZXRfbmFtZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dl
dF9uYW1lOwotICAgIGtsYXNzLT5nZXRfZGVzY3JpcHRpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV9n
ZXRfZGVzY3JpcHRpb247Ci0gICAga2xhc3MtPmdldF9wYXJlbnQgPSB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfcGFyZW50OwotICAgIGtsYXNzLT5nZXRfbl9jaGlsZHJlbiA9IHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF9uX2NoaWxkcmVuOwotICAgIGtsYXNzLT5yZWZfY2hpbGQgPSB3ZWJraXRfYWNjZXNz
aWJsZV9yZWZfY2hpbGQ7Ci0gICAga2xhc3MtPmdldF9yb2xlID0gd2Via2l0X2FjY2Vzc2libGVf
Z2V0X3JvbGU7Ci0gICAga2xhc3MtPnJlZl9zdGF0ZV9zZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV9y
ZWZfc3RhdGVfc2V0OwotICAgIGtsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0gd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X2luZGV4X2luX3BhcmVudDsKLSAgICBrbGFzcy0+Z2V0X2F0dHJpYnV0ZXMg
PSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYXR0cmlidXRlczsKLSAgICBrbGFzcy0+cmVmX3JlbGF0
aW9uX3NldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9yZWxhdGlvbl9zZXQ7Ci0KLSAgICBoeXBl
cmxpbmtPYmplY3RRdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJ3ZWJraXQtYWNj
ZXNzaWJsZS1oeXBlcmxpbmstb2JqZWN0Iik7Ci19Ci0KLUdUeXBlCi13ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfdHlwZSh2b2lkKQotewotICAgIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSB0eXBlX3ZvbGF0
aWxlID0gMDsKLQotICAgIGlmIChnX29uY2VfaW5pdF9lbnRlcigmdHlwZV92b2xhdGlsZSkpIHsK
LSAgICAgICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyB0aW5mbyA9IHsKLSAgICAgICAgICAgIHNp
emVvZihXZWJLaXRBY2Nlc3NpYmxlQ2xhc3MpLAotICAgICAgICAgICAgKEdCYXNlSW5pdEZ1bmMp
IDAsCi0gICAgICAgICAgICAoR0Jhc2VGaW5hbGl6ZUZ1bmMpIDAsCi0gICAgICAgICAgICAoR0Ns
YXNzSW5pdEZ1bmMpIHdlYmtpdF9hY2Nlc3NpYmxlX2NsYXNzX2luaXQsCi0gICAgICAgICAgICAo
R0NsYXNzRmluYWxpemVGdW5jKSAwLAotICAgICAgICAgICAgMCwgLyogY2xhc3MgZGF0YSAqLwot
ICAgICAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGUpLCAvKiBpbnN0YW5jZSBzaXplICov
Ci0gICAgICAgICAgICAwLCAvKiBuYiBwcmVhbGxvY3MgKi8KLSAgICAgICAgICAgIChHSW5zdGFu
Y2VJbml0RnVuYykgMCwKLSAgICAgICAgICAgIDAgLyogdmFsdWUgdGFibGUgKi8KLSAgICAgICAg
fTsKLQotICAgICAgICBHVHlwZSB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyhBVEtfVFlQ
RV9PQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJX
ZWJLaXRBY2Nlc3NpYmxlIiwgJnRpbmZvLCBHVHlwZUZsYWdzKDApKTsKLSAgICAgICAgZ19vbmNl
X2luaXRfbGVhdmUoJnR5cGVfdm9sYXRpbGUsIHR5cGUpOwotICAgIH0KLQotICAgIHJldHVybiB0
eXBlX3ZvbGF0aWxlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfYWN0
aW9uX2RvX2FjdGlvbihBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGkgPT0gMCwgRkFMU0UpOwotICAgIHJldHVybiBjb3JlKGFjdGlvbiktPnBl
cmZvcm1EZWZhdWx0QWN0aW9uKCk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxl
X2FjdGlvbl9nZXRfbl9hY3Rpb25zKEF0a0FjdGlvbiogYWN0aW9uKQotewotICAgIHJldHVybiAx
OwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRf
ZGVzY3JpcHRpb24oQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQgaSkKLXsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChpID09IDAsIDApOwotICAgIC8vIFRPRE86IE5lZWQgYSB3YXkgdG8gcHJvdmlk
ZS9sb2NhbGl6ZSBhY3Rpb24gZGVzY3JpcHRpb25zLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuICIiOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxl
X2FjdGlvbl9nZXRfa2V5YmluZGluZyhBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGkgPT0gMCwgMCk7Ci0gICAgLy8gRklYTUU6IENvbnN0cnVj
dCBhIHByb3BlciBrZXliaW5kaW5nIHN0cmluZy4KLSAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNv
cmUoYWN0aW9uKS0+YWNjZXNzS2V5KCkuc3RyaW5nKCkpOwotfQotCi1zdGF0aWMgY29uc3QgZ2No
YXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfbmFtZShBdGtBY3Rpb24qIGFjdGlvbiwg
Z2ludCBpKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGkgPT0gMCwgMCk7Ci0gICAgcmV0
dXJuIHJldHVyblN0cmluZyhjb3JlKGFjdGlvbiktPmFjdGlvblZlcmIoKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGF0a19hY3Rpb25faW50ZXJmYWNlX2luaXQoQXRrQWN0aW9uSWZhY2UqIGlmYWNlKQot
ewotICAgIGlmYWNlLT5kb19hY3Rpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZG9fYWN0
aW9uOwotICAgIGlmYWNlLT5nZXRfbl9hY3Rpb25zID0gd2Via2l0X2FjY2Vzc2libGVfYWN0aW9u
X2dldF9uX2FjdGlvbnM7Ci0gICAgaWZhY2UtPmdldF9kZXNjcmlwdGlvbiA9IHdlYmtpdF9hY2Nl
c3NpYmxlX2FjdGlvbl9nZXRfZGVzY3JpcHRpb247Ci0gICAgaWZhY2UtPmdldF9rZXliaW5kaW5n
ID0gd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9rZXliaW5kaW5nOwotICAgIGlmYWNlLT5n
ZXRfbmFtZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfbmFtZTsKLX0KLQotLy8gU2Vs
ZWN0aW9uIChmb3IgY29udHJvbHMpCi0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0
T2JqZWN0Rm9yU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0KLSAgICAv
LyBPbmx5IGxpc3QgYm94ZXMgYW5kIG1lbnUgbGlzdHMgc3VwcG9ydGVkIHNvIGZhci4KLSAgICBp
ZiAoIWNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpICYmICFjb3JlU2VsZWN0aW9uLT5pc01lbnVM
aXN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRm9yIGxpc3QgYm94ZXMgdGhlIGxp
c3Qgb2JqZWN0IGlzIGp1c3QgaXRzZWxmLgotICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RC
b3goKSkKLSAgICAgICAgcmV0dXJuIGNvcmVTZWxlY3Rpb247Ci0KLSAgICAvLyBGb3IgbWVudSBs
aXN0cyB3ZSBuZWVkIHRvIHJldHVybiB0aGUgZmlyc3QgYWNjZXNzaWJsZSBjaGlsZCwKLSAgICAv
LyB3aXRoIHJvbGUgTWVudUxpc3RQb3B1cFJvbGUsIHNpbmNlIHRoYXQncyB0aGUgb25lIGhvbGRp
bmcgdGhlIGxpc3QKLSAgICAvLyBvZiBpdGVtcyB3aXRoIHJvbGUgTWVudUxpc3RPcHRpb25Sb2xl
LgotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBj
aGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7Ci0gICAgaWYgKCFjaGlsZHJlbi5z
aXplKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlz
dE9iamVjdCA9IGNoaWxkcmVuLmF0KDApLmdldCgpOwotICAgIGlmICghbGlzdE9iamVjdC0+aXNN
ZW51TGlzdFBvcHVwKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGxpc3RPYmpl
Y3Q7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb25Gcm9tTGlzdChBdGtT
ZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2VsZWN0aW9u
IHx8IGkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE5lZWQgdG8gc2VsZWN0IHRo
ZSBwcm9wZXIgbGlzdCBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSB0eXBlLgotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGxpc3RPYmplY3QgPSBsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKHNlbGVjdGlv
bik7Ci0gICAgaWYgKCFsaXN0T2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBvcHRpb25zID0gbGlz
dE9iamVjdC0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG9wdGlv
bnMuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG9wdGlvbnMuYXQoaSkuZ2V0KCk7Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbkZyb21TZWxl
Y3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKLXsKLSAgICAvLyBpIGlzIHRo
ZSBpdGggc2VsZWN0aW9uIGFzIG9wcG9zZWQgdG8gdGhlIGl0aCBjaGlsZC4KLQotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYg
KCFjb3JlU2VsZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSB8fCBpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKLSAgICBp
ZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpCi0gICAgICAgIGNvcmVTZWxlY3Rpb24tPnNl
bGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7Ci0gICAgZWxzZSBpZiAoY29yZVNlbGVjdGlv
bi0+aXNNZW51TGlzdCgpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3Jl
U2VsZWN0aW9uLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdE5vZGUgPSB0
b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOwotICAgICAgICBpbnQgc2VsZWN0
ZWRJbmRleCA9IHNlbGVjdE5vZGUtPnNlbGVjdGVkSW5kZXgoKTsKLSAgICAgICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gc2VsZWN0Tm9kZS0+bGlzdEl0ZW1zKCk7Ci0K
LSAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCAwIHx8IHNlbGVjdGVkSW5kZXggPj0gc3RhdGlj
X2Nhc3Q8aW50PihsaXN0SXRlbXMuc2l6ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0g
ICAgICAgIHJldHVybiBvcHRpb25Gcm9tTGlzdChzZWxlY3Rpb24sIHNlbGVjdGVkSW5kZXgpOwot
ICAgIH0KLQotICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4oc2VsZWN0ZWRJdGVtcy5zaXpl
KCkpKQotICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5hdChpKS5nZXQoKTsKLQotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9u
X2FkZF9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKLXsKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAg
IGlmICghY29yZVNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbUxpc3Qoc2VsZWN0aW9uLCBpKTsKLSAg
ICBpZiAob3B0aW9uICYmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBjb3JlU2VsZWN0
aW9uLT5pc01lbnVMaXN0KCkpKSB7Ci0gICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWQodHJ1ZSk7
Ci0gICAgICAgIHJldHVybiBvcHRpb24tPmlzU2VsZWN0ZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rp
b25fY2xlYXJfc2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYg
KCFjb3JlU2VsZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKLSAg
ICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNNZW51
TGlzdCgpKSB7Ci0gICAgICAgIC8vIFNldCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBpdGVtcyB0byBh
biBlbXB0eSBsaXN0OyB0aGVuIHZlcmlmeSB0aGF0IGl0IHdvcmtlZC4KLSAgICAgICAgQWNjZXNz
aWJpbGl0eUxpc3RCb3gqIGxpc3RCb3ggPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJv
eCo+KGNvcmVTZWxlY3Rpb24pOwotICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZENoaWxkcmVu
KHNlbGVjdGVkSXRlbXMpOwotICAgICAgICBsaXN0Qm94LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVj
dGVkSXRlbXMpOwotICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zaXplKCkgPT0gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNj
ZXNzaWJsZV9zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwg
Z2ludCBpKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZyb21T
ZWxlY3Rpb24oc2VsZWN0aW9uLCBpKTsKLSAgICBpZiAob3B0aW9uKSB7Ci0gICAgICAgIEF0a09i
amVjdCogY2hpbGQgPSBvcHRpb24tPndyYXBwZXIoKTsKLSAgICAgICAgZ19vYmplY3RfcmVmKGNo
aWxkKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9j
b3VudChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmICghY29yZVNlbGVjdGlv
biB8fCAhY29yZVNlbGVjdGlvbi0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7Ci0g
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBz
ZWxlY3RlZEl0ZW1zOwotICAgICAgICBjb3JlU2VsZWN0aW9uLT5zZWxlY3RlZENoaWxkcmVuKHNl
bGVjdGVkSXRlbXMpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2ludD4oc2VsZWN0ZWRJ
dGVtcy5zaXplKCkpOwotICAgIH0KLQotICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0
KCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVTZWxlY3Rpb24tPnJl
bmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LQotICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQocmVuZGVy
ZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgoKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5k
ZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwgc3RhdGljX2Nhc3Q8aW50Pih0b0hUTUxTZWxlY3RF
bGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5saXN0SXRlbXMoKS5zaXplKCkpOwotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfc2Vs
ZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50IGkp
Ci17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0
aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbUxpc3Qoc2VsZWN0aW9uLCBp
KTsKLSAgICBpZiAob3B0aW9uICYmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBjb3Jl
U2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpKQotICAgICAgICByZXR1cm4gb3B0aW9uLT5pc1NlbGVj
dGVkKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
YWNjZXNzaWJsZV9zZWxlY3Rpb25fcmVtb3ZlX3NlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVj
dGlvbiwgZ2ludCBpKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24g
PSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2VsZWN0aW9uKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIC8vIFRPRE86IFRoaXMgaXMgb25seSBnZXR0aW5nIGNhbGxlZCBpZiBpID09
IDAuIFdoYXQgaXMgcHJldmVudGluZyB0aGUgcmVzdD8KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvcHRpb24gPSBvcHRpb25Gcm9tU2VsZWN0aW9uKHNlbGVjdGlvbiwgaSk7Ci0gICAgaWYgKG9w
dGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNN
ZW51TGlzdCgpKSkgewotICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuICFvcHRpb24tPmlzU2VsZWN0ZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fc2Vs
ZWN0X2FsbF9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAo
IWNvcmVTZWxlY3Rpb24gfHwgIWNvcmVTZWxlY3Rpb24tPmlzTXVsdGlTZWxlY3RhYmxlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7
Ci0gICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7Ci0gICAgICAgIEFjY2Vzc2li
aWxpdHlMaXN0Qm94KiBsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3gq
Pihjb3JlU2VsZWN0aW9uKTsKLSAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGlsZHJlbihj
aGlsZHJlbik7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOwotICAgICAgICBsaXN0Qm94LT5zZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkSXRlbXMpOwotICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zaXplKCkg
PT0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3Rh
dGljIHZvaWQgYXRrX3NlbGVjdGlvbl9pbnRlcmZhY2VfaW5pdChBdGtTZWxlY3Rpb25JZmFjZSog
aWZhY2UpCi17Ci0gICAgaWZhY2UtPmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV9z
ZWxlY3Rpb25fYWRkX3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+Y2xlYXJfc2VsZWN0aW9uID0gd2Vi
a2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2NsZWFyX3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+cmVm
X3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uOwot
ICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uX2NvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0
aW9uX2dldF9zZWxlY3Rpb25fY291bnQ7Ci0gICAgaWZhY2UtPmlzX2NoaWxkX3NlbGVjdGVkID0g
d2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkOwotICAgIGlmYWNl
LT5yZW1vdmVfc2VsZWN0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX3JlbW92ZV9z
ZWxlY3Rpb247Ci0gICAgaWZhY2UtPnNlbGVjdF9hbGxfc2VsZWN0aW9uID0gd2Via2l0X2FjY2Vz
c2libGVfc2VsZWN0aW9uX3NlbGVjdF9hbGxfc2VsZWN0aW9uOwotfQotCi0vLyBUZXh0Ci0KLXN0
YXRpYyBnY2hhciogdXRmOFN1YnN0cihjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IHN0YXJ0LCBn
aW50IGVuZCkKLXsKLSAgICBBU1NFUlQoc3RyaW5nKTsKLSAgICBnbG9uZyBzdHJMZW4gPSBnX3V0
Zjhfc3RybGVuKHN0cmluZywgLTEpOwotICAgIGlmIChzdGFydCA+IHN0ckxlbiB8fCBlbmQgPiBz
dHJMZW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGdjaGFyKiBzdGFydFB0ciA9IGdfdXRmOF9v
ZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIHN0YXJ0KTsKLSAgICBnc2l6ZSBsZW5JbkJ5dGVzID0g
Z191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgZW5kICsgMSkgLSAgc3RhcnRQdHI7Ci0g
ICAgZ2NoYXIqIG91dHB1dCA9IHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MwKGxlbkluQnl0
ZXMgKyAxKSk7Ci0gICAgcmV0dXJuIGdfdXRmOF9zdHJuY3B5KG91dHB1dCwgc3RhcnRQdHIsIGVu
ZCAtIHN0YXJ0ICsgMSk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbXBsZXRlbHkg
Z2VuZXJhbCwgaXMgaXQncyB0aWVkIHRvIHRoZQotLy8gaW50ZXJuYWxzIG9mIFdlYkNvcmUncyB0
ZXh0IHByZXNlbnRhdGlvbi4KLXN0YXRpYyBnY2hhciogY29udmVydFVuaUNoYXJUb1VURjgoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGdpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50IHRvKQotewot
ICAgIENTdHJpbmcgc3RyaW5nVVRGOCA9IFVURjhFbmNvZGluZygpLmVuY29kZShjaGFyYWN0ZXJz
LCBsZW5ndGgsIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOwotICAgIGdjaGFyKiB1dGY4
U3RyaW5nID0gdXRmOFN1YnN0cihzdHJpbmdVVEY4LmRhdGEoKSwgZnJvbSwgdG8pOwotICAgIGlm
ICghZ191dGY4X3ZhbGlkYXRlKHV0ZjhTdHJpbmcsIC0xLCAwKSkgewotICAgICAgICBnX2ZyZWUo
dXRmOFN0cmluZyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBnc2l6ZSBsZW4gPSBz
dHJsZW4odXRmOFN0cmluZyk7Ci0gICAgR1N0cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xlbigw
LCBsZW4pOwotICAgIGdjaGFyKiBwdHIgPSB1dGY4U3RyaW5nOwotCi0gICAgLy8gV2ViQ29yZSBp
bnRyb2R1Y2VzIGxpbmUgYnJlYWtzIGluIHRoZSB0ZXh0IHRoYXQgZG8gbm90IHJlZmxlY3QKLSAg
ICAvLyB0aGUgbGF5b3V0IHlvdSBzZWUgb24gdGhlIHNjcmVlbiwgcmVwbGFjZSB0aGVtIHdpdGgg
c3BhY2VzCi0gICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgICAgZ2ludCBpbmRleCwgc3RhcnQ7
Ci0gICAgICAgIHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHB0ciwgbGVuLCAmaW5kZXgs
ICZzdGFydCk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwdHIsIGluZGV4KTsK
LSAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGdfc3RyaW5nX2FwcGVuZF9jKHJldCwgJyAnKTsKLSAgICAgICAgcHRyICs9IHN0YXJ0OwotICAg
ICAgICBsZW4gLT0gc3RhcnQ7Ci0gICAgfQotCi0gICAgZ19mcmVlKHV0ZjhTdHJpbmcpOwotICAg
IHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOwotfQotCi1nY2hhciogdGV4dEZvclJl
bmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgR1N0cmluZyogcmVzdWx0VGV4
dCA9IGdfc3RyaW5nX25ldygwKTsKLQotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVy
biBnX3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNFKTsKLQotICAgIC8vIEZvciBSZW5kZXJC
bG9ja3MsIHBpZWNlIHRvZ2V0aGVyIHRoZSB0ZXh0IGZyb20gdGhlIFJlbmRlclRleHQgb2JqZWN0
cyB0aGV5IGNvbnRhaW4uCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVy
LT5maXJzdENoaWxkKCk7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5uZXh0U2libGluZygpKSB7
Ci0gICAgICAgIGlmIChvYmplY3QtPmlzQlIoKSkgewotICAgICAgICAgICAgZ19zdHJpbmdfYXBw
ZW5kKHJlc3VsdFRleHQsICJcbiIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0OwotICAgICAgICBpZiAob2JqZWN0LT5p
c1RleHQoKSkKLSAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqZWN0KTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAob2JqZWN0LT5pc1JlcGxhY2VkKCkpCi0g
ICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3VuaWNoYXIocmVzdWx0VGV4dCwgb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNr
IGNoaWxkcmVuLCBpZiBhbnksIHRvIGNvbnNpZGVyIHdoZW4KLSAgICAgICAgICAgIC8vIGN1cnJl
bnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lIG9mIGl0cwotICAgICAgICAg
ICAgLy8gY2hpbGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlzcyB0aG9zZSBwb3J0aW9ucyBv
ZgotICAgICAgICAgICAgLy8gdGV4dCBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhvc2Ugc2l0
dWF0aW9ucwotICAgICAgICAgICAgaWYgKG9iamVjdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICAg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0Rm9yUmVuZGVyZXIob2JqZWN0
KSk7Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5saW5l
VGV4dEJveCogYm94ID0gcmVuZGVyVGV4dCA/IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpIDog
MDsKLSAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAgZ2NoYXIqIHRleHQgPSBjb252
ZXJ0VW5pQ2hhclRvVVRGOChyZW5kZXJUZXh0LT5jaGFyYWN0ZXJzKCksIHJlbmRlclRleHQtPnRl
eHRMZW5ndGgoKSwgYm94LT5zdGFydCgpLCBib3gtPmVuZCgpKTsKLSAgICAgICAgICAgIGdfc3Ry
aW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0KTsKLSAgICAgICAgICAgIC8vIE5ld2xpbmUgY2hh
cnMgaW4gdGhlIHNvdXJjZSByZXN1bHQgaW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28gY2hlY2sK
LSAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlvdXQuIFNl
ZSBidWcgMjU0MTUgY29tbWVudCAjNzguCi0gICAgICAgICAgICAvLyBJZiB0aGUgbmV4dCBzaWJs
aW5nIGlzIGEgQlIsIHdlJ2xsIGFkZCB0aGUgbmV3bGluZSB3aGVuIHdlIGV4YW1pbmUgdGhhdCBj
aGlsZC4KLSAgICAgICAgICAgIGlmICghYm94LT5uZXh0T25MaW5lRXhpc3RzKCkgJiYgKCFvYmpl
Y3QtPm5leHRTaWJsaW5nKCkgfHwgIW9iamVjdC0+bmV4dFNpYmxpbmcoKS0+aXNCUigpKSkKLSAg
ICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgIlxuIik7Ci0gICAgICAg
ICAgICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBJbnNlcnQgdGhlIHRleHQgb2YgdGhlIG1hcmtlciBmb3IgbGlzdCBpdGVtIGluIHRoZSByaWdo
dCBwbGFjZSwgaWYgcHJlc2VudAotICAgIGlmIChyZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0g
ICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlciktPm1h
cmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgZ19zdHJpbmdfcHJlcGVuZChyZXN1bHRUZXh0
LCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBn
X3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgbWFya2VyVGV4dC51dGY4KCkuZGF0YSgpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXN1bHRUZXh0LCBGQUxTRSk7Ci19Ci0K
LWdjaGFyKiB0ZXh0Rm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17
Ci0gICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOwotCi0gICAgLy8gRm9yIHRleHQg
Y29udHJvbHMsIHdlIGNhbiBnZXQgdGhlIHRleHQgbGluZSBieSBsaW5lLgotICAgIGlmIChjb3Jl
T2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKLSAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9
IGNvcmVPYmplY3QtPnRleHRMZW5ndGgoKTsKLSAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwot
ICAgICAgICBQbGFpblRleHRSYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPmRvQVhSYW5nZUZvckxp
bmUobGluZU51bWJlcik7Ci0gICAgICAgIHdoaWxlIChyYW5nZS5sZW5ndGgpIHsKLSAgICAgICAg
ICAgIC8vIFdoZW4gYSBsaW5lIG9mIHRleHQgd3JhcHMgaW4gYSB0ZXh0IGFyZWEsIHRoZSBmaW5h
bCBzcGFjZSBpcyByZW1vdmVkLgotICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2Uu
bGVuZ3RoIDwgdGV4dExlbmd0aCkKLSAgICAgICAgICAgICAgICByYW5nZS5sZW5ndGggLT0gMTsK
LSAgICAgICAgICAgIFN0cmluZyBsaW5lVGV4dCA9IGNvcmVPYmplY3QtPmRvQVhTdHJpbmdGb3JS
YW5nZShyYW5nZSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBsaW5lVGV4dC51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOwot
ICAgICAgICAgICAgcmFuZ2UgPSBjb3JlT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51
bWJlcik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCgpKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHJlbmRlcmVyVGV4
dCh0ZXh0Rm9yUmVuZGVyZXIoY29yZU9iamVjdC0+cmVuZGVyZXIoKSkpOwotICAgICAgICBnX3N0
cmluZ19hcHBlbmQoc3RyLCByZW5kZXJlclRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIHJldHVy
biBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0UpOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwg
Z2ludCBlbmRPZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9
IGNvcmUodGV4dCk7Ci0KLSAgICBpbnQgZW5kID0gZW5kT2Zmc2V0OwotICAgIGlmIChlbmRPZmZz
ZXQgPT0gLTEpIHsKLSAgICAgICAgZW5kID0gY29yZU9iamVjdC0+c3RyaW5nVmFsdWUoKS5sZW5n
dGgoKTsKLSAgICAgICAgaWYgKCFlbmQpCi0gICAgICAgICAgICBlbmQgPSBjb3JlT2JqZWN0LT50
ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJldDsKLSAg
ICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICByZXQgPSBjb3JlT2Jq
ZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UoMCwgZW5kT2Zmc2V0KSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCk7Ci0gICAg
ICAgIGlmICghcmV0KQotICAgICAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+dGV4dFVuZGVyRWxl
bWVudCgpOwotICAgIH0KLQotICAgIGlmICghcmV0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIC8vIFRo
aXMgY2FuIGhhcHBlbiBhdCBsZWFzdCB3aXRoIGFub255bW91cyBSZW5kZXJCbG9ja3MgKGUuZy4g
Ym9keSB0ZXh0IGFtb25nc3QgcGFyYWdyYXBocykKLSAgICAgICAgcmV0ID0gU3RyaW5nKHRleHRG
b3JPYmplY3QoY29yZU9iamVjdCkpOwotICAgICAgICBpZiAoIWVuZCkKLSAgICAgICAgICAgIGVu
ZCA9IHJldC5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVmaXggYSBpdGVtIG51bWJlci9i
dWxsZXQgaWYgbmVlZGVkCi0gICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IExpc3RJ
dGVtUm9sZSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9ialJlbmRlcmVyID0gY29yZU9iamVj
dC0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKG9ialJlbmRlcmVyICYmIG9ialJlbmRlcmVyLT5p
c0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJM
aXN0SXRlbShvYmpSZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAgICAg
ICByZXQgPSBvYmpSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWFya2Vy
VGV4dCArIHJldCA6IHJldCArIG1hcmtlclRleHQ7Ci0gICAgICAgICAgICBpZiAoZW5kT2Zmc2V0
ID09IC0xKQotICAgICAgICAgICAgICAgIGVuZCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0ID0gcmV0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5k
IC0gc3RhcnRPZmZzZXQpOwotICAgIHJldHVybiBnX3N0cmR1cChyZXQudXRmOCgpLmRhdGEoKSk7
Ci19Ci0KLXN0YXRpYyBHYWlsVGV4dFV0aWwqIGdldEdhaWxUZXh0VXRpbEZvckF0ayhBdGtUZXh0
KiB0ZXh0T2JqZWN0KQotewotICAgIEdhaWxUZXh0VXRpbCogZ2FpbFRleHRVdGlsID0gZ2FpbF90
ZXh0X3V0aWxfbmV3KCk7Ci0gICAgZ2FpbF90ZXh0X3V0aWxfdGV4dF9zZXR1cChnYWlsVGV4dFV0
aWwsIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQodGV4dE9iamVjdCwgMCwgLTEpKTsK
LSAgICByZXR1cm4gZ2FpbFRleHRVdGlsOwotfQotCi1zdGF0aWMgUGFuZ29MYXlvdXQqIGdldFBh
bmdvTGF5b3V0Rm9yQXRrKEF0a1RleHQqIHRleHRPYmplY3QpCi17Ci0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dE9iamVjdCk7Ci0KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50
LT52aWV3KCktPmhvc3RXaW5kb3coKTsKLSAgICBpZiAoIWhvc3RXaW5kb3cpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIFBsYXRmb3JtUGFnZUNsaWVudCB3ZWJWaWV3ID0gaG9zdFdpbmRvdy0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgaWYgKCF3ZWJWaWV3KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIC8vIENyZWF0ZSBhIHN0cmluZyB3aXRoIHRoZSBsYXlvdXQgYXMgaXQgYXBwZWFycyBv
biB0aGUgc2NyZWVuCi0gICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IGd0a193aWRnZXRfY3JlYXRl
X3BhbmdvX2xheW91dChzdGF0aWNfY2FzdDxHdGtXaWRnZXQqPih3ZWJWaWV3KSwgdGV4dEZvck9i
amVjdChjb3JlT2JqZWN0KSk7Ci0gICAgcmV0dXJuIGxheW91dDsKLX0KLQotc3RhdGljIGdjaGFy
KiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldChBdGtUZXh0KiB0
ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3Rh
cnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxf
Z2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0
ayh0ZXh0KSwgR0FJTF9BRlRFUl9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQotc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF90ZXh0X2F0X29mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4
dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNl
dCkKLXsKLSAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGls
Rm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BVF9PRkZTRVQs
IGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQotc3Rh
dGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQo
QXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUs
IGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgcmV0dXJuIGdhaWxf
dGV4dF91dGlsX2dldF90ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0ZXh0KSwgZ2V0UGFuZ29M
YXlvdXRGb3JBdGsodGV4dCksIEdBSUxfQkVGT1JFX09GRlNFVCwgYm91bmRhcnlUeXBlLCBvZmZz
ZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ3VuaWNoYXIgd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2F0X29mZnNldChBdGtUZXh0KiB0ZXh0LCBn
aW50IG9mZnNldCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQoQXRr
VGV4dCogdGV4dCkKLXsKLSAgICAvLyBjb3JlT2JqZWN0IGlzIHRoZSB1bmlnbm9yZWQgb2JqZWN0
IHdob3NlIG9mZnNldCB0aGUgY2FsbGVyIGlzIHJlcXVlc3RpbmcuCi0gICAgLy8gZm9jdXNlZE9i
amVjdCBpcyB0aGUgb2JqZWN0IHdpdGggdGhlIGNhcmV0LiBJdCBpcyBsaWtlbHkgaWdub3JlZCAt
LSB1bmxlc3MgaXQncyBhIGxpbmsuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCA9IGNvcmUodGV4dCk7Ci0gICAgaWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgb2Zmc2V0OwotICAgIGlm
ICghb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9mZnNl
dCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNv
cmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xp
c3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVt
KHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLQotICAgICAgICAvLyBXZSBuZWVk
IHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KLSAgICAgICAg
b2Zmc2V0ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgLy8gVE9ETzogVmVy
aWZ5IHRoaXMgZm9yIFJUTCB0ZXh0LgotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBp
bnQgYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlbGluZVBv
c2l0aW9uIG9yaWdpbmF0ZXMgZnJvbSBSZW5kZXJPYmplY3QuY3BwIGFuZCB3YXMKLSAgICAvLyBy
ZW1vdmVkIGluIHI3MDA3Mi4gVGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGluY29ycmVjdCB0aG91
Z2gsIGJlY2F1c2UgdGhpcyBpcyBub3QgdGhlCi0gICAgLy8gYmFzZWxpbmUgb2YgdGhlIHVuZGVy
bHlpbmcgUmVuZGVyT2JqZWN0LCBidXQgb2YgdGhlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Ci0gICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyT2JqZWN0LT5maXJz
dExpbmVTdHlsZSgpLT5mb250TWV0cmljcygpOwotICAgIHJldHVybiBmb250TWV0cmljcy5hc2Nl
bnQoKSArIChyZW5kZXJPYmplY3QtPmZpcnN0TGluZVN0eWxlKCktPmNvbXB1dGVkTGluZUhlaWdo
dCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsKLX0KLQotc3RhdGljIEF0a0F0dHJpYnV0
ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCk7Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IDA7Ci0g
ICAgR093blB0cjxnY2hhcj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9u
dFNpemUoKSkpOwotICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3Rl
eHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU0laRSksIGJ1ZmZlci5nZXQoKSk7
Ci0KLSAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJnQ29sb3IucmVkKCksIGJnQ29sb3IuZ3JlZW4oKSwg
YmdDb2xvci5ibHVlKCkpKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVz
dWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9CR19DT0xPUiks
IGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgZmdDb2xvciA9IHN0eWxlLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKGZnQ29sb3IuaXNW
YWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnQ29sb3IucmVkKCksIGZnQ29s
b3IuZ3JlZW4oKSwgZmdDb2xvci5ibHVlKCkpKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmli
dXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGJhc2VsaW5lUG9z
aXRpb247Ci0gICAgYm9vbCBpbmNsdWRlUmlzZSA9IHRydWU7Ci0gICAgc3dpdGNoIChzdHlsZS0+
dmVydGljYWxBbGlnbigpKSB7Ci0gICAgY2FzZSBTVUI6Ci0gICAgICAgIGJhc2VsaW5lUG9zaXRp
b24gPSAtMSAqIGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNVUEVSOgotICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0g
YmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChyZW5kZXJlcik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQkFTRUxJTkU6Ci0gICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAwOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBpbmNsdWRlUmlzZSA9IGZhbHNlOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaW5jbHVkZVJpc2UpIHsKLSAgICAgICAg
YnVmZmVyLnNldChnX3N0cmR1cF9wcmludGYoIiVpIiwgYmFzZWxpbmVQb3NpdGlvbikpOwotICAg
ICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0
ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1JJU0UpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQot
ICAgIGlmICghc3R5bGUtPnRleHRJbmRlbnQoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGlu
dCBpbmRlbnRhdGlvbiA9IHN0eWxlLT50ZXh0SW5kZW50KCkuY2FsY1ZhbHVlKG9iamVjdC0+c2l6
ZSgpLndpZHRoKCkpOwotICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBp
bmRlbnRhdGlvbikpOwotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZl
ci5nZXQoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZv
bnQoKS5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKTsKLSAgICBpZiAoZm9udEZhbWlseU5hbWUu
bGVmdCg4KSA9PSAiLXdlYmtpdC0iKQotICAgICAgICBmb250RmFtaWx5TmFtZSA9IGZvbnRGYW1p
bHlOYW1lLnN1YnN0cmluZyg4KTsKLQotICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJl
c3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkFNSUxZX05B
TUUpLCBmb250RmFtaWx5TmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGludCBmb250V2VpZ2h0
ID0gLTE7Ci0gICAgc3dpdGNoIChzdHlsZS0+Zm9udCgpLndlaWdodCgpKSB7Ci0gICAgY2FzZSBG
b250V2VpZ2h0MTAwOgotICAgICAgICBmb250V2VpZ2h0ID0gMTAwOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSAyMDA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDMwMDoKLSAgICAgICAgZm9udFdlaWdodCA9
IDMwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAgICBm
b250V2VpZ2h0ID0gNDAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6
Ci0gICAgICAgIGZvbnRXZWlnaHQgPSA1MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFdlaWdodDYwMDoKLSAgICAgICAgZm9udFdlaWdodCA9IDYwMDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250V2VpZ2h0NzAwOgotICAgICAgICBmb250V2VpZ2h0ID0gNzAwOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSA4
MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDkwMDoKLSAgICAgICAgZm9u
dFdlaWdodCA9IDkwMDsKLSAgICB9Ci0gICAgaWYgKGZvbnRXZWlnaHQgPiAwKSB7Ci0gICAgICAg
IGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGZvbnRXZWlnaHQpKTsKLSAgICAgICAg
cmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0
X25hbWUoQVRLX1RFWFRfQVRUUl9XRUlHSFQpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQotICAg
IHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7Ci0gICAgY2FzZSBUQUFVVE86Ci0gICAgY2Fz
ZSBUQVNUQVJUOgotICAgIGNhc2UgVEFFTkQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTEVG
VDoKLSAgICBjYXNlIFdFQktJVF9MRUZUOgotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVU
b1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pV
U1RJRklDQVRJT04pLCAibGVmdCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJJR0hUOgot
ICAgIGNhc2UgV0VCS0lUX1JJR0hUOgotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1Nl
dChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJ
RklDQVRJT04pLCAicmlnaHQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDRU5URVI6Ci0g
ICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1Nl
dChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJ
RklDQVRJT04pLCAiY2VudGVyIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSlVTVElGWToK
LSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgImZpbGwiKTsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0
dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1VOREVSTElORSksIChzdHlsZS0+dGV4dERl
Y29yYXRpb24oKSAmIFVOREVSTElORSkgPyAic2luZ2xlIiA6ICJub25lIik7Ci0KLSAgICByZXN1
bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwgc3R5bGUtPmZvbnQoKS5pdGFsaWMoKSA/ICJpdGFsaWMi
IDogIm5vcm1hbCIpOwotCi0gICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBh
dGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdIKSwg
KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpICYgTElORV9USFJPVUdIKSA/ICJ0cnVlIiA6ICJmYWxz
ZSIpOwotCi0gICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9h
dHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9JTlZJU0lCTEUpLCAoc3R5bGUtPnZpc2li
aWxpdHkoKSA9PSBISURERU4pID8gInRydWUiIDogImZhbHNlIik7Ci0KLSAgICByZXN1bHQgPSBh
ZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtf
VEVYVF9BVFRSX0VESVRBQkxFKSwgb2JqZWN0LT5pc1JlYWRPbmx5KCkgPyAiZmFsc2UiIDogInRy
dWUiKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnaW50IGNvbXBhcmVBdHRy
aWJ1dGUoY29uc3QgQXRrQXR0cmlidXRlKiBhLCBjb25zdCBBdGtBdHRyaWJ1dGUqIGIpCi17Ci0g
ICAgcmV0dXJuIGdfc3RyY21wMChhLT5uYW1lLCBiLT5uYW1lKSB8fCBnX3N0cmNtcDAoYS0+dmFs
dWUsIGItPnZhbHVlKTsKLX0KLQotLy8gUmV0dXJucyBhbiBBdGtBdHRyaWJ1dGVTZXQgd2l0aCB0
aGUgZWxlbWVudHMgb2YgYTEgd2hpY2ggYXJlIGVpdGhlcgotLy8gbm90IHByZXNlbnQgb3IgZGlm
ZmVyZW50IGluIGEyLiAgTmVpdGhlciBhMSBub3IgYTIgc2hvdWxkIGJlIHVzZWQKLS8vIGFmdGVy
IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0
ZVNldERpZmZlcmVuY2UoQXRrQXR0cmlidXRlU2V0KiBhMSwgQXRrQXR0cmlidXRlU2V0KiBhMikK
LXsKLSAgICBpZiAoIWEyKQotICAgICAgICByZXR1cm4gYTE7Ci0KLSAgICBBdGtBdHRyaWJ1dGVT
ZXQqIGkgPSBhMTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGZvdW5kOwotICAgIEF0a0F0dHJpYnV0
ZVNldCogdG9EZWxldGUgPSAwOwotCi0gICAgd2hpbGUgKGkpIHsKLSAgICAgICAgZm91bmQgPSBn
X3NsaXN0X2ZpbmRfY3VzdG9tKGEyLCBpLT5kYXRhLCAoR0NvbXBhcmVGdW5jKWNvbXBhcmVBdHRy
aWJ1dGUpOwotICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgIEF0a0F0dHJpYnV0ZVNl
dCogdCA9IGktPm5leHQ7Ci0gICAgICAgICAgICB0b0RlbGV0ZSA9IGdfc2xpc3RfcHJlcGVuZCh0
b0RlbGV0ZSwgaS0+ZGF0YSk7Ci0gICAgICAgICAgICBhMSA9IGdfc2xpc3RfZGVsZXRlX2xpbmso
YTEsIGkpOwotICAgICAgICAgICAgaSA9IHQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
aSA9IGktPm5leHQ7Ci0gICAgfQotCi0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShhMik7Ci0g
ICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZSh0b0RlbGV0ZSk7Ci0gICAgcmV0dXJuIGExOwotfQot
Ci1zdGF0aWMgZ3VpbnQgYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgLy8gTm9uIHJlbmRlciBvYmplY3RzIGFyZSBub3Qg
dGFrZW4gaW50byBhY2NvdW50Ci0gICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZvciB0aG9zZSBvYmplY3Rz
IGltcGxlbWVudGluZyB0aGUgQXRrVGV4dCBpbnRlcmZhY2Ugd2UgdXNlIHRoZQotICAgIC8vIHdl
bGwga25vd24gQVBJIHRvIGFsd2F5cyBnZXQgdGhlIHRleHQgaW4gYSBjb25zaXN0ZW50IHdheQot
ICAgIEF0a09iamVjdCogYXRrT2JqID0gQVRLX09CSkVDVChvYmplY3QtPndyYXBwZXIoKSk7Ci0g
ICAgaWYgKEFUS19JU19URVhUKGF0a09iaikpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gdGV4
dCh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKGF0a09iaiksIDAsIC0x
KSk7Ci0gICAgICAgIHJldHVybiBnX3V0Zjhfc3RybGVuKHRleHQuZ2V0KCksIC0xKTsKLSAgICB9
Ci0KLSAgICAvLyBFdmVuIGlmIHdlIGRvbid0IGV4cG9zZSBsaXN0IG1hcmtlcnMgdG8gQXNzaXN0
aXZlCi0gICAgLy8gVGVjaG5vbG9naWVzLCB3ZSBuZWVkIHRvIGhhdmUgYSB3YXkgdG8gbWVhc3Vy
ZSB0aGVpciBsZW5ndGgKLSAgICAvLyBmb3IgdGhvc2UgY2FzZXMgd2hlbiBpdCdzIG5lZWRlZCB0
byB0YWtlIGl0IGludG8gYWNjb3VudAotICAgIC8vIHNlcGFyYXRlbHkgKGFzIGluIGdldEFjY2Vz
c2liaWxpdHlPYmplY3RGb3JPZmZzZXQpCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG9i
amVjdC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdE1h
cmtlcigpKSB7Ci0gICAgICAgIFJlbmRlckxpc3RNYXJrZXIqIG1hcmtlciA9IHRvUmVuZGVyTGlz
dE1hcmtlcihyZW5kZXJlcik7Ci0gICAgICAgIHJldHVybiBtYXJrZXItPnRleHQoKS5sZW5ndGgo
KSArIG1hcmtlci0+c3VmZml4KCkubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Rm9yT2Zmc2V0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgZ3VpbnQgb2Zm
c2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHJlc3VsdDsKLSAgICBndWludCBsZW5ndGggPSBhY2Nlc3NpYmls
aXR5T2JqZWN0TGVuZ3RoKG9iamVjdCk7Ci0gICAgaWYgKGxlbmd0aCA+IG9mZnNldCkgewotICAg
ICAgICAqc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICAqZW5kT2Zmc2V0ID0gbGVuZ3RoOwotICAg
ICAgICByZXN1bHQgPSBvYmplY3Q7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0
ID0gLTE7Ci0gICAgICAgICplbmRPZmZzZXQgPSAtMTsKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAg
ICB9Ci0KLSAgICBpZiAoIW9iamVjdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hp
bGQoKTsKLSAgICBndWludCBjdXJyZW50T2Zmc2V0ID0gMDsKLSAgICBndWludCBjaGlsZFBvc2l0
aW9uID0gMDsKLSAgICB3aGlsZSAoY2hpbGQgJiYgY3VycmVudE9mZnNldCA8PSBvZmZzZXQpIHsK
LSAgICAgICAgZ3VpbnQgY2hpbGRMZW5ndGggPSBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNo
aWxkKTsKLSAgICAgICAgY3VycmVudE9mZnNldCA9IGNoaWxkTGVuZ3RoICsgY2hpbGRQb3NpdGlv
bjsKLSAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHsKLSAgICAgICAgICAgIGdp
bnQgY2hpbGRTdGFydE9mZnNldDsKLSAgICAgICAgICAgIGdpbnQgY2hpbGRFbmRPZmZzZXQ7Ci0g
ICAgICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBncmFuZENoaWxkID0gZ2V0QWNj
ZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldChjaGlsZCwgb2Zmc2V0LWNoaWxkUG9zaXRpb24sICAm
Y2hpbGRTdGFydE9mZnNldCwgJmNoaWxkRW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjaGls
ZFN0YXJ0T2Zmc2V0ID49IDApIHsKLSAgICAgICAgICAgICAgICAqc3RhcnRPZmZzZXQgPSBjaGls
ZFN0YXJ0T2Zmc2V0ICsgY2hpbGRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAqZW5kT2Zmc2V0
ID0gY2hpbGRFbmRPZmZzZXQgKyBjaGlsZFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGdyYW5kQ2hpbGQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBjaGlsZFBvc2l0aW9uICs9IGNoaWxkTGVuZ3RoOwotICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRSdW5BdHRyaWJ1dGVzRnJvbUFjY2Vz
aWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBlbGVtZW50LCBnaW50IG9m
ZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0ICpjaGlsZCA9IGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZz
ZXQoZWxlbWVudCwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLSAgICBpZiAoIWNo
aWxkKSB7Ci0gICAgICAgICpzdGFydE9mZnNldCA9IC0xOwotICAgICAgICAqZW5kT2Zmc2V0ID0g
LTE7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEF0a0F0dHJpYnV0ZVNldCogZGVm
YXVsdEF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGVs
ZW1lbnQpOwotICAgIEF0a0F0dHJpYnV0ZVNldCogY2hpbGRBdHRyaWJ1dGVzID0gZ2V0QXR0cmli
dXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjaGlsZCk7Ci0KLSAgICByZXR1cm4gYXR0cmli
dXRlU2V0RGlmZmVyZW5jZShjaGlsZEF0dHJpYnV0ZXMsIGRlZmF1bHRBdHRyaWJ1dGVzKTsKLX0K
LQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcnVu
X2F0dHJpYnV0ZXMoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHN0YXJ0T2Zmc2V0
LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCA9IGNvcmUodGV4dCk7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQ7Ci0KLSAgICBpZiAo
IWNvcmVPYmplY3QpIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgKmVuZE9m
ZnNldCA9IGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQodGV4dCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGlmIChvZmZzZXQgPT0gLTEpCi0gICAgICAgIG9mZnNldCA9IGF0
a190ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dCk7Ci0KLSAgICByZXN1bHQgPSBnZXRSdW5BdHRy
aWJ1dGVzRnJvbUFjY2VzaWJpbGl0eU9iamVjdChjb3JlT2JqZWN0LCBvZmZzZXQsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwotCi0gICAgaWYgKCpzdGFydE9mZnNldCA8IDApIHsKLSAgICAgICAg
KnN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAqZW5kT2Zmc2V0ID0gb2Zmc2V0OwotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0
KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwot
ICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZVNl
dEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0
IHRleHRFeHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgbGVuZ3Ro
LCBBdGtDb29yZFR5cGUgY29vcmRzKQotewotICAgIGdjaGFyKiB0ZXh0Q29udGVudCA9IHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQodGV4dCwgc3RhcnRPZmZzZXQsIC0xKTsKLSAgICBn
aW50IHRleHRMZW5ndGggPSBnX3V0Zjhfc3RybGVuKHRleHRDb250ZW50LCAtMSk7Ci0KLSAgICAv
LyBUaGUgZmlyc3QgY2FzZSAoZW5kT2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywgYnV0IHNlZW1z
IGJyb2tlbiBmb3IgYWxsIEd0aysgYXBwcy4KLSAgICBnaW50IHJhbmdlTGVuZ3RoID0gbGVuZ3Ro
OwotICAgIGlmIChyYW5nZUxlbmd0aCA8IDAgfHwgcmFuZ2VMZW5ndGggPiB0ZXh0TGVuZ3RoKQot
ICAgICAgICByYW5nZUxlbmd0aCA9IHRleHRMZW5ndGg7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0KLSAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3Jl
T2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRPZmZzZXQsIHJh
bmdlTGVuZ3RoKSk7Ci0gICAgc3dpdGNoKGNvb3JkcykgewotICAgIGNhc2UgQVRLX1hZX1NDUkVF
TjoKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50
KCkpCi0gICAgICAgICAgICBleHRlbnRzID0gZG9jdW1lbnQtPnZpZXcoKS0+Y29udGVudHNUb1Nj
cmVlbihleHRlbnRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVEtfWFlfV0lORE9XOgot
ICAgICAgICAvLyBOby1vcAotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXh0
ZW50czsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFj
dGVyX2V4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHgsIGdpbnQqIHks
IGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCi17Ci0gICAg
SW50UmVjdCBleHRlbnRzID0gdGV4dEV4dGVudHModGV4dCwgb2Zmc2V0LCAxLCBjb29yZHMpOwot
ICAgICp4ID0gZXh0ZW50cy54KCk7Ci0gICAgKnkgPSBleHRlbnRzLnkoKTsKLSAgICAqd2lkdGgg
PSBleHRlbnRzLndpZHRoKCk7Ci0gICAgKmhlaWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoQXRr
VGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nvb3JkVHlw
ZSBjb29yZHMsIEF0a1RleHRSZWN0YW5nbGUqIHJlY3QpCi17Ci0gICAgSW50UmVjdCBleHRlbnRz
ID0gdGV4dEV4dGVudHModGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0
LCBjb29yZHMpOwotICAgIHJlY3QtPnggPSBleHRlbnRzLngoKTsKLSAgICByZWN0LT55ID0gZXh0
ZW50cy55KCk7Ci0gICAgcmVjdC0+d2lkdGggPSBleHRlbnRzLndpZHRoKCk7Ci0gICAgcmVjdC0+
aGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vz
c2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KEF0a1RleHQqIHRleHQpCi17Ci0gICAgcmV0
dXJuIGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY29yZSh0ZXh0KSk7Ci19Ci0KLXN0YXRpYyBn
aW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludChBdGtUZXh0KiB0
ZXh0LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlIGNvb3JkcykKLXsKLSAgICAvLyBGSVhN
RTogVXNlIHRoZSBBdGtDb29yZFR5cGUKLSAgICAvLyBUT0RPOiBJcyBpdCBjb3JyZWN0IHRvIGln
bm9yZSByYW5nZS5sZW5ndGg/Ci0gICAgSW50UG9pbnQgcG9zKHgsIHkpOwotICAgIFBsYWluVGV4
dFJhbmdlIHJhbmdlID0gY29yZSh0ZXh0KS0+ZG9BWFJhbmdlRm9yUG9zaXRpb24ocG9zKTsKLSAg
ICByZXR1cm4gcmFuZ2Uuc3RhcnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNl
dHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBnaW50JiBzdGFydE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0KQotewot
ICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgc2VsZWN0aW9uIGRvZXNu
J3QgYWZmZWN0IHRoZSBzZWxlY3RlZCBub2RlLgotICAgIGlmICghc2VsZWN0aW9uQmVsb25nc1Rv
T2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFdlIG5lZWQgdG8gZmluZCB0aGUgZXhhY3Qgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgaW4gdGhl
Ci0gICAgLy8gc2VsZWN0ZWQgbm9kZSB0aGF0IGludGVyc2VjdHMgdGhlIHNlbGVjdGlvbiwgdG8g
bGF0ZXIgb24gZ2V0Ci0gICAgLy8gdGhlIHJpZ2h0IHZhbHVlcyBmb3IgdGhlIGVmZmVjdGl2ZSBz
dGFydCBhbmQgZW5kIG9mZnNldHMuCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUG9z
aXRpb24gbm9kZVJhbmdlU3RhcnQ7Ci0gICAgUG9zaXRpb24gbm9kZVJhbmdlRW5kOwotICAgIE5v
ZGUqIG5vZGUgPSBjb3JlT2JqZWN0LT5ub2RlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxSYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVj
dGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgZmlyc3QKLSAgICAvLyBwb3Nz
aWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0Ci0gICAg
Ly8gbm9kZVJhbmdlU3RhcnQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxl
Y3Rpb24ncwotICAgIC8vIHN0YXJ0IHBvc2l0aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8gdGhlIG5v
ZGUgYW55d2F5KS4KLSAgICBOb2RlKiBmaXJzdExlYWZOb2RlID0gbm9kZS0+Zmlyc3REZXNjZW5k
YW50KCk7Ci0gICAgaWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShmaXJzdExlYWZOb2RlLCAw
LCBlYykpCi0gICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKGZpcnN0TGVhZk5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBz
ZWxSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZl
Y3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgbGFzdAotICAgIC8vIHBvc3NpYmxlIHBvc2l0
aW9uIGlzIGFsc28gaW4gdGhlIHNlbGVjdGlvbiwgd2UgbXVzdCBzZXQKLSAgICAvLyBub2RlUmFu
Z2VFbmQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncwotICAg
IC8vIGVuZCBwb3NpdGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCi0g
ICAgTm9kZSogbGFzdExlYWZOb2RlID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBpZiAo
c2VsUmFuZ2UtPmlzUG9pbnRJblJhbmdlKGxhc3RMZWFmTm9kZSwgbGFzdE9mZnNldEluTm9kZShs
YXN0TGVhZk5vZGUpLCBlYykpCi0gICAgICAgIG5vZGVSYW5nZUVuZCA9IGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUobGFzdExlYWZOb2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG5vZGVSYW5nZUVu
ZCA9IHNlbFJhbmdlLT5lbmRQb3NpdGlvbigpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9u
IG9mIHRoZSBzZWxlY3RlZCByYW5nZSBpbnNpZGUgdGhlIG9iamVjdC4KLSAgICBQb3NpdGlvbiBw
YXJlbnRGaXJzdFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VJblBhcmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9j
dW1lbnQoKSwgcGFyZW50Rmlyc3RQb3NpdGlvbiwgbm9kZVJhbmdlU3RhcnQpOwotCi0gICAgLy8g
U2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgotICAgIHN0YXJ0T2Zmc2V0ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZUluUGFyZW50LmdldCgpLCB0cnVlKTsKLQot
ICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1h
cmtlci4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIo
KTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAg
ICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJU
ZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICBzdGFydE9mZnNldCArPSBtYXJrZXJUZXh0Lmxlbmd0
aCgpOwotICAgIH0KLQotICAgIFJlZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFuZ2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKLSAgICBl
bmRPZmZzZXQgPSBzdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9kZVJh
bmdlLmdldCgpLCB0cnVlKTsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKEF0a1RleHQqIHRleHQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKTsKLQotICAgIC8vIE9ubHkgcmFuZ2Ugc2Vs
ZWN0aW9ucyBhcmUgbmVlZGVkIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZAotICAgIGlm
ICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMgZm9yIG5vdywgc28gdGhlcmUncyBvbmx5
Ci0gICAgLy8gdHdvIHBvc3NpYmlsaXRpZXMKLSAgICAvLyBBbHNvLCB3ZSBkb24ndCB3YW50IHRv
IGRvIGFueXRoaW5nIGlmIHRoZSBzZWxlY3Rpb24gZG9lcyBub3QKLSAgICAvLyBiZWxvbmcgdG8g
dGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvYmplY3QuIFdlIGhhdmUgdG8gY2hlY2sgc2luY2UKLSAg
ICAvLyB0aGVyZSdzIG5vIHdheSB0byBnZXQgdGhlIHNlbGVjdGlvbiBmb3IgYSBnaXZlbiBvYmpl
Y3QsIG9ubHkKLSAgICAvLyB0aGUgZ2xvYmFsIG9uZSAodGhlIEFQSSBpcyBhIGJpdCBjb25mdXNp
bmcpCi0gICAgcmV0dXJuIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBzZWxl
Y3Rpb24pID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KiBz
dGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIC8vIERlZmF1bHQgdmFsdWVzLCB1
bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZAotICAgICpzdGFydE9mZnNldCA9ICplbmRPZmZz
ZXQgPSAwOwotCi0gICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVj
dGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAg
IGlmIChzZWxlY3Rpb25OdW0pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gR2V0IHRoZSBv
ZmZzZXRzIG9mIHRoZSBzZWxlY3Rpb24gZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOwotICAgIGdldFNlbGVj
dGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uLCAqc3RhcnRPZmZzZXQs
ICplbmRPZmZzZXQpOwotCi0gICAgLy8gUmV0dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMgdGhhdCdz
IHRoZSBleHBlY3RlZCByZXN1bHQgZm9yCi0gICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhvZCB3aGVu
IHRoZXJlJ3Mgbm8gc2VsZWN0aW9uCi0gICAgaWYgKCpzdGFydE9mZnNldCA9PSAqZW5kT2Zmc2V0
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0
X2dldF90ZXh0KHRleHQsICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4
dCwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNldCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlv
bk51bSwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpCi17Ci0gICAgLy8gV2ViQ29y
ZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAg
ZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAgIGlmIChzZWxlY3Rpb25OdW0pCi0gICAg
ICAgIHJldHVybiBGQUxTRTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qg
PSBjb3JlKHRleHQpOwotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8vIENvbnNpZGVyIC0xIGFu
ZCBvdXQtb2YtYm91bmQgdmFsdWVzIGFuZCBjb3JyZWN0IHRoZW0gdG8gbGVuZ3RoCi0gICAgZ2lu
dCB0ZXh0Q291bnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQo
dGV4dCk7Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0IDwgMCB8fCBzdGFydE9mZnNldCA+IHRleHRDb3Vu
dCkKLSAgICAgICAgc3RhcnRPZmZzZXQgPSB0ZXh0Q291bnQ7Ci0gICAgaWYgKGVuZE9mZnNldCA8
IDAgfHwgZW5kT2Zmc2V0ID4gdGV4dENvdW50KQotICAgICAgICBlbmRPZmZzZXQgPSB0ZXh0Q291
bnQ7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0cyBmb3IgdGhlIGxpc3Qg
aXRlbSBtYXJrZXIuCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJl
bmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsK
LSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+
bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgaW50IG1hcmtlckxlbmd0aCA9IG1hcmtl
clRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChzdGFydE9mZnNldCA8IG1hcmtlckxlbmd0aCB8
fCBlbmRPZmZzZXQgPCBtYXJrZXJMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0K
LSAgICAgICAgc3RhcnRPZmZzZXQgLT0gbWFya2VyTGVuZ3RoOwotICAgICAgICBlbmRPZmZzZXQg
LT0gbWFya2VyTGVuZ3RoOwotICAgIH0KLQotICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZShz
dGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwotICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0
ZXh0UmFuZ2UpOwotICAgIGlmIChyYW5nZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEZBTFNF
OwotCi0gICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5n
ZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25O
dW0pCi17Ci0gICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlv
biwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAgIGlm
IChzZWxlY3Rpb25OdW0pCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8vIERvIG5vdGhp
bmcgaWYgY3VycmVudCBzZWxlY3Rpb24gZG9lc24ndCBiZWxvbmcgdG8gdGhlIG9iamVjdAotICAg
IGlmICghd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHRleHQpKQotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBTZXQgYSBuZXcgMC1zaXplZCBzZWxlY3Rpb24g
dG8gdGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBvcmRlcgotICAgIC8vIHRvIHNpbXVsYXRlIHNlbGVj
dGlvbiByZW1vdmFsIChHQUlMIHN0eWxlKQotICAgIGdpbnQgY2FyZXRPZmZzZXQgPSB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dCk7Ci0gICAgcmV0dXJuIHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbih0ZXh0LCBzZWxlY3Rpb25OdW0sIGNhcmV0
T2Zmc2V0LCBjYXJldE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQpCi17
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0KLSAg
ICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVj
dC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0o
KSkgewotICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVy
ZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICBpbnQgbWFya2VyTGVuZ3RoID0g
bWFya2VyVGV4dC5sZW5ndGgoKTsKLSAgICAgICAgaWYgKG9mZnNldCA8IG1hcmtlckxlbmd0aCkK
LSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVz
dCB0aGUgb2Zmc2V0IGZvciBsaXN0IGl0ZW1zLgotICAgICAgICBvZmZzZXQgLT0gbWFya2VyTGVu
Z3RoOwotICAgIH0KLQotICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZShvZmZzZXQsIDApOwot
ICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0
aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOwotICAgIGlmIChyYW5nZS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxl
UG9zaXRpb25SYW5nZShyYW5nZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lk
IGF0a190ZXh0X2ludGVyZmFjZV9pbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZh
Y2UtPmdldF90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dDsKLSAgICBpZmFj
ZS0+Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4
dF9hZnRlcl9vZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF90ZXh0X2F0X29mZnNldCA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfY2hhcmFj
dGVyX2F0X29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9hdF9v
ZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF90ZXh0X2JlZm9yZV9vZmZzZXQgPSB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF9jYXJldF9v
ZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQ7Ci0gICAgaWZh
Y2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1bl9h
dHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRfY2hh
cmFjdGVyX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0
ZW50czsKLSAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF9yYW5nZV9leHRlbnRzOwotICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2NvdW50ID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50OwotICAgIGlmYWNlLT5n
ZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfb2Zmc2V0X2F0
X3BvaW50OwotICAgIGlmYWNlLT5nZXRfbl9zZWxlY3Rpb25zID0gd2Via2l0X2FjY2Vzc2libGVf
dGV4dF9nZXRfbl9zZWxlY3Rpb25zOwotICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uID0gd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfc2VsZWN0aW9uOwotCi0gICAgLy8gc2V0IG1ldGhvZHMKLSAg
ICBpZmFjZS0+YWRkX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfYWRkX3NlbGVj
dGlvbjsKLSAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfcmVtb3ZlX3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+c2V0X3NlbGVjdGlvbiA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+c2V0X2NhcmV0X29mZnNl
dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNldDsKLX0KLQotLy8gRWRp
dGFibGVUZXh0Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90
ZXh0X3NldF9ydW5fYXR0cmlidXRlcyhBdGtFZGl0YWJsZVRleHQqIHRleHQsIEF0a0F0dHJpYnV0
ZVNldCogYXR0cmliX3NldCwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNldCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9zZXRfdGV4dF9jb250ZW50cyhBdGtF
ZGl0YWJsZVRleHQqIHRleHQsIGNvbnN0IGdjaGFyKiBzdHJpbmcpCi17Ci0gICAgLy8gRklYTUU6
IHN0cmluZyBudWxsY2hlY2s/Ci0gICAgY29yZSh0ZXh0KS0+c2V0VmFsdWUoU3RyaW5nOjpmcm9t
VVRGOChzdHJpbmcpKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFi
bGVfdGV4dF9pbnNlcnRfdGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGNvbnN0IGdjaGFyKiBz
dHJpbmcsIGdpbnQgbGVuZ3RoLCBnaW50KiBwb3NpdGlvbikKLXsKLSAgICAvLyBGSVhNRTogc3Ry
aW5nIG51bGxjaGVjaz8KLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBj
b3JlKHRleHQpOwotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZQotICAg
IC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2UoKnBvc2l0
aW9uLCAwKSk7Ci0gICAgLy9jb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHQoU3RyaW5nOjpmcm9t
VVRGOChzdHJpbmcpKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRS
YW5nZSgqcG9zaXRpb24sIDApKSk7Ci0gICAgY29yZU9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsK
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNldCBwb3NpdGlvbiB0byB0aGUgYWN0dWFsIGluc2Vy
dGVkIHRleHQgbGVuZ3RoLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFuIHRoYXQgcmVxdWVzdGVkLgot
ICAgIGlmIChkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPmluc2VydFRleHRXaXRob3V0U2Vu
ZGluZ1RleHRFdmVudChTdHJpbmc6OmZyb21VVEY4KHN0cmluZyksIGZhbHNlLCAwKSkKLSAgICAg
ICAgKnBvc2l0aW9uICs9IGxlbmd0aDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2li
bGVfZWRpdGFibGVfdGV4dF9jb3B5X3RleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50IHN0
YXJ0X3BvcywgZ2ludCBlbmRfcG9zKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfY3V0X3RleHQoQXRrRWRp
dGFibGVUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0X3BvcywgZ2ludCBlbmRfcG9zKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRh
YmxlX3RleHRfZGVsZXRlX3RleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0X3Bv
cywgZ2ludCBlbmRfcG9zKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qg
PSBjb3JlKHRleHQpOwotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZQot
ICAgIC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3Rh
cnRfcG9zLCBlbmRfcG9zIC0gc3RhcnRfcG9zKSk7Ci0gICAgLy9jb3JlT2JqZWN0LT5zZXRTZWxl
Y3RlZFRleHQoU3RyaW5nKCkpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVj
dC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9z
aXRpb25SYW5nZShjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWlu
VGV4dFJhbmdlKHN0YXJ0X3BvcywgZW5kX3BvcyAtIHN0YXJ0X3BvcykpKTsKLSAgICBjb3JlT2Jq
ZWN0LT5zZXRGb2N1c2VkKHRydWUpOwotICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+
cGVyZm9ybURlbGV0ZSgpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0
YWJsZV90ZXh0X3Bhc3RlX3RleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50IHBvc2l0aW9u
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a19lZGl0YWJs
ZV90ZXh0X2ludGVyZmFjZV9pbml0KEF0a0VkaXRhYmxlVGV4dElmYWNlKiBpZmFjZSkKLXsKLSAg
ICBpZmFjZS0+c2V0X3J1bl9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVf
dGV4dF9zZXRfcnVuX2F0dHJpYnV0ZXM7Ci0gICAgaWZhY2UtPnNldF90ZXh0X2NvbnRlbnRzID0g
d2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9zZXRfdGV4dF9jb250ZW50czsKLSAgICBp
ZmFjZS0+aW5zZXJ0X3RleHQgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2luc2Vy
dF90ZXh0OwotICAgIGlmYWNlLT5jb3B5X3RleHQgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJs
ZV90ZXh0X2NvcHlfdGV4dDsKLSAgICBpZmFjZS0+Y3V0X3RleHQgPSB3ZWJraXRfYWNjZXNzaWJs
ZV9lZGl0YWJsZV90ZXh0X2N1dF90ZXh0OwotICAgIGlmYWNlLT5kZWxldGVfdGV4dCA9IHdlYmtp
dF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQ7Ci0gICAgaWZhY2UtPnBhc3Rl
X3RleHQgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3Bhc3RlX3RleHQ7Ci19Ci0K
LXN0YXRpYyB2b2lkIGNvbnRlbnRzVG9BdGsoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgSW50UmVjdCByZWN0LCBnaW50KiB4LCBnaW50KiB5
LCBnaW50KiB3aWR0aCA9IDAsIGdpbnQqIGhlaWdodCA9IDApCi17Ci0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBjb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwotCi0gICAgaWYgKGZy
YW1lVmlldykgewotICAgICAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgewotICAgICAgICBjYXNlIEFU
S19YWV9XSU5ET1c6Ci0gICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2lu
ZG93KHJlY3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVRLX1hZX1NDUkVF
TjoKLSAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4ocmVjdCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh4KQotICAg
ICAgICAqeCA9IHJlY3QueCgpOwotICAgIGlmICh5KQotICAgICAgICAqeSA9IHJlY3QueSgpOwot
ICAgIGlmICh3aWR0aCkKLSAgICAgICAgKndpZHRoID0gcmVjdC53aWR0aCgpOwotICAgIGlmICho
ZWlnaHQpCi0gICAgICAgICpoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotfQotCi1zdGF0aWMgSW50
UG9pbnQgYXRrVG9Db250ZW50cyhBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBBdGtD
b29yZFR5cGUgY29vcmRUeXBlLCBnaW50IHgsIGdpbnQgeSkKLXsKLSAgICBJbnRQb2ludCBwb3Mo
eCwgeSk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3QtPmRvY3VtZW50
RnJhbWVWaWV3KCk7Ci0gICAgaWYgKGZyYW1lVmlldykgewotICAgICAgICBzd2l0Y2ggKGNvb3Jk
VHlwZSkgewotICAgICAgICBjYXNlIEFUS19YWV9TQ1JFRU46Ci0gICAgICAgICAgICByZXR1cm4g
ZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvcyk7Ci0gICAgICAgIGNhc2UgQVRLX1hZX1dJ
TkRPVzoKLSAgICAgICAgICAgIHJldHVybiBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMocG9z
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwb3M7Ci19Ci0KLXN0YXRpYyBBdGtP
YmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2lu
dChBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBj
b29yZFR5cGUpCi17Ci0gICAgSW50UG9pbnQgcG9zID0gYXRrVG9Db250ZW50cyhjb3JlKGNvbXBv
bmVudCksIGNvb3JkVHlwZSwgeCwgeSk7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
dGFyZ2V0ID0gY29yZShjb21wb25lbnQpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb3MpOwotICAg
IGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBnX29iamVjdF9yZWYodGFyZ2V0
LT53cmFwcGVyKCkpOwotICAgIHJldHVybiB0YXJnZXQtPndyYXBwZXIoKTsKLX0KLQotc3RhdGlj
IHZvaWQgd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dldF9leHRlbnRzKEF0a0NvbXBvbmVu
dCogY29tcG9uZW50LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0
LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQotewotICAgIEludFJlY3QgcmVjdCA9IGNvcmUoY29t
cG9uZW50KS0+ZWxlbWVudFJlY3QoKTsKLSAgICBjb250ZW50c1RvQXRrKGNvcmUoY29tcG9uZW50
KSwgY29vcmRUeXBlLCByZWN0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFiX2ZvY3VzKEF0a0NvbXBvbmVu
dCogY29tcG9uZW50KQotewotICAgIGNvcmUoY29tcG9uZW50KS0+c2V0Rm9jdXNlZCh0cnVlKTsK
LSAgICByZXR1cm4gY29yZShjb21wb25lbnQpLT5pc0ZvY3VzZWQoKTsKLX0KLQotc3RhdGljIHZv
aWQgYXRrX2NvbXBvbmVudF9pbnRlcmZhY2VfaW5pdChBdGtDb21wb25lbnRJZmFjZSogaWZhY2Up
Ci17Ci0gICAgaWZhY2UtPnJlZl9hY2Nlc3NpYmxlX2F0X3BvaW50ID0gd2Via2l0X2FjY2Vzc2li
bGVfY29tcG9uZW50X3JlZl9hY2Nlc3NpYmxlX2F0X3BvaW50OwotICAgIGlmYWNlLT5nZXRfZXh0
ZW50cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9nZXRfZXh0ZW50czsKLSAgICBpZmFj
ZS0+Z3JhYl9mb2N1cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFiX2ZvY3VzOwot
fQotCi0vLyBJbWFnZQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRf
aW1hZ2VfcG9zaXRpb24oQXRrSW1hZ2UqIGltYWdlLCBnaW50KiB4LCBnaW50KiB5LCBBdGtDb29y
ZFR5cGUgY29vcmRUeXBlKQotewotICAgIEludFJlY3QgcmVjdCA9IGNvcmUoaW1hZ2UpLT5lbGVt
ZW50UmVjdCgpOwotICAgIGNvbnRlbnRzVG9BdGsoY29yZShpbWFnZSksIGNvb3JkVHlwZSwgcmVj
dCwgeCwgeSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfaW1h
Z2VfZ2V0X2ltYWdlX2Rlc2NyaXB0aW9uKEF0a0ltYWdlKiBpbWFnZSkKLXsKLSAgICByZXR1cm4g
cmV0dXJuU3RyaW5nKGNvcmUoaW1hZ2UpLT5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9zaXplKEF0
a0ltYWdlKiBpbWFnZSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCkKLXsKLSAgICBJbnRTaXpl
IHNpemUgPSBjb3JlKGltYWdlKS0+c2l6ZSgpOwotCi0gICAgaWYgKHdpZHRoKQotICAgICAgICAq
d2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgaWYgKGhlaWdodCkKLSAgICAgICAgKmhlaWdodCA9
IHNpemUuaGVpZ2h0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a19pbWFnZV9pbnRlcmZhY2VfaW5p
dChBdGtJbWFnZUlmYWNlKiBpZmFjZSkKLXsKLSAgICBpZmFjZS0+Z2V0X2ltYWdlX3Bvc2l0aW9u
ID0gd2Via2l0X2FjY2Vzc2libGVfaW1hZ2VfZ2V0X2ltYWdlX3Bvc2l0aW9uOwotICAgIGlmYWNl
LT5nZXRfaW1hZ2VfZGVzY3JpcHRpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1h
Z2VfZGVzY3JpcHRpb247Ci0gICAgaWZhY2UtPmdldF9pbWFnZV9zaXplID0gd2Via2l0X2FjY2Vz
c2libGVfaW1hZ2VfZ2V0X2ltYWdlX3NpemU7Ci19Ci0KLS8vIFRhYmxlCi0KLXN0YXRpYyBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsKEF0a1RhYmxlKiB0YWJsZSwgZ3VpbnQgcm93LCBndWlu
dCBjb2x1bW4pCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRh
YmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUp
LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KTsKLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIGdpbnQgY2VsbEluZGV4KEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCwgQWNj
ZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxlKQotewotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VsbCdz
IGluZGV4IGFzIGlmIHdlIGhhZCBhIHRyYWRpdGlvbmFsIEd0aysgdGFibGUgaW4KLSAgICAvLyB3
aGljaCBjZWxscyBhcmUgYWxsIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgdGFibGUsIGFycmFuZ2Vk
IHJvdy1maXJzdC4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgYWxsQ2VsbHM7Ci0gICAgYXhUYWJsZS0+Y2VsbHMoYWxsQ2VsbHMpOwotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rvcjo6aXRlcmF0b3Ig
cG9zaXRpb247Ci0gICAgcG9zaXRpb24gPSBzdGQ6OmZpbmQoYWxsQ2VsbHMuYmVnaW4oKSwgYWxs
Q2VsbHMuZW5kKCksIGF4Q2VsbCk7Ci0gICAgaWYgKHBvc2l0aW9uID09IGFsbENlbGxzLmVuZCgp
KQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIHBvc2l0aW9uIC0gYWxsQ2VsbHMuYmVn
aW4oKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGxBdEluZGV4KEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBh
Y2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIGFsbENlbGxzOwotICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGUqPihhY2NUYWJsZSktPmNlbGxzKGFsbENlbGxzKTsKLSAgICAgICAgaWYgKDAg
PD0gaW5kZXggJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IGFsbENlbGxzLnNpemUo
KSkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjQ2VsbCA9IGFsbENlbGxz
LmF0KGluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGVDZWxsKj4oYWNjQ2VsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX3JlZl9h
dChBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50IGNvbHVtbikKLXsKLSAgICBBY2Nlc3Np
YmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNvbHVtbik7Ci0gICAg
aWYgKCFheENlbGwpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBheENlbGwtPndyYXBw
ZXIoKTsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2luZGV4
X2F0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQotewotICAgIEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsKLSAg
ICBBY2Nlc3NpYmlsaXR5VGFibGUqIGF4VGFibGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGUqPihjb3JlKHRhYmxlKSk7Ci0gICAgcmV0dXJuIGNlbGxJbmRleChheENlbGwsIGF4VGFi
bGUpOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1u
X2F0X2luZGV4KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKLXsKLSAgICBBY2Nlc3NpYmls
aXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsQXRJbmRleCh0YWJsZSwgaW5kZXgpOwotICAgIGlm
IChheENlbGwpewotICAgICAgICBwYWlyPGludCwgaW50PiBjb2x1bW5SYW5nZTsKLSAgICAgICAg
YXhDZWxsLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKLSAgICAgICAgcmV0dXJuIGNv
bHVtblJhbmdlLmZpcnN0OwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBnaW50
IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfYXRfaW5kZXgoQXRrVGFibGUqIHRhYmxl
LCBnaW50IGluZGV4KQotewotICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9IGNl
bGxBdEluZGV4KHRhYmxlLCBpbmRleCk7Ci0gICAgaWYgKGF4Q2VsbCl7Ci0gICAgICAgIHBhaXI8
aW50LCBpbnQ+IHJvd1JhbmdlOwotICAgICAgICBheENlbGwtPnJvd0luZGV4UmFuZ2Uocm93UmFu
Z2UpOwotICAgICAgICByZXR1cm4gcm93UmFuZ2UuZmlyc3Q7Ci0gICAgfQotICAgIHJldHVybiAt
MTsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X25fY29sdW1u
cyhBdGtUYWJsZSogdGFibGUpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUg
PSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4o
YWNjVGFibGUpLT5jb2x1bW5Db3VudCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgZ2lu
dCB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfbl9yb3dzKEF0a1RhYmxlKiB0YWJsZSkKLXsK
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlm
IChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSktPnJvd0NvdW50KCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxl
X2dldF9jb2x1bW5fZXh0ZW50X2F0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29s
dW1uKQotewotICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9IGNlbGwodGFibGUs
IHJvdywgY29sdW1uKTsKLSAgICBpZiAoYXhDZWxsKSB7Ci0gICAgICAgIHBhaXI8aW50LCBpbnQ+
IGNvbHVtblJhbmdlOwotICAgICAgICBheENlbGwtPmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUmFu
Z2UpOwotICAgICAgICByZXR1cm4gY29sdW1uUmFuZ2Uuc2Vjb25kOwotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19l
eHRlbnRfYXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCi17Ci0gICAg
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4p
OwotICAgIGlmIChheENlbGwpIHsKLSAgICAgICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7Ci0g
ICAgICAgIGF4Q2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7Ci0gICAgICAgIHJldHVybiBy
b3dSYW5nZS5zZWNvbmQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgQXRrT2Jq
ZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2hlYWRlcihBdGtUYWJsZSog
dGFibGUsIGdpbnQgY29sdW1uKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxl
ID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgYWxsQ29sdW1uSGVhZGVyczsKLSAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5jb2x1bW5IZWFkZXJzKGFsbENvbHVtbkhlYWRlcnMp
OwotICAgICAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCA9IGFsbENvbHVtbkhlYWRlcnMuc2l6ZSgp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY29sdW1uQ291bnQ7ICsraykgewot
ICAgICAgICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFuZ2U7Ci0gICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbCo+KGFsbENvbHVtbkhlYWRlcnMuYXQoaykuZ2V0KCkpOwotICAgICAgICAgICAgY2VsbC0+
Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7Ci0gICAgICAgICAgICBpZiAoY29sdW1uUmFu
Z2UuZmlyc3QgPD0gY29sdW1uICYmIGNvbHVtbiA8IGNvbHVtblJhbmdlLmZpcnN0ICsgY29sdW1u
UmFuZ2Uuc2Vjb25kKQotICAgICAgICAgICAgICAgIHJldHVybiBhbGxDb2x1bW5IZWFkZXJzW2td
LT53cmFwcGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfaGVhZGVyKEF0a1Rh
YmxlKiB0YWJsZSwgZ2ludCByb3cpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFi
bGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdCgpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBhbGxSb3dIZWFkZXJzOwotICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3Np
YmlsaXR5VGFibGUqPihhY2NUYWJsZSktPnJvd0hlYWRlcnMoYWxsUm93SGVhZGVycyk7Ci0gICAg
ICAgIHVuc2lnbmVkIHJvd0NvdW50ID0gYWxsUm93SGVhZGVycy5zaXplKCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCByb3dDb3VudDsgKytrKSB7Ci0gICAgICAgICAgICBwYWly
PGludCwgaW50PiByb3dSYW5nZTsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwq
IGNlbGwgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4oYWxsUm93SGVhZGVy
cy5hdChrKS5nZXQoKSk7Ci0gICAgICAgICAgICBjZWxsLT5yb3dJbmRleFJhbmdlKHJvd1Jhbmdl
KTsKLSAgICAgICAgICAgIGlmIChyb3dSYW5nZS5maXJzdCA8PSByb3cgJiYgcm93IDwgcm93UmFu
Z2UuZmlyc3QgKyByb3dSYW5nZS5zZWNvbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFsbFJv
d0hlYWRlcnNba10tPndyYXBwZXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NhcHRp
b24oQXRrVGFibGUqIHRhYmxlKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxl
ID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gYWNjVGFibGUtPm5vZGUoKTsKLSAgICAg
ICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlVGFnKSkgewot
ICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24gPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVFbGVtZW50Kj4obm9kZSktPmNhcHRpb24oKTsKLSAgICAgICAgICAgIGlmIChj
YXB0aW9uKQotICAgICAgICAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaXJz
dEFjY2Vzc2libGVPYmplY3RGcm9tTm9kZShjYXB0aW9uLT5yZW5kZXJlcigpLT5ub2RlKCkpLT53
cmFwcGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBj
b25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVtbl9kZXNjcmlwdGlv
bihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQotewotICAgIEF0a09iamVjdCogY29sdW1u
SGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKHRhYmxlLCBjb2x1bW4pOwotICAg
IGlmIChjb2x1bW5IZWFkZXIgJiYgQVRLX0lTX1RFWFQoY29sdW1uSGVhZGVyKSkKLSAgICAgICAg
cmV0dXJuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQoY29sdW1uSGVh
ZGVyKSwgMCwgLTEpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciog
d2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlwdGlvbihBdGtUYWJsZSogdGFi
bGUsIGdpbnQgcm93KQotewotICAgIEF0a09iamVjdCogcm93SGVhZGVyID0gYXRrX3RhYmxlX2dl
dF9yb3dfaGVhZGVyKHRhYmxlLCByb3cpOwotICAgIGlmIChyb3dIZWFkZXIgJiYgQVRLX0lTX1RF
WFQocm93SGVhZGVyKSkKLSAgICAgICAgcmV0dXJuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X3RleHQoQVRLX1RFWFQocm93SGVhZGVyKSwgMCwgLTEpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXN0YXRpYyB2b2lkIGF0a190YWJsZV9pbnRlcmZhY2VfaW5pdChBdGtUYWJsZUlmYWNlKiBpZmFj
ZSkKLXsKLSAgICBpZmFjZS0+cmVmX2F0ID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfcmVmX2F0
OwotICAgIGlmYWNlLT5nZXRfaW5kZXhfYXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRf
aW5kZXhfYXQ7Ci0gICAgaWZhY2UtPmdldF9jb2x1bW5fYXRfaW5kZXggPSB3ZWJraXRfYWNjZXNz
aWJsZV90YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4OwotICAgIGlmYWNlLT5nZXRfcm93X2F0X2lu
ZGV4ID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19hdF9pbmRleDsKLSAgICBpZmFj
ZS0+Z2V0X25fY29sdW1ucyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9uX2NvbHVtbnM7
Ci0gICAgaWZhY2UtPmdldF9uX3Jvd3MgPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfbl9y
b3dzOwotICAgIGlmYWNlLT5nZXRfY29sdW1uX2V4dGVudF9hdCA9IHdlYmtpdF9hY2Nlc3NpYmxl
X3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0OwotICAgIGlmYWNlLT5nZXRfcm93X2V4dGVudF9h
dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0OwotICAgIGlmYWNl
LT5nZXRfY29sdW1uX2hlYWRlciA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5f
aGVhZGVyOwotICAgIGlmYWNlLT5nZXRfcm93X2hlYWRlciA9IHdlYmtpdF9hY2Nlc3NpYmxlX3Rh
YmxlX2dldF9yb3dfaGVhZGVyOwotICAgIGlmYWNlLT5nZXRfY2FwdGlvbiA9IHdlYmtpdF9hY2Nl
c3NpYmxlX3RhYmxlX2dldF9jYXB0aW9uOwotICAgIGlmYWNlLT5nZXRfY29sdW1uX2Rlc2NyaXB0
aW9uID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVtbl9kZXNjcmlwdGlvbjsKLSAg
ICBpZmFjZS0+Z2V0X3Jvd19kZXNjcmlwdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dl
dF9yb3dfZGVzY3JpcHRpb247Ci19Ci0KLXN0YXRpYyBBdGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vz
c2libGVIeXBlcnRleHRHZXRMaW5rKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGluZGV4
KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBjaGlsZHJlbiA9IGNvcmUoaHlwZXJ0ZXh0KS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoaW5kZXgg
PCAwIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gY2hpbGRyZW4uc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGdpbnQgY3VycmVudExpbmsgPSAtMTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZUNoaWxkID0gY2hpbGRyZW4uYXQoaSkuZ2V0KCk7Ci0gICAg
ICAgIGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAg
ICAgIEF0a09iamVjdCogYXhPYmplY3QgPSBjb3JlQ2hpbGQtPndyYXBwZXIoKTsKLSAgICAgICAg
ICAgIGlmICghYXhPYmplY3QgfHwgIUFUS19JU19IWVBFUkxJTktfSU1QTChheE9iamVjdCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGN1cnJlbnRMaW5rKys7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXggIT0gY3VycmVudExpbmspCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIHJldHVybiBhdGtfaHlwZXJsaW5rX2ltcGxfZ2V0X2h5cGVy
bGluayhBVEtfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0
R2V0TkxpbmtzKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0KQotewotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmUoaHlwZXJ0
ZXh0KS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBnaW50IGxpbmtzRm91bmQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZUNoaWxkID0gY2hpbGRyZW4uYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGlmICghY29yZUNo
aWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAgIEF0a09iamVjdCog
YXhPYmplY3QgPSBjb3JlQ2hpbGQtPndyYXBwZXIoKTsKLSAgICAgICAgICAgIGlmIChheE9iamVj
dCAmJiBBVEtfSVNfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKQotICAgICAgICAgICAgICAgIGxp
bmtzRm91bmQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsaW5rc0ZvdW5kOwot
fQotCi1zdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4KEF0
a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGNoYXJJbmRleCkKLXsKLSAgICBzaXplX3QgbGlu
a3NDb3VudCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MoaHlwZXJ0ZXh0KTsK
LSAgICBpZiAoIWxpbmtzQ291bnQpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGlua3NDb3VudDsgaSsrKSB7Ci0gICAgICAgIEF0a0h5cGVybGluayog
aHlwZXJsaW5rID0gQVRLX0hZUEVSTElOSyh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlu
ayhoeXBlcnRleHQsIGkpKTsKLSAgICAgICAgZ2ludCBzdGFydEluZGV4ID0gYXRrX2h5cGVybGlu
a19nZXRfc3RhcnRfaW5kZXgoaHlwZXJsaW5rKTsKLSAgICAgICAgZ2ludCBlbmRJbmRleCA9IGF0
a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoeXBlcmxpbmspOwotCi0gICAgICAgIC8vIENoZWNr
IGlmIHRoZSBjaGFyIGluZGV4IGluIHRoZSBsaW5rJ3Mgb2Zmc2V0IHJhbmdlCi0gICAgICAgIGlm
IChzdGFydEluZGV4IDw9IGNoYXJJbmRleCAmJiBjaGFySW5kZXggPCBlbmRJbmRleCkKLSAgICAg
ICAgICAgIHJldHVybiBpOwotICAgIH0KLQotICAgIC8vIE5vdCBmb3VuZCBpZiByZWFjaGVkCi0g
ICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgdm9pZCBhdGtIeXBlcnRleHRJbnRlcmZhY2VJbml0
KEF0a0h5cGVydGV4dElmYWNlKiBpZmFjZSkKLXsKLSAgICBpZmFjZS0+Z2V0X2xpbmsgPSB3ZWJr
aXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluazsKLSAgICBpZmFjZS0+Z2V0X25fbGlua3MgPSB3
ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzOwotICAgIGlmYWNlLT5nZXRfbGlua19p
bmRleCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rSW5kZXg7Ci19Ci0KLXN0YXRp
YyBBdGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsR2V0SHlwZXJsaW5r
KEF0a0h5cGVybGlua0ltcGwqIGh5cGVybGluaykKLXsKLSAgICBBdGtIeXBlcmxpbmsqIGh5cGVy
bGlua09iamVjdCA9IEFUS19IWVBFUkxJTksoZ19vYmplY3RfZ2V0X3FkYXRhKEdfT0JKRUNUKGh5
cGVybGluayksIGh5cGVybGlua09iamVjdFF1YXJrKSk7Ci0gICAgaWYgKCFoeXBlcmxpbmtPYmpl
Y3QpIHsKLSAgICAgICAgaHlwZXJsaW5rT2JqZWN0ID0gQVRLX0hZUEVSTElOSyh3ZWJraXRBY2Nl
c3NpYmxlSHlwZXJsaW5rTmV3KGh5cGVybGluaykpOwotICAgICAgICBnX29iamVjdF9zZXRfcWRh
dGEoR19PQkpFQ1QoaHlwZXJsaW5rKSwgaHlwZXJsaW5rT2JqZWN0UXVhcmssIGh5cGVybGlua09i
amVjdCk7Ci0gICAgfQotICAgIHJldHVybiBoeXBlcmxpbmtPYmplY3Q7Ci19Ci0KLXN0YXRpYyB2
b2lkIGF0a0h5cGVybGlua0ltcGxJbnRlcmZhY2VJbml0KEF0a0h5cGVybGlua0ltcGxJZmFjZSog
aWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF9oeXBlcmxpbmsgPSB3ZWJraXRBY2Nlc3NpYmxlSHlw
ZXJsaW5rSW1wbEdldEh5cGVybGluazsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyKiBkb2N1bWVu
dEF0dHJpYnV0ZVZhbHVlKEF0a0RvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgZ2NoYXIqIGF0dHJp
YnV0ZSkKLXsKLSAgICBEb2N1bWVudCogY29yZURvY3VtZW50ID0gY29yZShkb2N1bWVudCktPmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFjb3JlRG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgU3RyaW5nIHZhbHVlID0gU3RyaW5nKCk7Ci0gICAgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAo
YXR0cmlidXRlLCAiRG9jVHlwZSIpICYmIGNvcmVEb2N1bWVudC0+ZG9jdHlwZSgpKQotICAgICAg
ICB2YWx1ZSA9IGNvcmVEb2N1bWVudC0+ZG9jdHlwZSgpLT5uYW1lKCk7Ci0gICAgZWxzZSBpZiAo
IWdfYXNjaWlfc3RyY2FzZWNtcChhdHRyaWJ1dGUsICJFbmNvZGluZyIpKQotICAgICAgICB2YWx1
ZSA9IGNvcmVEb2N1bWVudC0+Y2hhcnNldCgpOwotICAgIGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNh
c2VjbXAoYXR0cmlidXRlLCAiVVJJIikpCi0gICAgICAgIHZhbHVlID0gY29yZURvY3VtZW50LT5k
b2N1bWVudFVSSSgpOwotICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
cmV0dXJuU3RyaW5nKHZhbHVlKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qg
Z2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWUoQXRr
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBnY2hhciogYXR0cmlidXRlKQotewotICAgIHJldHVy
biBkb2N1bWVudEF0dHJpYnV0ZVZhbHVlKGRvY3VtZW50LCBhdHRyaWJ1dGUpOwotfQotCi1zdGF0
aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfYXR0cmli
dXRlcyhBdGtEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBhdHRy
aWJ1dGVTZXQgPSAwOwotICAgIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVzIFtdID0geyJEb2NUeXBl
IiwgIkVuY29kaW5nIiwgIlVSSSJ9OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdf
Tl9FTEVNRU5UUyhhdHRyaWJ1dGVzKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyKiB2YWx1
ZSA9IGRvY3VtZW50QXR0cmlidXRlVmFsdWUoZG9jdW1lbnQsIGF0dHJpYnV0ZXNbaV0pOwotICAg
ICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRBdHRyaWJ1dGVU
b1NldChhdHRyaWJ1dGVTZXQsIGF0dHJpYnV0ZXNbaV0sIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gYXR0cmlidXRlU2V0OwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nl
c3NpYmxlX2RvY3VtZW50X2dldF9sb2NhbGUoQXRrRG9jdW1lbnQqIGRvY3VtZW50KQotewotCi0g
ICAgLy8gVE9ETzogU2hvdWxkIHdlIGZhbGwgYmFjayBvbiBsYW5nIHhtbDpsYW5nIHdoZW4gdGhl
IGZvbGxvd2luZyBjb21lcyB1cCBlbXB0eT8KLSAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBjb3JlKGRv
Y3VtZW50KS0+bGFuZ3VhZ2UoKTsKLSAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHJldHVyblN0cmluZyhsYW5ndWFnZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIHZvaWQgYXRrX2RvY3VtZW50X2ludGVyZmFjZV9pbml0KEF0a0RvY3VtZW50SWZhY2Uq
IGlmYWNlKQotewotICAgIGlmYWNlLT5nZXRfZG9jdW1lbnRfYXR0cmlidXRlX3ZhbHVlID0gd2Vi
a2l0X2FjY2Vzc2libGVfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZTsKLSAgICBpZmFjZS0+
Z2V0X2RvY3VtZW50X2F0dHJpYnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRf
YXR0cmlidXRlczsKLSAgICBpZmFjZS0+Z2V0X2RvY3VtZW50X2xvY2FsZSA9IHdlYmtpdF9hY2Nl
c3NpYmxlX2RvY3VtZW50X2dldF9sb2NhbGU7Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0QWNj
ZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFs
dWUpCi17Ci0gICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihHVmFsdWUpKTsKLSAgICBnX3Zh
bHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsKLSAgICBnX3ZhbHVlX3NldF9kb3VibGUo
Z1ZhbHVlLCBjb3JlKHZhbHVlKS0+dmFsdWVGb3JSYW5nZSgpKTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWF4aW11bVZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgR1Zh
bHVlKiBnVmFsdWUpCi17Ci0gICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihHVmFsdWUpKTsK
LSAgICBnX3ZhbHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsKLSAgICBnX3ZhbHVlX3Nl
dF9kb3VibGUoZ1ZhbHVlLCBjb3JlKHZhbHVlKS0+bWF4VmFsdWVGb3JSYW5nZSgpKTsKLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bVZhbHVlKEF0a1ZhbHVl
KiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCi17Ci0gICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVv
ZihHVmFsdWUpKTsKLSAgICBnX3ZhbHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsKLSAg
ICBnX3ZhbHVlX3NldF9kb3VibGUoZ1ZhbHVlLCBjb3JlKHZhbHVlKS0+bWluVmFsdWVGb3JSYW5n
ZSgpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVWYWx1ZVNldEN1cnJl
bnRWYWx1ZShBdGtWYWx1ZSogdmFsdWUsIGNvbnN0IEdWYWx1ZSogZ1ZhbHVlKQotewotICAgIGlm
ICghR19WQUxVRV9IT0xEU19ET1VCTEUoZ1ZhbHVlKSAmJiAhR19WQUxVRV9IT0xEU19JTlQoZ1Zh
bHVlKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCA9IGNvcmUodmFsdWUpOwotICAgIGlmICghY29yZU9iamVjdC0+Y2FuU2V0VmFs
dWVBdHRyaWJ1dGUoKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaWYgKEdfVkFMVUVf
SE9MRFNfRE9VQkxFKGdWYWx1ZSkpCi0gICAgICAgIGNvcmVPYmplY3QtPnNldFZhbHVlKFN0cmlu
Zzo6bnVtYmVyKGdfdmFsdWVfZ2V0X2RvdWJsZShnVmFsdWUpKSk7Ci0gICAgZWxzZQotICAgICAg
ICBjb3JlT2JqZWN0LT5zZXRWYWx1ZShTdHJpbmc6Om51bWJlcihnX3ZhbHVlX2dldF9pbnQoZ1Zh
bHVlKSkpOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEFjY2Vz
c2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1lbnQoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdW
YWx1ZSkKLXsKLSAgICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOwotICAgIGdf
dmFsdWVfaW5pdChnVmFsdWUsIEdfVFlQRV9ET1VCTEUpOwotCi0gICAgLy8gVGhlcmUncyBub3Qg
c3VjaCBhIHRoaW5nIGluIHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0aW9uLCB0aHVzIHJldHVybiB6
ZXJvLgotICAgIGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUsIDAuMCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGF0a1ZhbHVlSW50ZXJmYWNlSW5pdChBdGtWYWx1ZUlmYWNlKiBpZmFjZSkKLXsKLSAgICBp
ZmFjZS0+Z2V0X2N1cnJlbnRfdmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJyZW50
VmFsdWU7Ci0gICAgaWZhY2UtPmdldF9tYXhpbXVtX3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZh
bHVlR2V0TWF4aW11bVZhbHVlOwotICAgIGlmYWNlLT5nZXRfbWluaW11bV92YWx1ZSA9IHdlYmtp
dEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1WYWx1ZTsKLSAgICBpZmFjZS0+c2V0X2N1cnJlbnRf
dmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVTZXRDdXJyZW50VmFsdWU7Ci0gICAgaWZhY2Ut
PmdldF9taW5pbXVtX2luY3JlbWVudCA9IHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1J
bmNyZW1lbnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2Vz
SW5pdEZ1bmN0aW9uc1tdID0gewotICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a19hY3Rpb25f
aW50ZXJmYWNlX2luaXQsCi0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKLSAg
ICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfc2VsZWN0aW9uX2ludGVyZmFjZV9pbml0LAotICAg
ICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1
bmMpYXRrX2VkaXRhYmxlX3RleHRfaW50ZXJmYWNlX2luaXQsCi0gICAgIChHSW50ZXJmYWNlRmlu
YWxpemVGdW5jKSAwLCAwfSwKLSAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfdGV4dF9pbnRl
cmZhY2VfaW5pdCwKLSAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAotICAgIHso
R0ludGVyZmFjZUluaXRGdW5jKWF0a19jb21wb25lbnRfaW50ZXJmYWNlX2luaXQsCi0gICAgIChH
SW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKLSAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylh
dGtfaW1hZ2VfaW50ZXJmYWNlX2luaXQsCi0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAw
LCAwfSwKLSAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfdGFibGVfaW50ZXJmYWNlX2luaXQs
Ci0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKLSAgICB7KEdJbnRlcmZhY2VJ
bml0RnVuYylhdGtIeXBlcnRleHRJbnRlcmZhY2VJbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFs
aXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrSHlwZXJsaW5rSW1w
bEludGVyZmFjZUluaXQsCi0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKLSAg
ICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfZG9jdW1lbnRfaW50ZXJmYWNlX2luaXQsCi0gICAg
IChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKLSAgICB7KEdJbnRlcmZhY2VJbml0RnVu
YylhdGtWYWx1ZUludGVyZmFjZUluaXQsCi0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAw
LCAwfQotfTsKLQotZW51bSBXQUlUeXBlIHsKLSAgICBXQUlfQUNUSU9OLAotICAgIFdBSV9TRUxF
Q1RJT04sCi0gICAgV0FJX0VESVRBQkxFX1RFWFQsCi0gICAgV0FJX1RFWFQsCi0gICAgV0FJX0NP
TVBPTkVOVCwKLSAgICBXQUlfSU1BR0UsCi0gICAgV0FJX1RBQkxFLAotICAgIFdBSV9IWVBFUlRF
WFQsCi0gICAgV0FJX0hZUEVSTElOSywKLSAgICBXQUlfRE9DVU1FTlQsCi0gICAgV0FJX1ZBTFVF
LAotfTsKLQotc3RhdGljIEdUeXBlIEdldEF0a0ludGVyZmFjZVR5cGVGcm9tV0FJVHlwZShXQUlU
eXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBXQUlfQUNUSU9OOgot
ICAgICAgICByZXR1cm4gQVRLX1RZUEVfQUNUSU9OOwotICAgIGNhc2UgV0FJX1NFTEVDVElPTjoK
LSAgICAgICAgcmV0dXJuIEFUS19UWVBFX1NFTEVDVElPTjsKLSAgICBjYXNlIFdBSV9FRElUQUJM
RV9URVhUOgotICAgICAgICByZXR1cm4gQVRLX1RZUEVfRURJVEFCTEVfVEVYVDsKLSAgICBjYXNl
IFdBSV9URVhUOgotICAgICAgICByZXR1cm4gQVRLX1RZUEVfVEVYVDsKLSAgICBjYXNlIFdBSV9D
T01QT05FTlQ6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9DT01QT05FTlQ7Ci0gICAgY2FzZSBX
QUlfSU1BR0U6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9JTUFHRTsKLSAgICBjYXNlIFdBSV9U
QUJMRToKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX1RBQkxFOwotICAgIGNhc2UgV0FJX0hZUEVS
VEVYVDoKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX0hZUEVSVEVYVDsKLSAgICBjYXNlIFdBSV9I
WVBFUkxJTks6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9IWVBFUkxJTktfSU1QTDsKLSAgICBj
YXNlIFdBSV9ET0NVTUVOVDoKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX0RPQ1VNRU5UOwotICAg
IGNhc2UgV0FJX1ZBTFVFOgotICAgICAgICByZXR1cm4gQVRLX1RZUEVfVkFMVUU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEdfVFlQRV9JTlZBTElEOwotfQotCi1zdGF0aWMgZ3VpbnQxNiBnZXRJbnRl
cmZhY2VNYXNrRnJvbU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQotewot
ICAgIGd1aW50MTYgaW50ZXJmYWNlTWFzayA9IDA7Ci0KLSAgICAvLyBDb21wb25lbnQgaW50ZXJm
YWNlIGlzIGFsd2F5cyBzdXBwb3J0ZWQKLSAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0NP
TVBPTkVOVDsKLQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBjb3JlT2JqZWN0LT5yb2xl
VmFsdWUoKTsKLQotICAgIC8vIEFjdGlvbgotICAgIC8vIEFzIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgQXRrQWN0aW9uIGludGVyZmFjZSBpcyBhIHZlcnkKLSAgICAvLyBiYXNpYyBvbmUgKGp1
c3QgcmVsYXlzIGluIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGVhY2gKLSAgICAv
LyBvYmplY3QsIGFuZCBvbmx5IHN1cHBvcnRzIGhhdmluZyBvbmUgYWN0aW9uIHBlciBvYmplY3Qp
LCBpdCBpcwotICAgIC8vIGJldHRlciBqdXN0IHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSBm
b3IgZXZlcnkgaW5zdGFuY2Ugb2YKLSAgICAvLyB0aGUgV2ViS2l0QWNjZXNzaWJsZSBjbGFzcyBh
bmQgbGV0IFdlYkNvcmUgZGVjaWRlIHdoYXQgdG8gZG8uCi0gICAgaW50ZXJmYWNlTWFzayB8PSAx
IDw8IFdBSV9BQ1RJT047Ci0KLSAgICAvLyBTZWxlY3Rpb24KLSAgICBpZiAoY29yZU9iamVjdC0+
aXNMaXN0Qm94KCkgfHwgY29yZU9iamVjdC0+aXNNZW51TGlzdCgpKQotICAgICAgICBpbnRlcmZh
Y2VNYXNrIHw9IDEgPDwgV0FJX1NFTEVDVElPTjsKLQotICAgIC8vIEdldCByZW5kZXJlciBpZiBh
dmFpbGFibGUuCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IDA7Ci0gICAgaWYgKGNvcmVP
YmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0KLSAgICAvLyBIeXBlcmxpbmsgKGxpbmtzIGFuZCBl
bWJlZGRlZCBvYmplY3RzKS4KLSAgICBpZiAoY29yZU9iamVjdC0+aXNMaW5rKCkgfHwgKHJlbmRl
cmVyICYmIHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpKQotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9
IDEgPDwgV0FJX0hZUEVSTElOSzsKLQotICAgIC8vIFRleHQgJiBFZGl0YWJsZSBUZXh0Ci0gICAg
aWYgKHJvbGUgPT0gU3RhdGljVGV4dFJvbGUgfHwgY29yZU9iamVjdC0+aXNNZW51TGlzdE9wdGlv
bigpKQotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1RFWFQ7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmIChjb3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKLSAgICAgICAgICAg
IGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfVEVYVDsKLSAgICAgICAgICAgIGlmICghY29yZU9i
amVjdC0+aXNSZWFkT25seSgpKQotICAgICAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8
PCBXQUlfRURJVEFCTEVfVEVYVDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChy
b2xlICE9IFRhYmxlUm9sZSkgewotICAgICAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8
PCBXQUlfSFlQRVJURVhUOwotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJl
ci0+Y2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8
PSAxIDw8IFdBSV9URVhUOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgdGhl
IFRFWFQgaW50ZXJmYWNlIGZvciBsaXN0IGl0ZW1zIHdob3NlCi0gICAgICAgICAgICAvLyBmaXJz
dCBhY2Nlc3NpYmxlIGNoaWxkIGhhcyBhIHRleHQgcmVuZGVyZXIKLSAgICAgICAgICAgIGlmIChy
b2xlID09IExpc3RJdGVtUm9sZSkgewotICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNo
aWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSkgewotICAgICAg
ICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheFJlbmRlckNoaWxkID0gY2hpbGRy
ZW4uYXQoMCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gZ2V0
SW50ZXJmYWNlTWFza0Zyb21PYmplY3QoYXhSZW5kZXJDaGlsZCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSW1hZ2UKLSAgICBp
ZiAoY29yZU9iamVjdC0+aXNJbWFnZSgpKQotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwg
V0FJX0lNQUdFOwotCi0gICAgLy8gVGFibGUKLSAgICBpZiAocm9sZSA9PSBUYWJsZVJvbGUpCi0g
ICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfVEFCTEU7Ci0KLSAgICAvLyBEb2N1bWVu
dAotICAgIGlmIChyb2xlID09IFdlYkFyZWFSb2xlKQotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9
IDEgPDwgV0FJX0RPQ1VNRU5UOwotCi0gICAgLy8gVmFsdWUKLSAgICBpZiAocm9sZSA9PSBTbGlk
ZXJSb2xlKQotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1ZBTFVFOwotCi0gICAg
cmV0dXJuIGludGVyZmFjZU1hc2s7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBnZXRVbmlxdWVB
Y2Nlc3NpYmlsaXR5VHlwZU5hbWUoZ3VpbnQxNiBpbnRlcmZhY2VNYXNrKQotewotI2RlZmluZSBX
QUlfVFlQRV9OQU1FX0xFTiAoMzApIC8qIEVub3VnaCBmb3IgcHJlZml4ICsgNSBoZXggY2hhcmFj
dGVycyAobWF4KSAqLwotICAgIHN0YXRpYyBjaGFyIG5hbWVbV0FJX1RZUEVfTkFNRV9MRU4gKyAx
XTsKLQotICAgIGdfc3ByaW50ZihuYW1lLCAiV0FJVHlwZSV4IiwgaW50ZXJmYWNlTWFzayk7Ci0g
ICAgbmFtZVtXQUlfVFlQRV9OQU1FX0xFTl0gPSAnXDAnOwotCi0gICAgcmV0dXJuIG5hbWU7Ci19
Ci0KLXN0YXRpYyBHVHlwZSBnZXRBY2Nlc3NpYmlsaXR5VHlwZUZyb21PYmplY3QoQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCkKLXsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIHR5
cGVJbmZvID0gewotICAgICAgICBzaXplb2YoV2ViS2l0QWNjZXNzaWJsZUNsYXNzKSwKLSAgICAg
ICAgKEdCYXNlSW5pdEZ1bmMpIDAsCi0gICAgICAgIChHQmFzZUZpbmFsaXplRnVuYykgMCwKLSAg
ICAgICAgKEdDbGFzc0luaXRGdW5jKSAwLAotICAgICAgICAoR0NsYXNzRmluYWxpemVGdW5jKSAw
LAotICAgICAgICAwLCAvKiBjbGFzcyBkYXRhICovCi0gICAgICAgIHNpemVvZihXZWJLaXRBY2Nl
c3NpYmxlKSwgLyogaW5zdGFuY2Ugc2l6ZSAqLwotICAgICAgICAwLCAvKiBuYiBwcmVhbGxvY3Mg
Ki8KLSAgICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKSAwLAotICAgICAgICAwIC8qIHZhbHVlIHRh
YmxlICovCi0gICAgfTsKLQotICAgIGd1aW50MTYgaW50ZXJmYWNlTWFzayA9IGdldEludGVyZmFj
ZU1hc2tGcm9tT2JqZWN0KGNvcmVPYmplY3QpOwotICAgIGNvbnN0IGNoYXIqIGF0a1R5cGVOYW1l
ID0gZ2V0VW5pcXVlQWNjZXNzaWJpbGl0eVR5cGVOYW1lKGludGVyZmFjZU1hc2spOwotICAgIEdU
eXBlIHR5cGUgPSBnX3R5cGVfZnJvbV9uYW1lKGF0a1R5cGVOYW1lKTsKLSAgICBpZiAodHlwZSkK
LSAgICAgICAgcmV0dXJuIHR5cGU7Ci0KLSAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRp
YyhXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF0a1R5cGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0eXBl
SW5mbywgR1R5cGVGbGFncygwKSk7Ci0gICAgZm9yIChndWludCBpID0gMDsgaSA8IEdfTl9FTEVN
RU5UUyhBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9ucyk7IGkrKykgewotICAgICAgICBpZiAoaW50
ZXJmYWNlTWFzayAmICgxIDw8IGkpKQotICAgICAgICAgICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vf
c3RhdGljKHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0
QXRrSW50ZXJmYWNlVHlwZUZyb21XQUlUeXBlKHN0YXRpY19jYXN0PFdBSVR5cGU+KGkpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXRrSW50ZXJmYWNlc0luaXRG
dW5jdGlvbnNbaV0pOwotICAgIH0KLQotICAgIHJldHVybiB0eXBlOwotfQotCi1XZWJLaXRBY2Nl
c3NpYmxlKiB3ZWJraXRfYWNjZXNzaWJsZV9uZXcoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCkKLXsKLSAgICBHVHlwZSB0eXBlID0gZ2V0QWNjZXNzaWJpbGl0eVR5cGVGcm9tT2JqZWN0
KGNvcmVPYmplY3QpOwotICAgIEF0a09iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nhc3Q8QXRrT2Jq
ZWN0Kj4oZ19vYmplY3RfbmV3KHR5cGUsIDApKTsKLQotICAgIGF0a19vYmplY3RfaW5pdGlhbGl6
ZShvYmplY3QsIGNvcmVPYmplY3QpOwotCi0gICAgcmV0dXJuIFdFQktJVF9BQ0NFU1NJQkxFKG9i
amVjdCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9h
Y2Nlc3NpYmlsaXR5X29iamVjdChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQotewotICAg
IHJldHVybiBhY2Nlc3NpYmxlLT5tX29iamVjdDsKLX0KLQotdm9pZCB3ZWJraXRfYWNjZXNzaWJs
ZV9kZXRhY2goV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKLXsKLSAgICBBU1NFUlQoYWNj
ZXNzaWJsZS0+bV9vYmplY3QpOwotCi0gICAgaWYgKGNvcmUoYWNjZXNzaWJsZSktPnJvbGVWYWx1
ZSgpID09IFdlYkFyZWFSb2xlKQotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYWNjZXNz
aWJsZSwgInN0YXRlLWNoYW5nZSIsICJkZWZ1bmN0IiwgdHJ1ZSk7Ci0KLSAgICAvLyBXZSByZXBs
YWNlIHRoZSBXZWJDb3JlIEFjY2Vzc2liaWxpdHlPYmplY3Qgd2l0aCBhIGZhbGxiYWNrIG9iamVj
dCB0aGF0Ci0gICAgLy8gcHJvdmlkZXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgdG8gYXZvaWQg
cmVwZXRpdGl2ZSBudWxsLWNoZWNraW5nIGFmdGVyCi0gICAgLy8gZGV0YWNobWVudC4KLSAgICBh
Y2Nlc3NpYmxlLT5tX29iamVjdCA9IGZhbGxiYWNrT2JqZWN0KCk7Ci19Ci0KLUF0a09iamVjdCog
d2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXZWJLaXRBY2Nlc3NpYmxlKiBh
Y2Nlc3NpYmxlKQotewotICAgIGlmICghYWNjZXNzaWJsZS0+bV9vYmplY3QpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGZvY3VzZWRPYmogPSBh
Y2Nlc3NpYmxlLT5tX29iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpOwotICAgIGlmICghZm9jdXNl
ZE9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZm9jdXNlZE9iai0+d3JhcHBl
cigpOwotfQotCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RGb2N1c2VkQW5kQ2FyZXRPZmZz
ZXRVbmlnbm9yZWQoQWNjZXNzaWJpbGl0eU9iamVjdCogcmVmZXJlbmNlT2JqZWN0LCBpbnQmIG9m
ZnNldCkKLXsKLSAgICAvLyBJbmRpY2F0aW9uIHRoYXQgc29tZXRoaW5nIGJvZ3VzIGhhcyB0cmFu
c3BpcmVkLgotICAgIG9mZnNldCA9IC0xOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVm
ZXJlbmNlT2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgTm9kZSogZm9jdXNlZE5vZGUgPSByZWZlcmVuY2VPYmplY3QtPnNlbGVj
dGlvbigpLmVuZCgpLmNvbnRhaW5lck5vZGUoKTsKLSAgICBpZiAoIWZvY3VzZWROb2RlKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVjdCogZm9jdXNlZFJlbmRlcmVyID0gZm9j
dXNlZE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFmb2N1c2VkUmVuZGVyZXIpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZm9jdXNlZE9iamVjdCA9IGRv
Y3VtZW50LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZvY3VzZWRSZW5kZXJlcik7Ci0g
ICAgaWYgKCFmb2N1c2VkT2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIExvb2sg
Zm9yIHRoZSBhY3R1YWwgKG5vdCBpZ25vcmluZyBhY2Nlc3NpYmlsaXR5KSBzZWxlY3RlZCBvYmpl
Y3QuCi0gICAgaWYgKGZvY3VzZWRPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAg
ICAgICAgZm9jdXNlZE9iamVjdCA9IGZvY3VzZWRPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpOwotICAgIGlmICghZm9jdXNlZE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv
LyBEb24ndCBpZ25vcmUgbGlua3MgaWYgdGhlIG9mZnNldCBpcyBiZWluZyByZXF1ZXN0ZWQgZm9y
IGEgbGluay4KLSAgICBpZiAoIXJlZmVyZW5jZU9iamVjdC0+aXNMaW5rKCkgJiYgZm9jdXNlZE9i
amVjdC0+aXNMaW5rKCkpCi0gICAgICAgIGZvY3VzZWRPYmplY3QgPSBmb2N1c2VkT2JqZWN0LT5w
YXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAoIWZvY3VzZWRPYmplY3QpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgTm9kZSogc3RhcnROb2RlID0gMDsKLSAgICBpZiAoZm9jdXNlZE9i
amVjdCAhPSByZWZlcmVuY2VPYmplY3QgfHwgZm9jdXNlZE9iamVjdC0+aXNUZXh0Q29udHJvbCgp
KSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gdXNlIHRoZSBmaXJzdCBjaGlsZCdzIG5vZGUgb2Yg
dGhlIHJlZmVyZW5jZQotICAgICAgICAvLyBvYmplY3QgYXMgdGhlIHN0YXJ0IHBvaW50IHRvIGNh
bGN1bGF0ZSB0aGUgY2FyZXQgb2Zmc2V0Ci0gICAgICAgIC8vIGJlY2F1c2Ugd2Ugd2FudCBpdCB0
byBiZSByZWxhdGl2ZSB0byB0aGUgb2JqZWN0IG9mCi0gICAgICAgIC8vIHJlZmVyZW5jZSwgbm90
IGp1c3QgdG8gdGhlIGZvY3VzZWQgb2JqZWN0ICh3aGljaCBjb3VsZCBoYXZlCi0gICAgICAgIC8v
IHByZXZpb3VzIHNpYmxpbmdzIHdoaWNoIHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgdG9v
KS4KLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhGaXJzdENoaWxkID0gcmVmZXJlbmNl
T2JqZWN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmIChheEZpcnN0Q2hpbGQpCi0gICAgICAg
ICAgICBzdGFydE5vZGUgPSBheEZpcnN0Q2hpbGQtPm5vZGUoKTsKLSAgICB9Ci0gICAgaWYgKCFz
dGFydE5vZGUpCi0gICAgICAgIHN0YXJ0Tm9kZSA9IGZvY3VzZWRPYmplY3QtPm5vZGUoKTsKLQot
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKGZpcnN0
UG9zaXRpb25Jbk5vZGUoc3RhcnROb2RlKSwgRE9XTlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIGVuZFBvc2l0aW9uID0gZm9jdXNlZE9iamVjdC0+c2VsZWN0aW9uKCkudmlzaWJsZUVuZCgp
OwotCi0gICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gZW5kUG9zaXRpb24pCi0gICAgICAgIG9mZnNl
dCA9IDA7Ci0gICAgZWxzZSBpZiAoIWlzU3RhcnRPZkxpbmUoZW5kUG9zaXRpb24pKSB7Ci0gICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24ucHJldmlvdXMoKSk7Ci0gICAgICAgIG9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpICsgMTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsK
LSAgICAgICAgb2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwg
dHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvY3VzZWRPYmplY3Q7Ci19Ci0KLSNlbmRpZiAv
LyBIQVZFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCmluZGV4IDI2
ZTdkNGEuLmY0NDIwZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwxNSArMjIsMTIgQEAKIAogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKIAotI2luY2x1ZGUg
IkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwu
aCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgogI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCiAKICNpbmNsdWRlIDxhdGsvYXRrLmg+CkBAIC01MiwyMCArNDksMTIgQEAg
ZW51bSB7CiAKIHN0YXRpYyBncG9pbnRlciB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rUGFyZW50
Q2xhc3MgPSAwOwogCi0vLyBVc2VkIHRvIHByb3ZpZGUgY29uc3QgY2hhciogcmV0dXJucy4KLXN0
YXRpYyBjb25zdCBjaGFyKiByZXR1cm5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCi17Ci0gICAg
c3RhdGljIENTdHJpbmcgcmV0dXJuZWRTdHJpbmc7Ci0gICAgcmV0dXJuZWRTdHJpbmcgPSBzdHIu
dXRmOCgpOwotICAgIHJldHVybiByZXR1cm5lZFN0cmluZy5kYXRhKCk7Ci19Ci0KIHN0YXRpYyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCiB7
CiAgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFXRUJLSVRfSVNfQUNDRVNTSUJMRShhY2Nlc3NpYmxl
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gd2Via2l0X2FjY2Vzc2libGVfZ2V0
X2FjY2Vzc2liaWxpdHlfb2JqZWN0KGFjY2Vzc2libGUpOworICAgIHJldHVybiB3ZWJraXRBY2Nl
c3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChhY2Nlc3NpYmxlKTsKIH0KIAogc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluayogbGluaykK
QEAgLTg5LDcgKzc4LDYgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrQWN0
aW9uKiBhY3Rpb24pCiAgICAgcmV0dXJuIGNvcmUoV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5L
KGFjdGlvbikpOwogfQogCi0KIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJs
aW5rQWN0aW9uRG9BY3Rpb24oQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQgaW5kZXgpCiB7CiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FDQ0VTU0lCTEVfSFlQRVJMSU5LKGFjdGlv
biksIEZBTFNFKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaAppbmRleCA5ZGY4MTlkLi5iMjQxYjZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAy
MDEyIElnYWxpYSBTLkwuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDcgKzIwLDcgQEAKICNp
Zm5kZWYgV2ViS2l0QWNjZXNzaWJsZUh5cGVybGlua19oCiAjZGVmaW5lIFdlYktpdEFjY2Vzc2li
bGVIeXBlcmxpbmtfaAogCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsu
aCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgogCiAjaW5jbHVkZSA8
YXRrL2F0ay5oPgogCkBAIC00OSwxNCArNDksMTQgQEAgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxl
SHlwZXJsaW5rIHsKIH07CiAKIHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZUh5cGVybGlua0NsYXNz
IHsKLSAgICBBdGtPYmplY3RDbGFzcyBwYXJlbnRDbGFzczsKKyAgICBBdGtIeXBlcmxpbmtDbGFz
cyBwYXJlbnRDbGFzczsKIH07CiAKIEdUeXBlIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRU
eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKIAotV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluayogd2Vi
a2l0QWNjZXNzaWJsZUh5cGVybGlua05ldyhBdGtIeXBlcmxpbmtJbXBsKiBoeXBlcmxpbmtJbXBs
KTsKK1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtO
ZXcoQXRrSHlwZXJsaW5rSW1wbCopOwogCi1XZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3
ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rKiBsaW5rKTsKK1dlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqIHdl
YmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdlYktpdEFjY2Vz
c2libGVIeXBlcmxpbmsqKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlQWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTUw
MTcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAKQEAgLTAsMCArMSw4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBv
cnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBU
aGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFs
IERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywg
SW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENv
cHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZUFjdGlvbi5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwu
aCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrQWN0
aW9uKiBhY3Rpb24pCit7CisgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRShhY3Rpb24pKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNz
aWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShhY3Rpb24pKTsKK30KKwordm9pZCB3ZWJr
aXRBY2Nlc3NpYmxlQWN0aW9uSW50ZXJmYWNlSW5pdChBdGtBY3Rpb25JZmFjZSogaWZhY2UpCit7
CisgICAgaWZhY2UtPmRvX2FjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25Eb0FjdGlvbjsK
KyAgICBpZmFjZS0+Z2V0X25fYWN0aW9ucyA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXROQWN0
aW9uczsKKyAgICBpZmFjZS0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Via2l0QWNjZXNzaWJsZUFjdGlv
bkdldERlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRfa2V5YmluZGluZyA9IHdlYmtpdEFjY2Vz
c2libGVBY3Rpb25HZXRLZXliaW5kaW5nOworICAgIGlmYWNlLT5nZXRfbmFtZSA9IHdlYmtpdEFj
Y2Vzc2libGVBY3Rpb25HZXROYW1lOworfQorCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlQWN0
aW9uRG9BY3Rpb24oQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWluZGV4LCBGQUxTRSk7CisgICAgcmV0dXJuIGNvcmUoYWN0aW9uKS0+
cGVyZm9ybURlZmF1bHRBY3Rpb24oKTsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9u
R2V0TkFjdGlvbnMoQXRrQWN0aW9uKikKK3sKKyAgICByZXR1cm4gMTsKK30KKworY29uc3QgZ2No
YXIqIHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXREZXNjcmlwdGlvbihBdGtBY3Rpb24qLCBnaW50
KQoreworICAgIC8vIFRPRE86IE5lZWQgYSB3YXkgdG8gcHJvdmlkZS9sb2NhbGl6ZSBhY3Rpb24g
ZGVzY3JpcHRpb25zLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICIiOworfQor
Citjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldEtleWJpbmRpbmcoQXRrQWN0
aW9uKiBhY3Rpb24sIGdpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWlu
ZGV4LCAwKTsKKyAgICAvLyBGSVhNRTogQ29uc3RydWN0IGEgcHJvcGVyIGtleWJpbmRpbmcgc3Ry
aW5nLgorICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZShhY3Rpb24pLT5hY2Nlc3NLZXkoKS5z
dHJpbmcoKSk7Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0TmFt
ZShBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpbmRleCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghaW5kZXgsIDApOworICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZShhY3Rpb24pLT5h
Y3Rpb25WZXJiKCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjNzE5ZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VBY3Rpb24uaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGEx
MXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1v
emlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVh
dGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbl9oCisjZGVmaW5lIFdlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VBY3Rpb25faAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisK
K3ZvaWQgd2Via2l0QWNjZXNzaWJsZUFjdGlvbkludGVyZmFjZUluaXQoQXRrQWN0aW9uSWZhY2Uq
KTsKKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUFjdGlvbkRvQWN0aW9uKEF0a0FjdGlvbios
IGdpbnQgaW5kZXgpOworCitnaW50IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXROQWN0aW9ucyhB
dGtBY3Rpb24qKTsKKworY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXREZXNj
cmlwdGlvbihBdGtBY3Rpb24qLCBnaW50IGluZGV4KTsKKworY29uc3QgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVBY3Rpb25HZXRLZXliaW5kaW5nKEF0a0FjdGlvbiosIGdpbnQgaW5kZXgpOworCitj
b25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldE5hbWUoQXRrQWN0aW9uKiwgZ2lu
dCBpbmRleCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlQWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyNWUwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VDb21wb25lbnQuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpv
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBQb3J0aW9u
cyBmcm9tIE1vemlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CisgKgorICogVGhlIE9y
aWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZl
bG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4K
KyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln
aHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VDb21wb25lbnQuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiV2ViS2l0
QWNjZXNzaWJsZVV0aWwuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmUoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCit7CisgICAgaWYgKCFXRUJLSVRfSVNf
QUNDRVNTSUJMRShjb21wb25lbnQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3
ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShj
b21wb25lbnQpKTsKK30KKworc3RhdGljIEludFBvaW50IGF0a1RvQ29udGVudHMoQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgZ2ludCB4LCBn
aW50IHkpCit7CisgICAgSW50UG9pbnQgcG9zKHgsIHkpOworCisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBjb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIGlmIChmcmFtZVZp
ZXcpIHsKKyAgICAgICAgc3dpdGNoIChjb29yZFR5cGUpIHsKKyAgICAgICAgY2FzZSBBVEtfWFlf
U0NSRUVOOgorICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhw
b3MpOworICAgICAgICBjYXNlIEFUS19YWV9XSU5ET1c6CisgICAgICAgICAgICByZXR1cm4gZnJh
bWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gcG9zOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJ
bml0KEF0a0NvbXBvbmVudElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+cmVmX2FjY2Vzc2li
bGVfYXRfcG9pbnQgPSB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9p
bnQ7CisgICAgaWZhY2UtPmdldF9leHRlbnRzID0gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdl
dEV4dGVudHM7CisgICAgaWZhY2UtPmdyYWJfZm9jdXMgPSB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9u
ZW50R3JhYkZvY3VzOworfQorCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRS
ZWZBY2Nlc3NpYmxlQXRQb2ludChBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCB4LCBnaW50
IHksIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUpCit7CisgICAgSW50UG9pbnQgcG9zID0gYXRrVG9D
b250ZW50cyhjb3JlKGNvbXBvbmVudCksIGNvb3JkVHlwZSwgeCwgeSk7CisKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiB0YXJnZXQgPSBjb3JlKGNvbXBvbmVudCktPmFjY2Vzc2liaWxpdHlIaXRU
ZXN0KHBvcyk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiAwOworICAgIGdfb2Jq
ZWN0X3JlZih0YXJnZXQtPndyYXBwZXIoKSk7CisgICAgcmV0dXJuIHRhcmdldC0+d3JhcHBlcigp
OworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHZXRFeHRlbnRzKEF0a0NvbXBv
bmVudCogY29tcG9uZW50LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVp
Z2h0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQoreworICAgIEludFJlY3QgcmVjdCA9IGNvcmUo
Y29tcG9uZW50KS0+ZWxlbWVudFJlY3QoKTsKKyAgICBjb250ZW50c1RvQXRrKGNvcmUoY29tcG9u
ZW50KSwgY29vcmRUeXBlLCByZWN0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworZ2Jvb2xl
YW4gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyhBdGtDb21wb25lbnQqIGNvbXBv
bmVudCkKK3sKKyAgICBjb3JlKGNvbXBvbmVudCktPnNldEZvY3VzZWQodHJ1ZSk7CisgICAgcmV0
dXJuIGNvcmUoY29tcG9uZW50KS0+aXNGb2N1c2VkKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9u
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlQ29tcG9uZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTdjNzFjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuaApAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dz
OgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICog
VGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWlj
cm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVs
b3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBv
bmVudF9oCisjZGVmaW5lIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnRfaAorCisj
aW5jbHVkZSA8YXRrL2F0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKK3ZvaWQgd2Via2l0QWNjZXNz
aWJsZUNvbXBvbmVudEludGVyZmFjZUluaXQoQXRrQ29tcG9uZW50SWZhY2UqKTsKKworQXRrT2Jq
ZWN0KiB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9pbnQoQXRrQ29t
cG9uZW50KiwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSk7CisKK3ZvaWQgd2Via2l0QWNj
ZXNzaWJsZUNvbXBvbmVudEdldEV4dGVudHMoQXRrQ29tcG9uZW50KiwgZ2ludCogeCwgZ2ludCog
eSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlKTsKKworZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyhBdGtDb21wb25lbnQqKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnRf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZjNGYxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1
bWVudC5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVh
bnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTExeSwg
Y29weXJpZ2h0IGFzIGZvbGxvd3M6CisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxs
YS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFs
IENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJ
bml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oIgorCisjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIK
KyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnQp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNj
ZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShkb2N1bWVudCkpOworfQorCitzdGF0
aWMgY29uc3QgZ2NoYXIqIGRvY3VtZW50QXR0cmlidXRlVmFsdWUoQXRrRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBnY2hhciogYXR0cmlidXRlKQoreworICAgIERvY3VtZW50KiBjb3JlRG9jdW1l
bnQgPSBjb3JlKGRvY3VtZW50KS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWNvcmVEb2N1bWVudCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgdmFsdWUgPSBTdHJpbmcoKTsKKyAgICBp
ZiAoIWdfYXNjaWlfc3RyY2FzZWNtcChhdHRyaWJ1dGUsICJEb2NUeXBlIikgJiYgY29yZURvY3Vt
ZW50LT5kb2N0eXBlKCkpCisgICAgICAgIHZhbHVlID0gY29yZURvY3VtZW50LT5kb2N0eXBlKCkt
Pm5hbWUoKTsKKyAgICBlbHNlIGlmICghZ19hc2NpaV9zdHJjYXNlY21wKGF0dHJpYnV0ZSwgIkVu
Y29kaW5nIikpCisgICAgICAgIHZhbHVlID0gY29yZURvY3VtZW50LT5jaGFyc2V0KCk7CisgICAg
ZWxzZSBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcChhdHRyaWJ1dGUsICJVUkkiKSkKKyAgICAgICAg
dmFsdWUgPSBjb3JlRG9jdW1lbnQtPmRvY3VtZW50VVJJKCk7CisKKyAgICBpZiAoIXZhbHVlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyh2YWx1ZSk7CisKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRJbnRlcmZhY2VJbml0KEF0
a0RvY3VtZW50SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5nZXRfZG9jdW1lbnRfYXR0cmli
dXRlX3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0QXR0cmlidXRlVmFsdWU7Cisg
ICAgaWZhY2UtPmdldF9kb2N1bWVudF9hdHRyaWJ1dGVzID0gd2Via2l0QWNjZXNzaWJsZURvY3Vt
ZW50R2V0QXR0cmlidXRlczsKKyAgICBpZmFjZS0+Z2V0X2RvY3VtZW50X2xvY2FsZSA9IHdlYmtp
dEFjY2Vzc2libGVEb2N1bWVudEdldExvY2FsZTsKK30KKworY29uc3QgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZVZhbHVlKEF0a0RvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgZ2NoYXIqIGF0dHJpYnV0ZSkKK3sKKyAgICByZXR1cm4gZG9jdW1lbnRBdHRyaWJ1dGVW
YWx1ZShkb2N1bWVudCwgYXR0cmlidXRlKTsKK30KKworQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRB
Y2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVzKEF0a0RvY3VtZW50KiBkb2N1bWVudCkKK3sK
KyAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9IDA7CisgICAgY29uc3QgZ2NoYXIq
IGF0dHJpYnV0ZXNbXSA9IHsgIkRvY1R5cGUiLCAiRW5jb2RpbmciLCAiVVJJIiB9OworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhhdHRyaWJ1dGVzKTsgaSsrKSB7
CisgICAgICAgIGNvbnN0IGdjaGFyKiB2YWx1ZSA9IGRvY3VtZW50QXR0cmlidXRlVmFsdWUoZG9j
dW1lbnQsIGF0dHJpYnV0ZXNbaV0pOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBh
dHRyaWJ1dGVTZXQgPSBhZGRBdHRyaWJ1dGVUb1NldChhdHRyaWJ1dGVTZXQsIGF0dHJpYnV0ZXNb
aV0sIHZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gYXR0cmlidXRlU2V0OworfQorCitjb25z
dCBnY2hhciogd2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0TG9jYWxlKEF0a0RvY3VtZW50KiBk
b2N1bWVudCkKK3sKKyAgICAvLyBUT0RPOiBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIGxhbmcgeG1s
Omxhbmcgd2hlbiB0aGUgZm9sbG93aW5nIGNvbWVzIHVwIGVtcHR5PworICAgIFN0cmluZyBsYW5n
dWFnZSA9IGNvcmUoZG9jdW1lbnQpLT5sYW5ndWFnZSgpOworICAgIGlmICghbGFuZ3VhZ2UuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGxhbmd1YWdlKTsKKworICAgIHJl
dHVybiAwOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YmI1ZTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlRG9jdW1lbnQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGEx
MXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1v
emlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVh
dGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50X2gKKyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZURvY3VtZW50X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKworR19CRUdJTl9ERUNM
UworCit2b2lkIHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEludGVyZmFjZUluaXQoQXRrRG9jdW1l
bnRJZmFjZSopOworCitjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0QXR0
cmlidXRlVmFsdWUoQXRrRG9jdW1lbnQqLCBjb25zdCBnY2hhciopOworCitBdGtBdHRyaWJ1dGVT
ZXQqIHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZXMoQXRrRG9jdW1lbnQqKTsK
KworY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldExvY2FsZShBdGtEb2N1
bWVudCopOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZURvY3VtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxl
VGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjOTQ3MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
SmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoK
KyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIElu
aXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0
ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBh
cmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmgiCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlKEF0a0VkaXRhYmxlVGV4dCogdGV4dCkKK3sKKyAgICBpZiAoIVdFQktJVF9J
U19BQ0NFU1NJQkxFKHRleHQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJr
aXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0
KSk7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEludGVyZmFjZUluaXQo
QXRrRWRpdGFibGVUZXh0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5zZXRfcnVuX2F0dHJp
YnV0ZXMgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRlczsKKyAg
ICBpZmFjZS0+c2V0X3RleHRfY29udGVudHMgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0
U2V0VGV4dENvbnRlbnRzOworICAgIGlmYWNlLT5pbnNlcnRfdGV4dCA9IHdlYmtpdEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRJbnNlcnRUZXh0OworICAgIGlmYWNlLT5jb3B5X3RleHQgPSB3ZWJraXRB
Y2Nlc3NpYmxlRWRpdGFibGVUZXh0Q29weVRleHQ7CisgICAgaWZhY2UtPmN1dF90ZXh0ID0gd2Vi
a2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEN1dFRleHQ7CisgICAgaWZhY2UtPmRlbGV0ZV90ZXh0
ID0gd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dERlbGV0ZVRleHQ7CisgICAgaWZhY2UtPnBh
c3RlX3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0UGFzdGVUZXh0OworfQorCitn
Ym9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRlcyhBdGtF
ZGl0YWJsZVRleHQqLCBBdGtBdHRyaWJ1dGVTZXQqLCBnaW50LCBnaW50KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRTZXRUZXh0Q29udGVudHMoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBjb25z
dCBnY2hhciogc3RyaW5nKQoreworICAgIC8vIEZJWE1FOiBzdHJpbmcgbnVsbGNoZWNrPworICAg
IGNvcmUodGV4dCktPnNldFZhbHVlKFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSk7Cit9CisKK3Zv
aWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEluc2VydFRleHQoQXRrRWRpdGFibGVUZXh0
KiB0ZXh0LCBjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IGxlbmd0aCwgZ2ludCogcG9zaXRpb24p
Cit7CisgICAgLy8gRklYTUU6IHN0cmluZyBudWxsY2hlY2s/CisKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICAvLyBGSVhNRTogTm90IGltcGxl
bWVudGVkIGluIFdlYkNvcmUKKyAgICAvLyBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5n
ZShQbGFpblRleHRSYW5nZSgqcG9zaXRpb24sIDApKTsKKyAgICAvLyBjb3JlT2JqZWN0LT5zZXRT
ZWxlY3RlZFRleHQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsKKworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCB8fCAh
ZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvcmVPYmplY3QtPnNl
dFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZSgqcG9zaXRpb24sIDApKSk7CisgICAgY29yZU9i
amVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNldCBwb3Np
dGlvbiB0byB0aGUgYWN0dWFsIGluc2VydGVkIHRleHQgbGVuZ3RoLCB3aGljaCBtYXkgYmUgbGVz
cyB0aGFuIHRoYXQgcmVxdWVzdGVkLgorICAgIGlmIChkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9y
KCktPmluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChTdHJpbmc6OmZyb21VVEY4KHN0
cmluZyksIGZhbHNlLCAwKSkKKyAgICAgICAgKnBvc2l0aW9uICs9IGxlbmd0aDsKK30KKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q29weVRleHQoQXRrRWRpdGFibGVUZXh0Kiwg
Z2ludCwgZ2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIHdlYmtpdEFj
Y2Vzc2libGVFZGl0YWJsZVRleHRDdXRUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGdpbnQsIGdpbnQp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRp
dGFibGVUZXh0RGVsZXRlVGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGdpbnQgc3RhcnRQb3Ms
IGdpbnQgZW5kUG9zKQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBj
b3JlKHRleHQpOworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZQorICAg
IC8vIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0
UG9zLCBlbmRQb3MgLSBzdGFydFBvcykpOworICAgIC8vIGNvcmVPYmplY3QtPnNldFNlbGVjdGVk
VGV4dChTdHJpbmcoKSk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlv
blJhbmdlKGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0
UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSkpOworICAgIGNvcmVPYmplY3QtPnNl
dEZvY3VzZWQodHJ1ZSk7CisgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT5wZXJmb3Jt
RGVsZXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFBhc3RlVGV4
dChBdGtFZGl0YWJsZVRleHQqLCBnaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQxNzViCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVk
aXRhYmxlVGV4dC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
TnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBQb3J0aW9ucyBmcm9tIE1vemls
bGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CisgKgorICogVGhlIE9yaWdpbmFsIENvZGUg
aXMgbW96aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhl
IE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIK
KyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0X2gKKyNkZWZpbmUgV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dF9oCisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisK
K0dfQkVHSU5fREVDTFMKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0SW50ZXJm
YWNlSW5pdChBdGtFZGl0YWJsZVRleHRJZmFjZSopOworCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3Np
YmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRlcyhBdGtFZGl0YWJsZVRleHQqLCBBdGtBdHRy
aWJ1dGVTZXQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCk7CisKK3ZvaWQgd2Vi
a2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFNldFRleHRDb250ZW50cyhBdGtFZGl0YWJsZVRleHQq
LCBjb25zdCBnY2hhciopOworCit2b2lkIHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRJbnNl
cnRUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGNvbnN0IGdjaGFyKiwgZ2ludCBsZW5ndGgsIGdpbnQq
IHBvc2l0aW9uKTsKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q29weVRleHQo
QXRrRWRpdGFibGVUZXh0KiwgZ2ludCBzdGFydFBvcywgZ2ludCBlbmRQb3MpOworCit2b2lkIHdl
YmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRDdXRUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGdpbnQg
c3RhcnRQb3MsIGdpbnQgZW5kUG9zKTsKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVU
ZXh0RGVsZXRlVGV4dChBdGtFZGl0YWJsZVRleHQqLCBnaW50IHN0YXJ0UG9zLCBnaW50IGVuZFBv
cyk7CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFBhc3RlVGV4dChBdGtFZGl0
YWJsZVRleHQqLCBnaW50IHBvc2l0aW9uKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVy
bGlua0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQ3MGU3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5j
cHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAx
MiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuaCIKKworI2luY2x1ZGUgIldlYktpdEFjY2Vzc2li
bGVIeXBlcmxpbmsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBHUXVh
cmsgaHlwZXJsaW5rT2JqZWN0UXVhcmsgPSAwOworCit2b2lkIHdlYmtpdEFjY2Vzc2libGVIeXBl
cmxpbmtJbXBsSW50ZXJmYWNlSW5pdChBdGtIeXBlcmxpbmtJbXBsSWZhY2UqIGlmYWNlKQorewor
ICAgIGlmYWNlLT5nZXRfaHlwZXJsaW5rID0gd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0ltcGxH
ZXRIeXBlcmxpbms7CisgICAgaHlwZXJsaW5rT2JqZWN0UXVhcmsgPSBnX3F1YXJrX2Zyb21fc3Rh
dGljX3N0cmluZygid2Via2l0LWFjY2Vzc2libGUtaHlwZXJsaW5rLW9iamVjdCIpOworfQorCitB
dGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsR2V0SHlwZXJsaW5rKEF0
a0h5cGVybGlua0ltcGwqIGh5cGVybGluaykKK3sKKyAgICBBdGtIeXBlcmxpbmsqIGh5cGVybGlu
a09iamVjdCA9IEFUS19IWVBFUkxJTksoZ19vYmplY3RfZ2V0X3FkYXRhKEdfT0JKRUNUKGh5cGVy
bGluayksIGh5cGVybGlua09iamVjdFF1YXJrKSk7CisgICAgaWYgKCFoeXBlcmxpbmtPYmplY3Qp
IHsKKyAgICAgICAgaHlwZXJsaW5rT2JqZWN0ID0gQVRLX0hZUEVSTElOSyh3ZWJraXRBY2Nlc3Np
YmxlSHlwZXJsaW5rTmV3KGh5cGVybGluaykpOworICAgICAgICBnX29iamVjdF9zZXRfcWRhdGEo
R19PQkpFQ1QoaHlwZXJsaW5rKSwgaHlwZXJsaW5rT2JqZWN0UXVhcmssIGh5cGVybGlua09iamVj
dCk7CisgICAgfQorICAgIHJldHVybiBoeXBlcmxpbmtPYmplY3Q7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
SHlwZXJsaW5rSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hZmQ2NDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0lt
cGxfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbF9oCisK
KyNpbmNsdWRlIDxhdGsvYXRrLmg+CisKK0dfQkVHSU5fREVDTFMKKwordm9pZCB3ZWJraXRBY2Nl
c3NpYmxlSHlwZXJsaW5rSW1wbEludGVyZmFjZUluaXQoQXRrSHlwZXJsaW5rSW1wbElmYWNlKik7
CisKK0F0a0h5cGVybGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0ltcGxHZXRIeXBlcmxp
bmsoQXRrSHlwZXJsaW5rSW1wbCopOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlSHlwZXJ0ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jNmIwOTkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5jcHAKQEAgLTAsMCArMSwx
MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VI
eXBlcnRleHQuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRl
ICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrSHlwZXJ0ZXh0KiBoeXBl
cnRleHQpCit7CisgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRShoeXBlcnRleHQpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJp
bGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShoeXBlcnRleHQpKTsKK30KKwordm9pZCB3ZWJr
aXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdChBdGtIeXBlcnRleHRJZmFjZSogaWZh
Y2UpCit7CisgICAgaWZhY2UtPmdldF9saW5rID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdl
dExpbms7CisgICAgaWZhY2UtPmdldF9uX2xpbmtzID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4
dEdldE5MaW5rczsKKyAgICBpZmFjZS0+Z2V0X2xpbmtfaW5kZXggPSB3ZWJraXRBY2Nlc3NpYmxl
SHlwZXJ0ZXh0R2V0TGlua0luZGV4OworfQorCitBdGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2li
bGVIeXBlcnRleHRHZXRMaW5rKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGluZGV4KQor
eworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBj
aGlsZHJlbiA9IGNvcmUoaHlwZXJ0ZXh0KS0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoaW5kZXggPCAw
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gY2hpbGRyZW4uc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGdpbnQgY3VycmVudExpbmsgPSAtMTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZUNoaWxkID0gY2hpbGRyZW4uYXQoaSkuZ2V0KCk7CisgICAgICAg
IGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKKyAgICAgICAgICAg
IEF0a09iamVjdCogYXhPYmplY3QgPSBjb3JlQ2hpbGQtPndyYXBwZXIoKTsKKyAgICAgICAgICAg
IGlmICghYXhPYmplY3QgfHwgIUFUS19JU19IWVBFUkxJTktfSU1QTChheE9iamVjdCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGN1cnJlbnRMaW5rKys7CisgICAg
ICAgICAgICBpZiAoaW5kZXggIT0gY3VycmVudExpbmspCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIHJldHVybiBhdGtfaHlwZXJsaW5rX2ltcGxfZ2V0X2h5cGVybGlu
ayhBVEtfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiAwOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3Mo
QXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQpLT5jaGls
ZHJlbigpOworICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGdpbnQgbGlua3NGb3VuZCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGls
ZHJlbi5zaXplKCk7IGkrKykgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hp
bGQgPSBjaGlsZHJlbi5hdChpKS5nZXQoKTsKKyAgICAgICAgaWYgKCFjb3JlQ2hpbGQtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9
IGNvcmVDaGlsZC0+d3JhcHBlcigpOworICAgICAgICAgICAgaWYgKGF4T2JqZWN0ICYmIEFUS19J
U19IWVBFUkxJTktfSU1QTChheE9iamVjdCkpCisgICAgICAgICAgICAgICAgbGlua3NGb3VuZCsr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGxpbmtzRm91bmQ7Cit9CisKK2dpbnQg
d2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRleChBdGtIeXBlcnRleHQqIGh5cGVy
dGV4dCwgZ2ludCBjaGFySW5kZXgpCit7CisgICAgc2l6ZV90IGxpbmtzQ291bnQgPSB3ZWJraXRB
Y2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKGh5cGVydGV4dCk7CisgICAgaWYgKCFsaW5rc0Nv
dW50KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
bmtzQ291bnQ7IGkrKykgeworICAgICAgICBBdGtIeXBlcmxpbmsqIGh5cGVybGluayA9IEFUS19I
WVBFUkxJTksod2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmsoaHlwZXJ0ZXh0LCBpKSk7
CisgICAgICAgIGdpbnQgc3RhcnRJbmRleCA9IGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4
KGh5cGVybGluayk7CisgICAgICAgIGdpbnQgZW5kSW5kZXggPSBhdGtfaHlwZXJsaW5rX2dldF9l
bmRfaW5kZXgoaHlwZXJsaW5rKTsKKworICAgICAgICAvLyBDaGVjayBpZiB0aGUgY2hhciBpbmRl
eCBpbiB0aGUgbGluaydzIG9mZnNldCByYW5nZQorICAgICAgICBpZiAoc3RhcnRJbmRleCA8PSBj
aGFySW5kZXggJiYgY2hhckluZGV4IDwgZW5kSW5kZXgpCisgICAgICAgICAgICByZXR1cm4gaTsK
KyAgICB9CisKKyAgICAvLyBOb3QgZm91bmQgaWYgcmVhY2hlZAorICAgIHJldHVybiAtMTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZDVkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0
ZXh0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRl
eHRfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0X2gKKworI2lu
Y2x1ZGUgPGF0ay9hdGsuaD4KKworR19CRUdJTl9ERUNMUworCit2b2lkIHdlYmtpdEFjY2Vzc2li
bGVIeXBlcnRleHRJbnRlcmZhY2VJbml0KEF0a0h5cGVydGV4dElmYWNlKik7CisKK0F0a0h5cGVy
bGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmsoQXRrSHlwZXJ0ZXh0KiwgZ2lu
dCBpbmRleCk7CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldE5MaW5rcyhBdGtI
eXBlcnRleHQqKTsKKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4
KEF0a0h5cGVydGV4dCosIGdpbnQgY2hhckluZGV4KTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8vIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUlt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Yzg5YTI0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5jcHAKQEAgLTAsMCArMSw3NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoK
KyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRo
ZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jv
c3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUltYWdlLmgiCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGls
LmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0lt
YWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKGltYWdlKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2li
aWxpdHlPYmplY3QoV0VCS0lUX0FDQ0VTU0lCTEUoaW1hZ2UpKTsKK30KKwordm9pZCB3ZWJraXRB
Y2Nlc3NpYmxlSW1hZ2VJbnRlcmZhY2VJbml0KEF0a0ltYWdlSWZhY2UqIGlmYWNlKQoreworICAg
IGlmYWNlLT5nZXRfaW1hZ2VfcG9zaXRpb24gPSB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFn
ZVBvc2l0aW9uOworICAgIGlmYWNlLT5nZXRfaW1hZ2VfZGVzY3JpcHRpb24gPSB3ZWJraXRBY2Nl
c3NpYmxlSW1hZ2VHZXRJbWFnZURlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRfaW1hZ2Vfc2l6
ZSA9IHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlU2l6ZTsKK30KKwordm9pZCB3ZWJraXRB
Y2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZVBvc2l0aW9uKEF0a0ltYWdlKiBpbWFnZSwgZ2ludCogeCwg
Z2ludCogeSwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBj
b3JlKGltYWdlKS0+ZWxlbWVudFJlY3QoKTsKKyAgICBjb250ZW50c1RvQXRrKGNvcmUoaW1hZ2Up
LCBjb29yZFR5cGUsIHJlY3QsIHgsIHkpOworfQorCitjb25zdCBnY2hhciogd2Via2l0QWNjZXNz
aWJsZUltYWdlR2V0SW1hZ2VEZXNjcmlwdGlvbihBdGtJbWFnZSogaW1hZ2UpCit7CisgICAgcmV0
dXJuIHJldHVyblN0cmluZyhjb3JlKGltYWdlKS0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkp
OworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlU2l6ZShBdGtJbWFnZSog
aW1hZ2UsIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQpCit7CisgICAgSW50U2l6ZSBzaXplID0g
Y29yZShpbWFnZSktPnNpemUoKTsKKworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0g
c2l6ZS53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBzaXplLmhl
aWdodCgpOworfQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2YzM5MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJ
bWFnZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRp
IEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTEx
eSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96
aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdp
bmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0
ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRo
ZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2VfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlSW1hZ2VfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKK3Zv
aWQgd2Via2l0QWNjZXNzaWJsZUltYWdlSW50ZXJmYWNlSW5pdChBdGtJbWFnZUlmYWNlKik7CisK
K3ZvaWQgd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VQb3NpdGlvbihBdGtJbWFnZSosIGdp
bnQqIHgsIGdpbnQqIHksIEF0a0Nvb3JkVHlwZSk7CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRBY2Nl
c3NpYmxlSW1hZ2VHZXRJbWFnZURlc2NyaXB0aW9uKEF0a0ltYWdlKik7CisKK3ZvaWQgd2Via2l0
QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VTaXplKEF0a0ltYWdlKiwgZ2ludCogd2lkdGgsIGdpbnQq
IGhlaWdodCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlSW1hZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDliYzRlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpv
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBQ
b3J0aW9ucyBmcm9tIE1vemlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CisgKgorICog
VGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlh
bCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMs
IEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBD
b3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VTZWxlY3Rpb24uaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94Lmgi
CisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RF
bGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRp
YyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQorewor
ICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUoc2VsZWN0aW9uKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3Qo
V0VCS0lUX0FDQ0VTU0lCTEUoc2VsZWN0aW9uKSk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQor
eworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlv
bik7CisKKyAgICAvLyBPbmx5IGxpc3QgYm94ZXMgYW5kIG1lbnUgbGlzdHMgc3VwcG9ydGVkIHNv
IGZhci4KKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpICYmICFjb3JlU2VsZWN0
aW9uLT5pc01lbnVMaXN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRm9yIGxpc3Qg
Ym94ZXMgdGhlIGxpc3Qgb2JqZWN0IGlzIGp1c3QgaXRzZWxmLgorICAgIGlmIChjb3JlU2VsZWN0
aW9uLT5pc0xpc3RCb3goKSkKKyAgICAgICAgcmV0dXJuIGNvcmVTZWxlY3Rpb247CisKKyAgICAv
LyBGb3IgbWVudSBsaXN0cyB3ZSBuZWVkIHRvIHJldHVybiB0aGUgZmlyc3QgYWNjZXNzaWJsZSBj
aGlsZCwKKyAgICAvLyB3aXRoIHJvbGUgTWVudUxpc3RQb3B1cFJvbGUsIHNpbmNlIHRoYXQncyB0
aGUgb25lIGhvbGRpbmcgdGhlIGxpc3QKKyAgICAvLyBvZiBpdGVtcyB3aXRoIHJvbGUgTWVudUxp
c3RPcHRpb25Sb2xlLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7CisgICAgaWYg
KCFjaGlsZHJlbi5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogbGlzdE9iamVjdCA9IGNoaWxkcmVuLmF0KDApLmdldCgpOworICAgIGlmICghbGlz
dE9iamVjdC0+aXNNZW51TGlzdFBvcHVwKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIGxpc3RPYmplY3Q7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb25G
cm9tTGlzdChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworICAgIGlm
ICghY29yZVNlbGVjdGlvbiB8fCBpbmRleCA8IDApCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gTmVlZCB0byBzZWxlY3QgdGhlIHByb3BlciBsaXN0IG9iamVjdCBkZXBlbmRpbmcgb24gdGhl
IHR5cGUuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9iamVjdCA9IGxpc3RPYmplY3RG
b3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBpZiAoIWxpc3RPYmplY3QpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIG9wdGlvbnMgPSBsaXN0T2JqZWN0LT5jaGlsZHJlbigpOworICAgIGlmIChpbmRleCA8
IHN0YXRpY19jYXN0PGdpbnQ+KG9wdGlvbnMuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIG9wdGlv
bnMuYXQoaW5kZXgpLmdldCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvcHRpb25Gcm9tU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9u
LCBnaW50IGluZGV4KQoreworICAgIC8vIGkgaXMgdGhlIGl0aCBzZWxlY3Rpb24gYXMgb3Bwb3Nl
ZCB0byB0aGUgaXRoIGNoaWxkLgorCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVj
dGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwgIWNvcmVT
ZWxlY3Rpb24tPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpIHx8IGluZGV4IDwgMCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKKyAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNM
aXN0Qm94KCkpCisgICAgICAgIGNvcmVTZWxlY3Rpb24tPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0
ZWRJdGVtcyk7CisgICAgZWxzZSBpZiAoY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKSB7Cisg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlU2VsZWN0aW9uLT5yZW5kZXJlcigp
OworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdE5vZGUgPSB0b0hUTUxTZWxlY3RFbGVtZW50KHJl
bmRlcmVyLT5ub2RlKCkpOworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdE5vZGUt
PnNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlz
dEl0ZW1zID0gc2VsZWN0Tm9kZS0+bGlzdEl0ZW1zKCk7CisKKyAgICAgICAgaWYgKHNlbGVjdGVk
SW5kZXggPCAwIHx8IHNlbGVjdGVkSW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihsaXN0SXRlbXMu
c2l6ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHJldHVybiBvcHRpb25G
cm9tTGlzdChzZWxlY3Rpb24sIHNlbGVjdGVkSW5kZXgpOworICAgIH0KKworICAgIGlmIChpbmRl
eCA8IHN0YXRpY19jYXN0PGdpbnQ+KHNlbGVjdGVkSXRlbXMuc2l6ZSgpKSkKKyAgICAgICAgcmV0
dXJuIHNlbGVjdGVkSXRlbXMuYXQoaW5kZXgpLmdldCgpOworCisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUluaXQoQXRrU2VsZWN0aW9u
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5hZGRfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNz
aWJsZVNlbGVjdGlvbkFkZFNlbGVjdGlvbjsKKyAgICBpZmFjZS0+Y2xlYXJfc2VsZWN0aW9uID0g
d2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uOworICAgIGlmYWNlLT5yZWZf
c2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlZlNlbGVjdGlvbjsKKyAgICBp
ZmFjZS0+Z2V0X3NlbGVjdGlvbl9jb3VudCA9IHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25HZXRT
ZWxlY3Rpb25Db3VudDsKKyAgICBpZmFjZS0+aXNfY2hpbGRfc2VsZWN0ZWQgPSB3ZWJraXRBY2Nl
c3NpYmxlU2VsZWN0aW9uSXNDaGlsZFNlbGVjdGVkOworICAgIGlmYWNlLT5yZW1vdmVfc2VsZWN0
aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVjdGlvbjsKKyAgICBpZmFj
ZS0+c2VsZWN0X2FsbF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uU2VsZWN0
QWxsU2VsZWN0aW9uOworfQorCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQWRk
U2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50IGluZGV4KQoreworICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7CisgICAg
aWYgKCFjb3JlU2VsZWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvcHRpb24gPSBvcHRpb25Gcm9tTGlzdChzZWxlY3Rpb24sIGluZGV4KTsK
KyAgICBpZiAob3B0aW9uICYmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBjb3JlU2Vs
ZWN0aW9uLT5pc01lbnVMaXN0KCkpKSB7CisgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWQodHJ1
ZSk7CisgICAgICAgIHJldHVybiBvcHRpb24tPmlzU2VsZWN0ZWQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25DbGVh
clNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworICAgIGlmICghY29yZVNl
bGVjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7CisgICAgaWYgKGNv
cmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkg
eworICAgICAgICAvLyBTZXQgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgaXRlbXMgdG8gYW4gZW1wdHkg
bGlzdDsgdGhlbiB2ZXJpZnkgdGhhdCBpdCB3b3JrZWQuCisgICAgICAgIEFjY2Vzc2liaWxpdHlM
aXN0Qm94KiBsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3gqPihjb3Jl
U2VsZWN0aW9uKTsKKyAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3Rl
ZEl0ZW1zKTsKKyAgICAgICAgbGlzdEJveC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1z
KTsKKyAgICAgICAgcmV0dXJuICFzZWxlY3RlZEl0ZW1zLnNpemUoKTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25SZWZT
ZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgpCit7CisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24s
IGluZGV4KTsKKyAgICBpZiAob3B0aW9uKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBv
cHRpb24tPndyYXBwZXIoKTsKKyAgICAgICAgZ19vYmplY3RfcmVmKGNoaWxkKTsKKyAgICAgICAg
cmV0dXJuIGNoaWxkOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitnaW50IHdlYmtpdEFj
Y2Vzc2libGVTZWxlY3Rpb25HZXRTZWxlY3Rpb25Db3VudChBdGtTZWxlY3Rpb24qIHNlbGVjdGlv
bikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxl
Y3Rpb24pOworICAgIGlmICghY29yZVNlbGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGNv
cmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOworICAgICAgICBjb3Jl
U2VsZWN0aW9uLT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkSXRlbXMpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z2ludD4oc2VsZWN0ZWRJdGVtcy5zaXplKCkpOworICAgIH0KKworICAg
IGlmIChjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGNvcmVTZWxlY3Rpb24tPnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghcmVu
ZGVyZXIpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRl
eCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQocmVuZGVyZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgo
KTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwg
c3RhdGljX2Nhc3Q8aW50Pih0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5s
aXN0SXRlbXMoKS5zaXplKCkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitnYm9vbGVh
biB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uSXNDaGlsZFNlbGVjdGVkKEF0a1NlbGVjdGlvbiog
c2VsZWN0aW9uLCBnaW50IGluZGV4KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVT
ZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7CisgICAgaWYgKCFjb3JlU2VsZWN0aW9uKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlv
bkZyb21MaXN0KHNlbGVjdGlvbiwgaW5kZXgpOworICAgIGlmIChvcHRpb24gJiYgKGNvcmVTZWxl
Y3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkpCisgICAg
ICAgIHJldHVybiBvcHRpb24tPmlzU2VsZWN0ZWQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVjdGlvbihBdGtT
ZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworICAgIGlmICghY29yZVNlbGVj
dGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgZ2V0
dGluZyBjYWxsZWQgaWYgaSA9PSAwLiBXaGF0IGlzIHByZXZlbnRpbmcgdGhlIHJlc3Q/CisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbVNlbGVjdGlvbihzZWxlY3Rp
b24sIGluZGV4KTsKKyAgICBpZiAob3B0aW9uICYmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3go
KSB8fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpKSB7CisgICAgICAgIG9wdGlvbi0+c2V0
U2VsZWN0ZWQoZmFsc2UpOworICAgICAgICByZXR1cm4gIW9wdGlvbi0+aXNTZWxlY3RlZCgpOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJs
ZVNlbGVjdGlvblNlbGVjdEFsbFNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24p
OworICAgIGlmICghY29yZVNlbGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNNdWx0aVNlbGVj
dGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZVNlbGVjdGlvbi0+
Y2hpbGRyZW4oKTsKKyAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpIHsKKyAgICAg
ICAgQWNjZXNzaWJpbGl0eUxpc3RCb3gqIGxpc3RCb3ggPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5TGlzdEJveCo+KGNvcmVTZWxlY3Rpb24pOworICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3Rl
ZENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7CisgICAgICAgIGxpc3RCb3gtPnNl
bGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgICAgIHJldHVybiBzZWxlY3RlZEl0
ZW1zLnNpemUoKSA9PSBjaGlsZHJlbi5zaXplKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjNGQ5YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51
YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBN
b3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAy
MDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbl9oCisjZGVmaW5lIFdlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb25faAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCitH
X0JFR0lOX0RFQ0xTCisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUlu
aXQoQXRrU2VsZWN0aW9uSWZhY2UqKTsKKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVj
dGlvbkFkZFNlbGVjdGlvbihBdGtTZWxlY3Rpb24qLCBnaW50IGluZGV4KTsKKworZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiopOwor
CitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25SZWZTZWxlY3Rpb24oQXRrU2Vs
ZWN0aW9uKiwgZ2ludCBpbmRleCk7CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkdl
dFNlbGVjdGlvbkNvdW50KEF0a1NlbGVjdGlvbiopOworCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3Np
YmxlU2VsZWN0aW9uSXNDaGlsZFNlbGVjdGVkKEF0a1NlbGVjdGlvbiosIGdpbnQgaW5kZXgpOwor
CitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uUmVtb3ZlU2VsZWN0aW9uKEF0a1Nl
bGVjdGlvbiosIGdpbnQgaW5kZXgpOworCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0
aW9uU2VsZWN0QWxsU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiopOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYgLy8gV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lYjE2MjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcApAQCAtMCwwICsxLDI0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5
cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9y
ZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRp
YWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmgiCisKKyNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5TGlzdEJveC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIK
KyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsLmgiCisjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZShBdGtUYWJsZSogdGFibGUpCit7CisgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRSh0
YWJsZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVH
ZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKHRhYmxlKSk7Cit9CisKK3N0
YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsKEF0a1RhYmxlKiB0YWJsZSwgZ3VpbnQg
cm93LCBndWludCBjb2x1bW4pCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUg
PSBjb3JlKHRhYmxlKTsKKyAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4o
YWNjVGFibGUpLT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KTsKKyAgICByZXR1cm4g
MDsKK30KKworc3RhdGljIGdpbnQgY2VsbEluZGV4KEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4
Q2VsbCwgQWNjZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxlKQoreworICAgIC8vIENhbGN1bGF0ZSB0
aGUgY2VsbCdzIGluZGV4IGFzIGlmIHdlIGhhZCBhIHRyYWRpdGlvbmFsIEd0aysgdGFibGUgaW4K
KyAgICAvLyB3aGljaCBjZWxscyBhcmUgYWxsIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgdGFibGUs
IGFycmFuZ2VkIHJvdy1maXJzdC4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgYWxsQ2VsbHM7CisgICAgYXhUYWJsZS0+Y2VsbHMoYWxsQ2VsbHMp
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rvcjo6
aXRlcmF0b3IgcG9zaXRpb247CisgICAgcG9zaXRpb24gPSBzdGQ6OmZpbmQoYWxsQ2VsbHMuYmVn
aW4oKSwgYWxsQ2VsbHMuZW5kKCksIGF4Q2VsbCk7CisgICAgaWYgKHBvc2l0aW9uID09IGFsbENl
bGxzLmVuZCgpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIHBvc2l0aW9uIC0gYWxs
Q2VsbHMuYmVnaW4oKTsKK30KKworc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGxB
dEluZGV4KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOworICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFsbENlbGxzOworICAgICAgICBzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSktPmNlbGxzKGFsbENlbGxzKTsKKyAgICAg
ICAgaWYgKDAgPD0gaW5kZXggJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IGFsbENl
bGxzLnNpemUoKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjQ2VsbCA9
IGFsbENlbGxzLmF0KGluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4oYWNjQ2VsbCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZVRhYmxlSW50ZXJmYWNlSW5p
dChBdGtUYWJsZUlmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+cmVmX2F0ID0gd2Via2l0QWNj
ZXNzaWJsZVRhYmxlUmVmQXQ7CisgICAgaWZhY2UtPmdldF9pbmRleF9hdCA9IHdlYmtpdEFjY2Vz
c2libGVUYWJsZUdldEluZGV4QXQ7CisgICAgaWZhY2UtPmdldF9jb2x1bW5fYXRfaW5kZXggPSB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5BdEluZGV4OworICAgIGlmYWNlLT5nZXRfcm93
X2F0X2luZGV4ID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93QXRJbmRleDsKKyAgICBpZmFj
ZS0+Z2V0X25fY29sdW1ucyA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2x1bW5zOworICAg
IGlmYWNlLT5nZXRfbl9yb3dzID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvd3M7CisgICAg
aWZhY2UtPmdldF9jb2x1bW5fZXh0ZW50X2F0ID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29s
dW1uRXh0ZW50QXQ7CisgICAgaWZhY2UtPmdldF9yb3dfZXh0ZW50X2F0ID0gd2Via2l0QWNjZXNz
aWJsZVRhYmxlR2V0Um93RXh0ZW50QXQ7CisgICAgaWZhY2UtPmdldF9jb2x1bW5faGVhZGVyID0g
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVyOworICAgIGlmYWNlLT5nZXRfcm93
X2hlYWRlciA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0hlYWRlcjsKKyAgICBpZmFjZS0+
Z2V0X2NhcHRpb24gPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uOworICAgIGlmYWNl
LT5nZXRfY29sdW1uX2Rlc2NyaXB0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1u
RGVzY3JpcHRpb247CisgICAgaWZhY2UtPmdldF9yb3dfZGVzY3JpcHRpb24gPSB3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXRSb3dEZXNjcmlwdGlvbjsKK30KKworQXRrT2JqZWN0KiB3ZWJraXRBY2Nl
c3NpYmxlVGFibGVSZWZBdChBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50IGNvbHVtbikK
K3sKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3cs
IGNvbHVtbik7CisgICAgaWYgKCFheENlbGwpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBheENlbGwtPndyYXBwZXIoKTsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJ
bmRleEF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQoreworICAgIEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsK
KyAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIGF4VGFibGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGUqPihjb3JlKHRhYmxlKSk7CisgICAgcmV0dXJuIGNlbGxJbmRleChheENlbGwsIGF4
VGFibGUpOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkF0SW5kZXgo
QXRrVGFibGUqIHRhYmxlLCBnaW50IGluZGV4KQoreworICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqIGF4Q2VsbCA9IGNlbGxBdEluZGV4KHRhYmxlLCBpbmRleCk7CisgICAgaWYgKGF4Q2VsbCkg
eworICAgICAgICBwYWlyPGludCwgaW50PiBjb2x1bW5SYW5nZTsKKyAgICAgICAgYXhDZWxsLT5j
b2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAgICAgcmV0dXJuIGNvbHVtblJhbmdl
LmZpcnN0OworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK2dpbnQgd2Via2l0QWNjZXNzaWJs
ZVRhYmxlR2V0Um93QXRJbmRleChBdGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCit7CisgICAg
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbEF0SW5kZXgodGFibGUsIGluZGV4
KTsKKyAgICBpZiAoYXhDZWxsKSB7CisgICAgICAgIHBhaXI8aW50LCBpbnQ+IHJvd1JhbmdlOwor
ICAgICAgICBheENlbGwtPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgICAgICByZXR1cm4g
cm93UmFuZ2UuZmlyc3Q7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworZ2ludCB3ZWJraXRB
Y2Nlc3NpYmxlVGFibGVHZXROQ29sdW1ucyhBdGtUYWJsZSogdGFibGUpCit7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKKyAgICBpZiAoYWNjVGFibGUt
PmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5jb2x1bW5Db3VudCgpOworICAgIHJl
dHVybiAwOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Sb3dzKEF0a1RhYmxl
KiB0YWJsZSkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFi
bGUpOworICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSkt
PnJvd0NvdW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRh
YmxlR2V0Q29sdW1uRXh0ZW50QXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1
bW4pCit7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbCh0YWJsZSwg
cm93LCBjb2x1bW4pOworICAgIGlmIChheENlbGwpIHsKKyAgICAgICAgcGFpcjxpbnQsIGludD4g
Y29sdW1uUmFuZ2U7CisgICAgICAgIGF4Q2VsbC0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5n
ZSk7CisgICAgICAgIHJldHVybiBjb2x1bW5SYW5nZS5zZWNvbmQ7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0V4dGVudEF0KEF0a1Rh
YmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQoreworICAgIEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwqIGF4Q2VsbCA9IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsKKyAgICBpZiAoYXhD
ZWxsKSB7CisgICAgICAgIHBhaXI8aW50LCBpbnQ+IHJvd1JhbmdlOworICAgICAgICBheENlbGwt
PnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOworICAgICAgICByZXR1cm4gcm93UmFuZ2Uuc2Vjb25k
OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRDb2x1bW5IZWFkZXIoQXRrVGFibGUqIHRhYmxlLCBnaW50IGNvbHVtbikKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOworICAgIGlmIChh
Y2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFsbENvbHVtbkhlYWRl
cnM7CisgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KGFjY1RhYmxlKS0+
Y29sdW1uSGVhZGVycyhhbGxDb2x1bW5IZWFkZXJzKTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1u
Q291bnQgPSBhbGxDb2x1bW5IZWFkZXJzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNvbHVtbkNvdW50OyArK2spIHsKKyAgICAgICAgICAgIHBhaXI8aW50LCBpbnQ+
IGNvbHVtblJhbmdlOworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbCA9
IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihhbGxDb2x1bW5IZWFkZXJzLmF0
KGspLmdldCgpKTsKKyAgICAgICAgICAgIGNlbGwtPmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUmFu
Z2UpOworICAgICAgICAgICAgaWYgKGNvbHVtblJhbmdlLmZpcnN0IDw9IGNvbHVtbiAmJiBjb2x1
bW4gPCBjb2x1bW5SYW5nZS5maXJzdCArIGNvbHVtblJhbmdlLnNlY29uZCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYWxsQ29sdW1uSGVhZGVyc1trXS0+d3JhcHBlcigpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUdldFJvd0hlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQoreworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CisgICAgaWYgKGFjY1RhYmxlLT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYWxsUm93SGVhZGVyczsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5yb3dIZWFkZXJzKGFs
bFJvd0hlYWRlcnMpOworICAgICAgICB1bnNpZ25lZCByb3dDb3VudCA9IGFsbFJvd0hlYWRlcnMu
c2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgcm93Q291bnQ7ICsraykg
eworICAgICAgICAgICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7CisgICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbCo+KGFsbFJvd0hlYWRlcnMuYXQoaykuZ2V0KCkpOworICAgICAgICAgICAgY2VsbC0+cm93
SW5kZXhSYW5nZShyb3dSYW5nZSk7CisgICAgICAgICAgICBpZiAocm93UmFuZ2UuZmlyc3QgPD0g
cm93ICYmIHJvdyA8IHJvd1JhbmdlLmZpcnN0ICsgcm93UmFuZ2Uuc2Vjb25kKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhbGxSb3dIZWFkZXJzW2tdLT53cmFwcGVyKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKK0F0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxl
R2V0Q2FwdGlvbihBdGtUYWJsZSogdGFibGUpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
YWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKKyAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhY2NUYWJsZS0+bm9kZSgp
OworICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVU
YWcpKSB7CisgICAgICAgICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogY2FwdGlvbiA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihub2RlKS0+Y2FwdGlvbigpOworICAgICAgICAg
ICAgaWYgKGNhcHRpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKGNhcHRpb24tPnJlbmRlcmVyKCktPm5v
ZGUoKSktPndyYXBwZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor
Y29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkRlc2NyaXB0aW9uKEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCBjb2x1bW4pCit7CisgICAgQXRrT2JqZWN0KiBjb2x1bW5IZWFk
ZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIodGFibGUsIGNvbHVtbik7CisgICAgaWYg
KGNvbHVtbkhlYWRlciAmJiBBVEtfSVNfVEVYVChjb2x1bW5IZWFkZXIpKQorICAgICAgICByZXR1
cm4gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEFUS19URVhUKGNvbHVtbkhlYWRlciksIDAs
IC0xKTsKKworICAgIHJldHVybiAwOworfQorCitjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJs
ZVRhYmxlR2V0Um93RGVzY3JpcHRpb24oQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdykKK3sKKyAg
ICBBdGtPYmplY3QqIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcih0YWJsZSwg
cm93KTsKKyAgICBpZiAocm93SGVhZGVyICYmIEFUS19JU19URVhUKHJvd0hlYWRlcikpCisgICAg
ICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQVRLX1RFWFQocm93SGVhZGVy
KSwgMCwgLTEpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDE0MmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGFibGUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoK
KyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIElu
aXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0
ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBh
cmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlX2gKKyNk
ZWZpbmUgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlX2gKKworI2luY2x1ZGUgPGF0ay9h
dGsuaD4KKworR19CRUdJTl9ERUNMUworCit2b2lkIHdlYmtpdEFjY2Vzc2libGVUYWJsZUludGVy
ZmFjZUluaXQoQXRrVGFibGVJZmFjZSopOworCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVU
YWJsZVJlZkF0KEF0a1RhYmxlKiwgZ2ludCByb3csIGdpbnQgY29sdW1uKTsKKworZ2ludCB3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVHZXRJbmRleEF0KEF0a1RhYmxlKiwgZ2ludCByb3csIGdpbnQgY29s
dW1uKTsKKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5BdEluZGV4KEF0a1Rh
YmxlKiwgZ2ludCBpbmRleCk7CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93QXRJ
bmRleChBdGtUYWJsZSosIGdpbnQgaW5kZXgpOworCitnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUdldE5Db2x1bW5zKEF0a1RhYmxlKik7CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0
TlJvd3MoQXRrVGFibGUqKTsKKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5F
eHRlbnRBdChBdGtUYWJsZSosIGdpbnQgcm93LCBnaW50IGNvbHVtbik7CisKK2dpbnQgd2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0Um93RXh0ZW50QXQoQXRrVGFibGUqLCBnaW50IHJvdywgZ2ludCBj
b2x1bW4pOworCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRl
cihBdGtUYWJsZSosIGdpbnQgY29sdW1uKTsKKworQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRSb3dIZWFkZXIoQXRrVGFibGUqLCBnaW50IHJvdyk7CisKK0F0a09iamVjdCogd2Vi
a2l0QWNjZXNzaWJsZVRhYmxlR2V0Q2FwdGlvbihBdGtUYWJsZSopOworCitjb25zdCBnY2hhciog
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uRGVzY3JpcHRpb24oQXRrVGFibGUqLCBnaW50
IGNvbHVtbik7CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dEZXNj
cmlwdGlvbihBdGtUYWJsZSosIGdpbnQgcm93KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8v
IFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzZjQyYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtMCwwICsxLDg0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBB
bG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93
czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAq
IFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1p
Y3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZl
bG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkdPd25QdHIuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiSW5s
aW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCisjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCisjaW5jbHVkZSAi
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgor
CisjaW5jbHVkZSA8bGliZ2FpbC11dGlsL2dhaWwtdXRpbC5oPgorI2luY2x1ZGUgPHBhbmdvL3Bh
bmdvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0KQoreworICAgIGlmICghV0VCS0lUX0lTX0FDQ0VT
U0lCTEUodGV4dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHdlYmtpdEFjY2Vz
c2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKHRleHQpKTsKK30K
Kworc3RhdGljIGdjaGFyKiB1dGY4U3Vic3RyKGNvbnN0IGdjaGFyKiBzdHJpbmcsIGdpbnQgc3Rh
cnQsIGdpbnQgZW5kKQoreworICAgIEFTU0VSVChzdHJpbmcpOworICAgIGdsb25nIHN0ckxlbiA9
IGdfdXRmOF9zdHJsZW4oc3RyaW5nLCAtMSk7CisgICAgaWYgKHN0YXJ0ID4gc3RyTGVuIHx8IGVu
ZCA+IHN0ckxlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZ2NoYXIqIHN0YXJ0UHRyID0gZ191
dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgc3RhcnQpOworICAgIGdzaXplIGxlbkluQnl0
ZXMgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIoc3RyaW5nLCBlbmQgKyAxKSAtICBzdGFydFB0
cjsKKyAgICBnY2hhciogb3V0cHV0ID0gc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYzAobGVu
SW5CeXRlcyArIDEpKTsKKyAgICByZXR1cm4gZ191dGY4X3N0cm5jcHkob3V0cHV0LCBzdGFydFB0
ciwgZW5kIC0gc3RhcnQgKyAxKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgY29tcGxl
dGVseSBnZW5lcmFsLCBpcyBpdCdzIHRpZWQgdG8gdGhlCisvLyBpbnRlcm5hbHMgb2YgV2ViQ29y
ZSdzIHRleHQgcHJlc2VudGF0aW9uLgorc3RhdGljIGdjaGFyKiBjb252ZXJ0VW5pQ2hhclRvVVRG
OChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgZ2ludCBsZW5ndGgsIGludCBmcm9tLCBpbnQgdG8p
Cit7CisgICAgQ1N0cmluZyBzdHJpbmdVVEY4ID0gVVRGOEVuY29kaW5nKCkuZW5jb2RlKGNoYXJh
Y3RlcnMsIGxlbmd0aCwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgZ2NoYXIq
IHV0ZjhTdHJpbmcgPSB1dGY4U3Vic3RyKHN0cmluZ1VURjguZGF0YSgpLCBmcm9tLCB0byk7Cisg
ICAgaWYgKCFnX3V0ZjhfdmFsaWRhdGUodXRmOFN0cmluZywgLTEsIDApKSB7CisgICAgICAgIGdf
ZnJlZSh1dGY4U3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGdzaXplIGxl
biA9IHN0cmxlbih1dGY4U3RyaW5nKTsKKyAgICBHU3RyaW5nKiByZXQgPSBnX3N0cmluZ19uZXdf
bGVuKDAsIGxlbik7CisgICAgZ2NoYXIqIHB0ciA9IHV0ZjhTdHJpbmc7CisKKyAgICAvLyBXZWJD
b3JlIGludHJvZHVjZXMgbGluZSBicmVha3MgaW4gdGhlIHRleHQgdGhhdCBkbyBub3QgcmVmbGVj
dAorICAgIC8vIHRoZSBsYXlvdXQgeW91IHNlZSBvbiB0aGUgc2NyZWVuLCByZXBsYWNlIHRoZW0g
d2l0aCBzcGFjZXMKKyAgICB3aGlsZSAobGVuID4gMCkgeworICAgICAgICBnaW50IGluZGV4LCBz
dGFydDsKKyAgICAgICAgcGFuZ29fZmluZF9wYXJhZ3JhcGhfYm91bmRhcnkocHRyLCBsZW4sICZp
bmRleCwgJnN0YXJ0KTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2xlbihyZXQsIHB0ciwgaW5k
ZXgpOworICAgICAgICBpZiAoaW5kZXggPT0gc3RhcnQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZ19zdHJpbmdfYXBwZW5kX2MocmV0LCAnICcpOworICAgICAgICBwdHIgKz0gc3RhcnQ7
CisgICAgICAgIGxlbiAtPSBzdGFydDsKKyAgICB9CisKKyAgICBnX2ZyZWUodXRmOFN0cmluZyk7
CisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmV0LCBGQUxTRSk7Cit9CisKK2djaGFyKiB0ZXh0
Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBHU3RyaW5nKiByZXN1
bHRUZXh0ID0gZ19zdHJpbmdfbmV3KDApOworCisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0UpOworCisgICAgLy8gRm9yIFJl
bmRlckJsb2NrcywgcGllY2UgdG9nZXRoZXIgdGhlIHRleHQgZnJvbSB0aGUgUmVuZGVyVGV4dCBv
YmplY3RzIHRoZXkgY29udGFpbi4KKyAgICBmb3IgKFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVu
ZGVyZXItPmZpcnN0Q2hpbGQoKTsgb2JqZWN0OyBvYmplY3QgPSBvYmplY3QtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNCUigpKSB7CisgICAgICAgICAgICBnX3N0cmlu
Z19hcHBlbmQocmVzdWx0VGV4dCwgIlxuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlbmRlclRleHQqIHJlbmRlclRleHQ7CisgICAgICAgIGlmIChvYmpl
Y3QtPmlzVGV4dCgpKQorICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChvYmpl
Y3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmlzUmVwbGFjZWQo
KSkKKyAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfdW5pY2hhcihyZXN1bHRUZXh0LCBv
YmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcik7CisKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y2hlY2sgY2hpbGRyZW4sIGlmIGFueSwgdG8gY29uc2lkZXIgd2hlbgorICAgICAgICAgICAgLy8g
Y3VycmVudCBvYmplY3QgaXMgbm90IGEgdGV4dCBvYmplY3QgYnV0IHNvbWUgb2YgaXRzCisgICAg
ICAgICAgICAvLyBjaGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBtaXNzIHRob3NlIHBvcnRp
b25zIG9mCisgICAgICAgICAgICAvLyB0ZXh0IGJ5IG5vdCBwcm9wZXJseSBoYW5kbGluZyB0aG9z
ZSBzaXR1YXRpb25zCisgICAgICAgICAgICBpZiAob2JqZWN0LT5maXJzdENoaWxkKCkpCisgICAg
ICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIHRleHRGb3JSZW5kZXJlcihv
YmplY3QpKTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBJ
bmxpbmVUZXh0Qm94KiBib3ggPSByZW5kZXJUZXh0ID8gcmVuZGVyVGV4dC0+Zmlyc3RUZXh0Qm94
KCkgOiAwOworICAgICAgICB3aGlsZSAoYm94KSB7CisgICAgICAgICAgICBnY2hhciogdGV4dCA9
IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJlbmRlclRleHQtPmNoYXJhY3RlcnMoKSwgcmVuZGVyVGV4
dC0+dGV4dExlbmd0aCgpLCBib3gtPnN0YXJ0KCksIGJveC0+ZW5kKCkpOworICAgICAgICAgICAg
Z19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIHRleHQpOworICAgICAgICAgICAgLy8gTmV3bGlu
ZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBj
aGVjaworICAgICAgICAgICAgLy8gYmVmb3JlIGFkZGluZyBhIG5ld2xpbmUgaW4gdGhlIGxheW91
dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50ICM3OC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0
IHNpYmxpbmcgaXMgYSBCUiwgd2UnbGwgYWRkIHRoZSBuZXdsaW5lIHdoZW4gd2UgZXhhbWluZSB0
aGF0IGNoaWxkLgorCisgICAgICAgICAgICBpZiAoIWJveC0+bmV4dE9uTGluZUV4aXN0cygpICYm
ICghb2JqZWN0LT5uZXh0U2libGluZygpIHx8ICFvYmplY3QtPm5leHRTaWJsaW5nKCktPmlzQlIo
KSkpCisgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsICJcbiIpOwor
ICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBtYXJrZXIgZm9yIGxpc3QgaXRlbSBpbiB0
aGUgcmlnaHQgcGxhY2UsIGlmIHByZXNlbnQKKyAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0o
KSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVy
ZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxl
KCktPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAgIGdfc3RyaW5nX3ByZXBlbmQocmVz
dWx0VGV4dCwgbWFya2VyVGV4dC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgpLmRhdGEo
KSk7CisgICAgfQorCisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0Up
OworfQorCitnY2hhciogdGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0KQoreworICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKKworICAgIC8vIEZv
ciB0ZXh0IGNvbnRyb2xzLCB3ZSBjYW4gZ2V0IHRoZSB0ZXh0IGxpbmUgYnkgbGluZS4KKyAgICBp
ZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CisgICAgICAgIHVuc2lnbmVkIHRleHRM
ZW5ndGggPSBjb3JlT2JqZWN0LT50ZXh0TGVuZ3RoKCk7CisgICAgICAgIGludCBsaW5lTnVtYmVy
ID0gMDsKKyAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT5kb0FYUmFu
Z2VGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICB3aGlsZSAocmFuZ2UubGVuZ3RoKSB7Cisg
ICAgICAgICAgICAvLyBXaGVuIGEgbGluZSBvZiB0ZXh0IHdyYXBzIGluIGEgdGV4dCBhcmVhLCB0
aGUgZmluYWwgc3BhY2UgaXMgcmVtb3ZlZC4KKyAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydCAr
IHJhbmdlLmxlbmd0aCA8IHRleHRMZW5ndGgpCisgICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3Ro
IC09IDE7CisgICAgICAgICAgICBTdHJpbmcgbGluZVRleHQgPSBjb3JlT2JqZWN0LT5kb0FYU3Ry
aW5nRm9yUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgbGlu
ZVRleHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAi
XG4iKTsKKyAgICAgICAgICAgIHJhbmdlID0gY29yZU9iamVjdC0+ZG9BWFJhbmdlRm9yTGluZSgr
K2xpbmVOdW1iZXIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjb3JlT2JqZWN0LT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICBHT3duUHRyPGdjaGFyPiByZW5k
ZXJlclRleHQodGV4dEZvclJlbmRlcmVyKGNvcmVPYmplY3QtPnJlbmRlcmVyKCkpKTsKKyAgICAg
ICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgcmVuZGVyZXJUZXh0LmdldCgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKK30KKworc3RhdGljIEdhaWxUZXh0
VXRpbCogZ2V0R2FpbFRleHRVdGlsRm9yQXRrKEF0a1RleHQqIHRleHRPYmplY3QpCit7CisgICAg
R2FpbFRleHRVdGlsKiBnYWlsVGV4dFV0aWwgPSBnYWlsX3RleHRfdXRpbF9uZXcoKTsKKyAgICBn
YWlsX3RleHRfdXRpbF90ZXh0X3NldHVwKGdhaWxUZXh0VXRpbCwgd2Via2l0QWNjZXNzaWJsZVRl
eHRHZXRUZXh0KHRleHRPYmplY3QsIDAsIC0xKSk7CisgICAgcmV0dXJuIGdhaWxUZXh0VXRpbDsK
K30KKworc3RhdGljIFBhbmdvTGF5b3V0KiBnZXRQYW5nb0xheW91dEZvckF0ayhBdGtUZXh0KiB0
ZXh0T2JqZWN0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHRPYmplY3QpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC0+dmlldygpLT5ob3N0V2luZG93KCk7Cisg
ICAgaWYgKCFob3N0V2luZG93KQorICAgICAgICByZXR1cm4gMDsKKyAgICBQbGF0Zm9ybVBhZ2VD
bGllbnQgd2ViVmlldyA9IGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIGlm
ICghd2ViVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBDcmVhdGUgYSBzdHJpbmcg
d2l0aCB0aGUgbGF5b3V0IGFzIGl0IGFwcGVhcnMgb24gdGhlIHNjcmVlbgorICAgIFBhbmdvTGF5
b3V0KiBsYXlvdXQgPSBndGtfd2lkZ2V0X2NyZWF0ZV9wYW5nb19sYXlvdXQoc3RhdGljX2Nhc3Q8
R3RrV2lkZ2V0Kj4od2ViVmlldyksIHRleHRGb3JPYmplY3QoY29yZU9iamVjdCkpOworICAgIHJl
dHVybiBsYXlvdXQ7Cit9CisKK3N0YXRpYyBpbnQgYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9i
amVjdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBp
bXBsZW1lbnRhdGlvbiBvZiBiYXNlbGluZVBvc2l0aW9uIG9yaWdpbmF0ZXMgZnJvbSBSZW5kZXJP
YmplY3QuY3BwIGFuZCB3YXMKKyAgICAvLyByZW1vdmVkIGluIHI3MDA3Mi4gVGhlIGltcGxlbWVu
dGF0aW9uIGxvb2tzIGluY29ycmVjdCB0aG91Z2gsIGJlY2F1c2UgdGhpcyBpcyBub3QgdGhlCisg
ICAgLy8gYmFzZWxpbmUgb2YgdGhlIHVuZGVybHlpbmcgUmVuZGVyT2JqZWN0LCBidXQgb2YgdGhl
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzID0gcmVuZGVyT2JqZWN0LT5maXJzdExpbmVTdHlsZSgpLT5mb250TWV0cmljcygpOwor
ICAgIHJldHVybiBmb250TWV0cmljcy5hc2NlbnQoKSArIChyZW5kZXJPYmplY3QtPmZpcnN0TGlu
ZVN0eWxlKCktPmNvbXB1dGVkTGluZUhlaWdodCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8g
MjsKK30KKworc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNz
aWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCit7CisgICAg
aWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisKKyAgICBBdGtB
dHRyaWJ1dGVTZXQqIHJlc3VsdCA9IDA7CisgICAgR093blB0cjxnY2hhcj4gYnVmZmVyKGdfc3Ry
ZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9udFNpemUoKSkpOworICAgIHJlc3VsdCA9IGFkZEF0
dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhU
X0FUVFJfU0laRSksIGJ1ZmZlci5nZXQoKSk7CisKKyAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAg
aWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJp
bnRmKCIlaSwlaSwlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnQ29s
b3IucmVkKCksIGJnQ29sb3IuZ3JlZW4oKSwgYmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgcmVz
dWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoQVRLX1RFWFRfQVRUUl9CR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CisgICAgfQorCisgICAg
Q29sb3IgZmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcik7CisgICAgaWYgKGZnQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGJ1ZmZlci5zZXQo
Z19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZnQ29sb3IucmVkKCksIGZnQ29sb3IuZ3JlZW4oKSwgZmdDb2xvci5ibHVlKCkpKTsK
KyAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7Cisg
ICAgfQorCisgICAgaW50IGJhc2VsaW5lUG9zaXRpb247CisgICAgYm9vbCBpbmNsdWRlUmlzZSA9
IHRydWU7CisgICAgc3dpdGNoIChzdHlsZS0+dmVydGljYWxBbGlnbigpKSB7CisgICAgY2FzZSBT
VUI6CisgICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAtMSAqIGJhc2VsaW5lUG9zaXRpb25Gb3JS
ZW5kZXJPYmplY3QocmVuZGVyZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNVUEVSOgor
ICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVj
dChyZW5kZXJlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQkFTRUxJTkU6CisgICAgICAg
IGJhc2VsaW5lUG9zaXRpb24gPSAwOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBpbmNsdWRlUmlzZSA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoaW5jbHVkZVJpc2UpIHsKKyAgICAgICAgYnVmZmVyLnNldChnX3N0cmR1cF9wcmludGYoIiVp
IiwgYmFzZWxpbmVQb3NpdGlvbikpOworICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1Nl
dChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1JJU0Up
LCBidWZmZXIuZ2V0KCkpOworICAgIH0KKworICAgIGlmICghc3R5bGUtPnRleHRJbmRlbnQoKS5p
c1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGludCBpbmRlbnRhdGlvbiA9IHN0eWxlLT50ZXh0SW5k
ZW50KCkuY2FsY1ZhbHVlKG9iamVjdC0+c2l6ZSgpLndpZHRoKCkpOworICAgICAgICBidWZmZXIu
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBpbmRlbnRhdGlvbikpOworICAgICAgICByZXN1bHQg
PSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShB
VEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZlci5nZXQoKSk7CisgICAgfQorCisgICAgU3RyaW5n
IGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmco
KTsKKyAgICBpZiAoZm9udEZhbWlseU5hbWUubGVmdCg4KSA9PSAiLXdlYmtpdC0iKQorICAgICAg
ICBmb250RmFtaWx5TmFtZSA9IGZvbnRGYW1pbHlOYW1lLnN1YnN0cmluZyg4KTsKKworICAgIHJl
c3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfRkFNSUxZX05BTUUpLCBmb250RmFtaWx5TmFtZS51dGY4KCkuZGF0
YSgpKTsKKworICAgIGludCBmb250V2VpZ2h0ID0gLTE7CisgICAgc3dpdGNoIChzdHlsZS0+Zm9u
dCgpLndlaWdodCgpKSB7CisgICAgY2FzZSBGb250V2VpZ2h0MTAwOgorICAgICAgICBmb250V2Vp
Z2h0ID0gMTAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQyMDA6CisgICAg
ICAgIGZvbnRXZWlnaHQgPSAyMDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFdlaWdo
dDMwMDoKKyAgICAgICAgZm9udFdlaWdodCA9IDMwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb250V2VpZ2h0NDAwOgorICAgICAgICBmb250V2VpZ2h0ID0gNDAwOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSA1MDA7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAgICAgICAgZm9udFdlaWdo
dCA9IDYwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250V2VpZ2h0NzAwOgorICAgICAg
ICBmb250V2VpZ2h0ID0gNzAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQ4
MDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSA4MDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rm9udFdlaWdodDkwMDoKKyAgICAgICAgZm9udFdlaWdodCA9IDkwMDsKKyAgICB9CisgICAgaWYg
KGZvbnRXZWlnaHQgPiAwKSB7CisgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIl
aSIsIGZvbnRXZWlnaHQpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVz
dWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9XRUlHSFQpLCBi
dWZmZXIuZ2V0KCkpOworICAgIH0KKworICAgIHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7
CisgICAgY2FzZSBUQUFVVE86CisgICAgY2FzZSBUQVNUQVJUOgorICAgIGNhc2UgVEFFTkQ6Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTEVGVDoKKyAgICBjYXNlIFdFQktJVF9MRUZUOgorICAg
ICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0
ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04pLCAibGVmdCIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFJJR0hUOgorICAgIGNhc2UgV0VCS0lUX1JJR0hUOgorICAgICAg
ICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04pLCAicmlnaHQiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDRU5URVI6CisgICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgorICAgICAg
ICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04pLCAiY2VudGVyIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSlVTVElGWToKKyAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRl
VG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9K
VVNUSUZJQ0FUSU9OKSwgImZpbGwiKTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBhZGRBdHRyaWJ1
dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRS
X1VOREVSTElORSksIChzdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIFVOREVSTElORSkgPyAic2lu
Z2xlIiA6ICJub25lIik7CisKKyAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQs
IGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwgc3R5bGUt
PmZvbnQoKS5pdGFsaWMoKSA/ICJpdGFsaWMiIDogIm5vcm1hbCIpOworCisgICAgcmVzdWx0ID0g
YWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRL
X1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdIKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpICYgTElO
RV9USFJPVUdIKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisgICAgcmVzdWx0ID0gYWRkQXR0cmli
dXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9JTlZJU0lCTEUpLCAoc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBISURERU4pID8gInRydWUiIDog
ImZhbHNlIik7CisKKyAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0VESVRBQkxFKSwgb2JqZWN0LT5p
c1JlYWRPbmx5KCkgPyAiZmFsc2UiIDogInRydWUiKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBnaW50IGNvbXBhcmVBdHRyaWJ1dGUoY29uc3QgQXRrQXR0cmlidXRlKiBhLCBj
b25zdCBBdGtBdHRyaWJ1dGUqIGIpCit7CisgICAgcmV0dXJuIGdfc3RyY21wMChhLT5uYW1lLCBi
LT5uYW1lKSB8fCBnX3N0cmNtcDAoYS0+dmFsdWUsIGItPnZhbHVlKTsKK30KKworLy8gUmV0dXJu
cyBhbiBBdGtBdHRyaWJ1dGVTZXQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYXR0cmlidXRlU2V0MSB3
aGljaAorLy8gYXJlIGVpdGhlciBub3QgcHJlc2VudCBvciBkaWZmZXJlbnQgaW4gYXR0cmlidXRl
U2V0Mi4gTmVpdGhlcgorLy8gYXR0cmlidXRlU2V0MSBub3IgYXR0cmlidXRlU2V0MiBzaG91bGQg
YmUgdXNlZCBhZnRlciBjYWxsaW5nIHRoaXMuCitzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBhdHRy
aWJ1dGVTZXREaWZmZXJlbmNlKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0MSwgQXRrQXR0
cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQyKQoreworICAgIGlmICghYXR0cmlidXRlU2V0MikKKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDE7CisKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGN1cnJl
bnRTZXQgPSBhdHRyaWJ1dGVTZXQxOworICAgIEF0a0F0dHJpYnV0ZVNldCogZm91bmQ7CisgICAg
QXRrQXR0cmlidXRlU2V0KiB0b0RlbGV0ZSA9IDA7CisKKyAgICB3aGlsZSAoY3VycmVudFNldCkg
eworICAgICAgICBmb3VuZCA9IGdfc2xpc3RfZmluZF9jdXN0b20oYXR0cmlidXRlU2V0MiwgY3Vy
cmVudFNldC0+ZGF0YSwgKEdDb21wYXJlRnVuYyljb21wYXJlQXR0cmlidXRlKTsKKyAgICAgICAg
aWYgKGZvdW5kKSB7CisgICAgICAgICAgICBBdGtBdHRyaWJ1dGVTZXQqIG5leHRTZXQgPSBjdXJy
ZW50U2V0LT5uZXh0OworICAgICAgICAgICAgdG9EZWxldGUgPSBnX3NsaXN0X3ByZXBlbmQodG9E
ZWxldGUsIGN1cnJlbnRTZXQtPmRhdGEpOworICAgICAgICAgICAgYXR0cmlidXRlU2V0MSA9IGdf
c2xpc3RfZGVsZXRlX2xpbmsoYXR0cmlidXRlU2V0MSwgY3VycmVudFNldCk7CisgICAgICAgICAg
ICBjdXJyZW50U2V0ID0gbmV4dFNldDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjdXJy
ZW50U2V0ID0gY3VycmVudFNldC0+bmV4dDsKKyAgICB9CisKKyAgICBhdGtfYXR0cmlidXRlX3Nl
dF9mcmVlKGF0dHJpYnV0ZVNldDIpOworICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUodG9EZWxl
dGUpOworICAgIHJldHVybiBhdHRyaWJ1dGVTZXQxOworfQorCitzdGF0aWMgZ3VpbnQgYWNjZXNz
aWJpbGl0eU9iamVjdExlbmd0aChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCit7
CisgICAgLy8gTm9uIHJlbmRlciBvYmplY3RzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50Cisg
ICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIC8vIEZvciB0aG9zZSBvYmplY3RzIGltcGxlbWVudGluZyB0aGUgQXRr
VGV4dCBpbnRlcmZhY2Ugd2UgdXNlIHRoZQorICAgIC8vIHdlbGwga25vd24gQVBJIHRvIGFsd2F5
cyBnZXQgdGhlIHRleHQgaW4gYSBjb25zaXN0ZW50IHdheQorICAgIEF0a09iamVjdCogYXRrT2Jq
ID0gQVRLX09CSkVDVChvYmplY3QtPndyYXBwZXIoKSk7CisgICAgaWYgKEFUS19JU19URVhUKGF0
a09iaikpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gdGV4dCh3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFRleHQoQVRLX1RFWFQoYXRrT2JqKSwgMCwgLTEpKTsKKyAgICAgICAgcmV0dXJuIGdfdXRm
OF9zdHJsZW4odGV4dC5nZXQoKSwgLTEpOworICAgIH0KKworICAgIC8vIEV2ZW4gaWYgd2UgZG9u
J3QgZXhwb3NlIGxpc3QgbWFya2VycyB0byBBc3Npc3RpdmUKKyAgICAvLyBUZWNobm9sb2dpZXMs
IHdlIG5lZWQgdG8gaGF2ZSBhIHdheSB0byBtZWFzdXJlIHRoZWlyIGxlbmd0aAorICAgIC8vIGZv
ciB0aG9zZSBjYXNlcyB3aGVuIGl0J3MgbmVlZGVkIHRvIHRha2UgaXQgaW50byBhY2NvdW50Cisg
ICAgLy8gc2VwYXJhdGVseSAoYXMgaW4gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldCkK
KyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5kZXJlcigpOworICAgIGlm
IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0TWFya2VyKCkpIHsKKyAgICAgICAgUmVuZGVy
TGlzdE1hcmtlciogbWFya2VyID0gdG9SZW5kZXJMaXN0TWFya2VyKHJlbmRlcmVyKTsKKyAgICAg
ICAgcmV0dXJuIG1hcmtlci0+dGV4dCgpLmxlbmd0aCgpICsgbWFya2VyLT5zdWZmaXgoKS5sZW5n
dGgoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3QqIGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQoY29uc3QgQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0LCBndWludCBvZmZzZXQsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBn
aW50KiBlbmRPZmZzZXQpCit7CisgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcmVzdWx0
OworICAgIGd1aW50IGxlbmd0aCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgob2JqZWN0KTsK
KyAgICBpZiAobGVuZ3RoID4gb2Zmc2V0KSB7CisgICAgICAgICpzdGFydE9mZnNldCA9IDA7Cisg
ICAgICAgICplbmRPZmZzZXQgPSBsZW5ndGg7CisgICAgICAgIHJlc3VsdCA9IG9iamVjdDsKKyAg
ICB9IGVsc2UgeworICAgICAgICAqc3RhcnRPZmZzZXQgPSAtMTsKKyAgICAgICAgKmVuZE9mZnNl
dCA9IC0xOworICAgICAgICByZXN1bHQgPSAwOworICAgIH0KKworICAgIGlmICghb2JqZWN0LT5m
aXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOworICAgIGd1aW50IGN1cnJlbnRP
ZmZzZXQgPSAwOworICAgIGd1aW50IGNoaWxkUG9zaXRpb24gPSAwOworICAgIHdoaWxlIChjaGls
ZCAmJiBjdXJyZW50T2Zmc2V0IDw9IG9mZnNldCkgeworICAgICAgICBndWludCBjaGlsZExlbmd0
aCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY2hpbGQpOworICAgICAgICBjdXJyZW50T2Zm
c2V0ID0gY2hpbGRMZW5ndGggKyBjaGlsZFBvc2l0aW9uOworICAgICAgICBpZiAoY3VycmVudE9m
ZnNldCA+IG9mZnNldCkgeworICAgICAgICAgICAgZ2ludCBjaGlsZFN0YXJ0T2Zmc2V0OworICAg
ICAgICAgICAgZ2ludCBjaGlsZEVuZE9mZnNldDsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3QqIGdyYW5kQ2hpbGQgPSBnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0
KGNoaWxkLCBvZmZzZXQtY2hpbGRQb3NpdGlvbiwgICZjaGlsZFN0YXJ0T2Zmc2V0LCAmY2hpbGRF
bmRPZmZzZXQpOworICAgICAgICAgICAgaWYgKGNoaWxkU3RhcnRPZmZzZXQgPj0gMCkgeworICAg
ICAgICAgICAgICAgICpzdGFydE9mZnNldCA9IGNoaWxkU3RhcnRPZmZzZXQgKyBjaGlsZFBvc2l0
aW9uOworICAgICAgICAgICAgICAgICplbmRPZmZzZXQgPSBjaGlsZEVuZE9mZnNldCArIGNoaWxk
UG9zaXRpb247CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ3JhbmRDaGlsZDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoaWxkUG9zaXRpb24gKz0gY2hp
bGRMZW5ndGg7CisgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBBdGtBdHRyaWJ1
dGVTZXQqIGdldFJ1bkF0dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5T2JqZWN0KGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3QqIGVsZW1lbnQsIGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwg
Z2ludCogZW5kT2Zmc2V0KQoreworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxk
ID0gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldChlbGVtZW50LCBvZmZzZXQsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAgKnN0YXJ0T2Zm
c2V0ID0gLTE7CisgICAgICAgICplbmRPZmZzZXQgPSAtMTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgQXRrQXR0cmlidXRlU2V0KiBkZWZhdWx0QXR0cmlidXRlcyA9IGdldEF0dHJp
YnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoZWxlbWVudCk7CisgICAgQXRrQXR0cmlidXRl
U2V0KiBjaGlsZEF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KGNoaWxkKTsKKworICAgIHJldHVybiBhdHRyaWJ1dGVTZXREaWZmZXJlbmNlKGNoaWxkQXR0
cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgSW50UmVjdCB0ZXh0RXh0
ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGxlbmd0aCwgQXRrQ29v
cmRUeXBlIGNvb3JkcykKK3sKKyAgICBnY2hhciogdGV4dENvbnRlbnQgPSB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFRleHQodGV4dCwgc3RhcnRPZmZzZXQsIC0xKTsKKyAgICBnaW50IHRleHRMZW5n
dGggPSBnX3V0Zjhfc3RybGVuKHRleHRDb250ZW50LCAtMSk7CisKKyAgICAvLyBUaGUgZmlyc3Qg
Y2FzZSAoZW5kT2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywgYnV0IHNlZW1zIGJyb2tlbiBmb3Ig
YWxsIEd0aysgYXBwcy4KKyAgICBnaW50IHJhbmdlTGVuZ3RoID0gbGVuZ3RoOworICAgIGlmIChy
YW5nZUxlbmd0aCA8IDAgfHwgcmFuZ2VMZW5ndGggPiB0ZXh0TGVuZ3RoKQorICAgICAgICByYW5n
ZUxlbmd0aCA9IHRleHRMZW5ndGg7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCA9IGNvcmUodGV4dCk7CisKKyAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3JlT2JqZWN0LT5kb0FY
Qm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRPZmZzZXQsIHJhbmdlTGVuZ3RoKSk7
CisgICAgc3dpdGNoIChjb29yZHMpIHsKKyAgICBjYXNlIEFUS19YWV9TQ1JFRU46CisgICAgICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpKQorICAgICAg
ICAgICAgZXh0ZW50cyA9IGRvY3VtZW50LT52aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4oZXh0ZW50
cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKKyAgICAgICAgLy8g
Tm8tb3AKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGV4dGVudHM7Cit9CisK
K3N0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBnaW50JiBzdGFy
dE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0KQoreworICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVhcmx5
IHJldHVybiBpZiB0aGUgc2VsZWN0aW9uIGRvZXNuJ3QgYWZmZWN0IHRoZSBzZWxlY3RlZCBub2Rl
LgorICAgIGlmICghc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlv
bikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgZXhhY3Qg
c3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgaW4gdGhlCisgICAgLy8gc2VsZWN0ZWQgbm9kZSB0aGF0
IGludGVyc2VjdHMgdGhlIHNlbGVjdGlvbiwgdG8gbGF0ZXIgb24gZ2V0CisgICAgLy8gdGhlIHJp
Z2h0IHZhbHVlcyBmb3IgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5kIG9mZnNldHMuCisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUG9zaXRpb24gbm9kZVJhbmdlU3RhcnQ7CisgICAg
UG9zaXRpb24gbm9kZVJhbmdlRW5kOworICAgIE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0LT5ub2Rl
KCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOworCisgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBu
b2RlIGFuZCBpdHMgZmlyc3QKKyAgICAvLyBwb3NzaWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRo
ZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0CisgICAgLy8gbm9kZVJhbmdlU3RhcnQgdG8gdGhhdCBw
b3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncworICAgIC8vIHN0YXJ0IHBvc2l0
aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8gdGhlIG5vZGUgYW55d2F5KS4KKyAgICBOb2RlKiBmaXJz
dExlYWZOb2RlID0gbm9kZS0+Zmlyc3REZXNjZW5kYW50KCk7CisgICAgaWYgKHNlbFJhbmdlLT5p
c1BvaW50SW5SYW5nZShmaXJzdExlYWZOb2RlLCAwLCBlYykpCisgICAgICAgIG5vZGVSYW5nZVN0
YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGZpcnN0TGVhZk5vZGUpOworICAgIGVs
c2UKKyAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBzZWxSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwor
CisgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBp
dHMgbGFzdAorICAgIC8vIHBvc3NpYmxlIHBvc2l0aW9uIGlzIGFsc28gaW4gdGhlIHNlbGVjdGlv
biwgd2UgbXVzdCBzZXQKKyAgICAvLyBub2RlUmFuZ2VFbmQgdG8gdGhhdCBwb3NpdGlvbiwgb3Ro
ZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncworICAgIC8vIGVuZCBwb3NpdGlvbiAoaXQgd291bGQg
YmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCisgICAgTm9kZSogbGFzdExlYWZOb2RlID0gbm9k
ZS0+bGFzdERlc2NlbmRhbnQoKTsKKyAgICBpZiAoc2VsUmFuZ2UtPmlzUG9pbnRJblJhbmdlKGxh
c3RMZWFmTm9kZSwgbGFzdE9mZnNldEluTm9kZShsYXN0TGVhZk5vZGUpLCBlYykpCisgICAgICAg
IG5vZGVSYW5nZUVuZCA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobGFzdExlYWZOb2RlKTsK
KyAgICBlbHNlCisgICAgICAgIG5vZGVSYW5nZUVuZCA9IHNlbFJhbmdlLT5lbmRQb3NpdGlvbigp
OworCisgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCByYW5nZSBpbnNp
ZGUgdGhlIG9iamVjdC4KKyAgICBQb3NpdGlvbiBwYXJlbnRGaXJzdFBvc2l0aW9uID0gZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VJblBh
cmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgcGFyZW50Rmlyc3RQb3NpdGlv
biwgbm9kZVJhbmdlU3RhcnQpOworCisgICAgLy8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVu
ZCBvZmZzZXRzLgorICAgIHN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChy
YW5nZUluUGFyZW50LmdldCgpLCB0cnVlKTsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRo
ZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVu
ZGVyZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVu
ZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBz
dGFydE9mZnNldCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOworICAgIH0KKworICAgIFJlZlB0cjxS
YW5nZT4gbm9kZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFu
Z2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKKyAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLmdldCgpLCB0cnVlKTsKK30KKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQoQXRrVGV4dElmYWNlKiBpZmFjZSkK
K3sKKyAgICBpZmFjZS0+Z2V0X3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQ7Cisg
ICAgaWZhY2UtPmdldF90ZXh0X2FmdGVyX29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
VGV4dEFmdGVyT2Zmc2V0OworICAgIGlmYWNlLT5nZXRfdGV4dF9hdF9vZmZzZXQgPSB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFRleHRBdE9mZnNldDsKKyAgICBpZmFjZS0+Z2V0X3RleHRfYmVmb3Jl
X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEJlZm9yZU9mZnNldDsKKyAgICBp
ZmFjZS0+Z2V0X2NoYXJhY3Rlcl9hdF9vZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENo
YXJhY3RlckF0T2Zmc2V0OworICAgIGlmYWNlLT5nZXRfY2FyZXRfb2Zmc2V0ID0gd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRDYXJldE9mZnNldDsKKyAgICBpZmFjZS0+Z2V0X3J1bl9hdHRyaWJ1dGVz
ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVzOworICAgIGlmYWNlLT5nZXRf
ZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXREZWZhdWx0QXR0cmli
dXRlczsKKyAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9leHRlbnRzID0gd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRDaGFyYWN0ZXJFeHRlbnRzOworICAgIGlmYWNlLT5nZXRfcmFuZ2VfZXh0ZW50cyA9
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0UmFuZ2VFeHRlbnRzOworICAgIGlmYWNlLT5nZXRfY2hh
cmFjdGVyX2NvdW50ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJDb3VudDsKKyAg
ICBpZmFjZS0+Z2V0X29mZnNldF9hdF9wb2ludCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0T2Zm
c2V0QXRQb2ludDsKKyAgICBpZmFjZS0+Z2V0X25fc2VsZWN0aW9ucyA9IHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0TlNlbGVjdGlvbnM7CisgICAgaWZhY2UtPmdldF9zZWxlY3Rpb24gPSB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFNlbGVjdGlvbjsKKyAgICBpZmFjZS0+YWRkX3NlbGVjdGlvbiA9IHdl
YmtpdEFjY2Vzc2libGVUZXh0QWRkU2VsZWN0aW9uOworICAgIGlmYWNlLT5yZW1vdmVfc2VsZWN0
aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRSZW1vdmVTZWxlY3Rpb247CisgICAgaWZhY2UtPnNl
dF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbjsKKyAgICBpZmFj
ZS0+c2V0X2NhcmV0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0Q2FyZXRPZmZzZXQ7
Cit9CisKK2djaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4dCwg
Z2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpCit7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisKKyAgICBpbnQgZW5kID0gZW5kT2Zmc2V0
OworICAgIGlmIChlbmRPZmZzZXQgPT0gLTEpIHsKKyAgICAgICAgZW5kID0gY29yZU9iamVjdC0+
c3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICBl
bmQgPSBjb3JlT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7CisgICAgfQorCisg
ICAgU3RyaW5nIHJldDsKKyAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQorICAg
ICAgICByZXQgPSBjb3JlT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uo
MCwgZW5kT2Zmc2V0KSk7CisgICAgZWxzZSB7CisgICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnN0
cmluZ1ZhbHVlKCk7CisgICAgICAgIGlmICghcmV0KQorICAgICAgICAgICAgcmV0ID0gY29yZU9i
amVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOworICAgIH0KKworICAgIGlmICghcmV0Lmxlbmd0aCgp
KSB7CisgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBhdCBsZWFzdCB3aXRoIGFub255bW91cyBS
ZW5kZXJCbG9ja3MgKGUuZy4gYm9keSB0ZXh0IGFtb25nc3QgcGFyYWdyYXBocykKKyAgICAgICAg
cmV0ID0gU3RyaW5nKHRleHRGb3JPYmplY3QoY29yZU9iamVjdCkpOworICAgICAgICBpZiAoIWVu
ZCkKKyAgICAgICAgICAgIGVuZCA9IHJldC5sZW5ndGgoKTsKKyAgICB9CisKKyAgICAvLyBQcmVm
aXggYSBpdGVtIG51bWJlci9idWxsZXQgaWYgbmVlZGVkCisgICAgaWYgKGNvcmVPYmplY3QtPnJv
bGVWYWx1ZSgpID09IExpc3RJdGVtUm9sZSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIG9ialJl
bmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKG9ialJlbmRlcmVy
ICYmIG9ialJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBtYXJr
ZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShvYmpSZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3Vm
Zml4KCk7CisgICAgICAgICAgICByZXQgPSBvYmpSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSID8gbWFya2VyVGV4dCArIHJldCA6IHJldCArIG1hcmtlclRleHQ7CisgICAgICAg
ICAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKQorICAgICAgICAgICAgICAgIGVuZCArPSBtYXJrZXJU
ZXh0Lmxlbmd0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0ID0gcmV0LnN1YnN0cmlu
ZyhzdGFydE9mZnNldCwgZW5kIC0gc3RhcnRPZmZzZXQpOworICAgIHJldHVybiBnX3N0cmR1cChy
ZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRl
eHRBZnRlck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5
IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3sKKyAg
ICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRl
eHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BRlRFUl9PRkZTRVQsIGJvdW5k
YXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKworZ2NoYXIqIHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zm
c2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBzdGFydE9mZnNldCwgZ2lu
dCogZW5kT2Zmc2V0KQoreworICAgIHJldHVybiBnYWlsX3RleHRfdXRpbF9nZXRfdGV4dChnZXRH
YWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0Rm9yQXRrKHRleHQpLCBHQUlM
X0FUX09GRlNFVCwgYm91bmRhcnlUeXBlLCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OworfQorCitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0KEF0
a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBn
aW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIHJldHVybiBnYWlsX3Rl
eHRfdXRpbF9nZXRfdGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5
b3V0Rm9yQXRrKHRleHQpLCBHQUlMX0JFRk9SRV9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKworZ3VuaWNoYXIgd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldChBdGtUZXh0KiwgZ2ludCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0Q2FyZXRPZmZzZXQoQXRrVGV4dCogdGV4dCkKK3sKKyAgICAvLyBjb3JlT2JqZWN0IGlzIHRo
ZSB1bmlnbm9yZWQgb2JqZWN0IHdob3NlIG9mZnNldCB0aGUgY2FsbGVyIGlzIHJlcXVlc3Rpbmcu
CisgICAgLy8gZm9jdXNlZE9iamVjdCBpcyB0aGUgb2JqZWN0IHdpdGggdGhlIGNhcmV0LiBJdCBp
cyBsaWtlbHkgaWdub3JlZCAtLSB1bmxlc3MgaXQncyBhIGxpbmsuCisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgaWYgKCFjb3JlT2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
bnQgb2Zmc2V0OworICAgIGlmICghb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVk
KGNvcmVPYmplY3QsIG9mZnNldCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQg
PSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKwor
ICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZvciB0aGUgbGlzdCBpdGVt
IG1hcmtlci4KKyAgICAgICAgb2Zmc2V0ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7CisgICAgfQor
CisgICAgLy8gVE9ETzogVmVyaWZ5IHRoaXMgZm9yIFJUTCB0ZXh0LgorICAgIHJldHVybiBvZmZz
ZXQ7Cit9CisKK0F0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRy
aWJ1dGVzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2lu
dCogZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBj
b3JlKHRleHQpOworICAgIEF0a0F0dHJpYnV0ZVNldCogcmVzdWx0OworCisgICAgaWYgKCFjb3Jl
T2JqZWN0KSB7CisgICAgICAgICpzdGFydE9mZnNldCA9IDA7CisgICAgICAgICplbmRPZmZzZXQg
PSBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHQpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBpZiAob2Zmc2V0ID09IC0xKQorICAgICAgICBvZmZzZXQgPSBhdGtfdGV4
dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHQpOworCisgICAgcmVzdWx0ID0gZ2V0UnVuQXR0cmlidXRl
c0Zyb21BY2Nlc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCwgb2Zmc2V0LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKKworICAgIGlmICgqc3RhcnRPZmZzZXQgPCAwKSB7CisgICAgICAgICpzdGFy
dE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgKmVuZE9mZnNldCA9IG9mZnNldDsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXMoQXRrVGV4dCogdGV4dCkKK3sKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmpl
Y3QgfHwgIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5
T2JqZWN0KGNvcmVPYmplY3QpOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hh
cmFjdGVyRXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogeCwgZ2ludCog
eSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKK3sKKyAg
ICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBvZmZzZXQsIDEsIGNvb3Jkcyk7
CisgICAgKnggPSBleHRlbnRzLngoKTsKKyAgICAqeSA9IGV4dGVudHMueSgpOworICAgICp3aWR0
aCA9IGV4dGVudHMud2lkdGgoKTsKKyAgICAqaGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsKK30K
Kwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiB0ZXh0
LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCwgQXRrQ29vcmRUeXBlIGNvb3Jkcywg
QXRrVGV4dFJlY3RhbmdsZSogcmVjdCkKK3sKKyAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0
ZW50cyh0ZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIGNvb3Jkcyk7
CisgICAgcmVjdC0+eCA9IGV4dGVudHMueCgpOworICAgIHJlY3QtPnkgPSBleHRlbnRzLnkoKTsK
KyAgICByZWN0LT53aWR0aCA9IGV4dGVudHMud2lkdGgoKTsKKyAgICByZWN0LT5oZWlnaHQgPSBl
eHRlbnRzLmhlaWdodCgpOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFj
dGVyQ291bnQoQXRrVGV4dCogdGV4dCkKK3sKKyAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVj
dExlbmd0aChjb3JlKHRleHQpKTsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9m
ZnNldEF0UG9pbnQoQXRrVGV4dCogdGV4dCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBj
b29yZHMpCit7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgQXRrQ29vcmRUeXBlCisgICAgLy8gVE9E
TzogSXMgaXQgY29ycmVjdCB0byBpZ25vcmUgcmFuZ2UubGVuZ3RoPworICAgIEludFBvaW50IHBv
cyh4LCB5KTsKKyAgICBQbGFpblRleHRSYW5nZSByYW5nZSA9IGNvcmUodGV4dCktPmRvQVhSYW5n
ZUZvclBvc2l0aW9uKHBvcyk7CisgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OworfQorCitnaW50IHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0TlNlbGVjdGlvbnMoQXRrVGV4dCogdGV4dCkKK3sKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworCisgICAgLy8g
T25seSByYW5nZSBzZWxlY3Rpb25zIGFyZSBuZWVkZWQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMg
bWV0aG9kCisgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucyBmb3Igbm93LCBz
byB0aGVyZSdzIG9ubHkKKyAgICAvLyB0d28gcG9zc2liaWxpdGllcworICAgIC8vIEFsc28sIHdl
IGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgaWYgdGhlIHNlbGVjdGlvbiBkb2VzIG5vdAorICAg
IC8vIGJlbG9uZyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9iamVjdC4gV2UgaGF2ZSB0byBj
aGVjayBzaW5jZQorICAgIC8vIHRoZXJlJ3Mgbm8gd2F5IHRvIGdldCB0aGUgc2VsZWN0aW9uIGZv
ciBhIGdpdmVuIG9iamVjdCwgb25seQorICAgIC8vIHRoZSBnbG9iYWwgb25lICh0aGUgQVBJIGlz
IGEgYml0IGNvbmZ1c2luZykKKyAgICByZXR1cm4gc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNv
cmVPYmplY3QsIHNlbGVjdGlvbikgPyAxIDogMDsKK30KKworZ2NoYXIqIHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0U2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50
KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIC8vIERlZmF1bHQgdmFsdWVz
LCB1bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZAorICAgICpzdGFydE9mZnNldCA9ICplbmRP
ZmZzZXQgPSAwOworCisgICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNl
bGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93Lgor
ICAgIGlmIChzZWxlY3Rpb25OdW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR2V0IHRo
ZSBvZmZzZXRzIG9mIHRoZSBzZWxlY3Rpb24gZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworICAgIGdldFNl
bGVjdGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uLCAqc3RhcnRPZmZz
ZXQsICplbmRPZmZzZXQpOworCisgICAgLy8gUmV0dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMgdGhh
dCdzIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yCisgICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhvZCB3
aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uCisgICAgaWYgKCpzdGFydE9mZnNldCA9PSAqZW5kT2Zm
c2V0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFRleHQodGV4dCwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKK30KKworZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZVRleHRBZGRTZWxlY3Rpb24oQXRrVGV4dCosIGdpbnQsIGdpbnQpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFu
IHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQg
c2VsZWN0aW9uTnVtKQoreworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBs
ZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5v
dy4KKyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAv
LyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgc2VsZWN0aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBv
YmplY3QKKyAgICBpZiAoIXdlYmtpdEFjY2Vzc2libGVUZXh0R2V0TlNlbGVjdGlvbnModGV4dCkp
CisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8vIFNldCBhIG5ldyAwLXNpemVkIHNlbGVj
dGlvbiB0byB0aGUgY2FyZXQgcG9zaXRpb24sIGluIG9yZGVyCisgICAgLy8gdG8gc2ltdWxhdGUg
c2VsZWN0aW9uIHJlbW92YWwgKEdBSUwgc3R5bGUpCisgICAgZ2ludCBjYXJldE9mZnNldCA9IHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQodGV4dCk7CisgICAgcmV0dXJuIHdlYmtp
dEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKHRleHQsIHNlbGVjdGlvbk51bSwgY2FyZXRPZmZz
ZXQsIGNhcmV0T2Zmc2V0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRT
ZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZz
ZXQsIGdpbnQgZW5kT2Zmc2V0KQoreworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBt
dWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2Ug
Zm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBp
ZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICAvLyBDb25zaWRlciAtMSBhbmQgb3V0LW9mLWJvdW5kIHZhbHVl
cyBhbmQgY29ycmVjdCB0aGVtIHRvIGxlbmd0aAorICAgIGdpbnQgdGV4dENvdW50ID0gd2Via2l0
QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJDb3VudCh0ZXh0KTsKKyAgICBpZiAoc3RhcnRPZmZz
ZXQgPCAwIHx8IHN0YXJ0T2Zmc2V0ID4gdGV4dENvdW50KQorICAgICAgICBzdGFydE9mZnNldCA9
IHRleHRDb3VudDsKKyAgICBpZiAoZW5kT2Zmc2V0IDwgMCB8fCBlbmRPZmZzZXQgPiB0ZXh0Q291
bnQpCisgICAgICAgIGVuZE9mZnNldCA9IHRleHRDb3VudDsKKworICAgIC8vIFdlIG5lZWQgdG8g
YWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4
dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwor
ICAgICAgICBpbnQgbWFya2VyTGVuZ3RoID0gbWFya2VyVGV4dC5sZW5ndGgoKTsKKyAgICAgICAg
aWYgKHN0YXJ0T2Zmc2V0IDwgbWFya2VyTGVuZ3RoIHx8IGVuZE9mZnNldCA8IG1hcmtlckxlbmd0
aCkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBzdGFydE9mZnNldCAtPSBt
YXJrZXJMZW5ndGg7CisgICAgICAgIGVuZE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgfQor
CisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBz
dGFydE9mZnNldCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0
LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisgICAgaWYgKHJhbmdl
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBjb3JlT2JqZWN0LT5zZXRT
ZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gVFJVRTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRDYXJldE9mZnNldChBdGtUZXh0KiB0
ZXh0LCBnaW50IG9mZnNldCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
ID0gY29yZSh0ZXh0KTsKKworICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlciAmJiBy
ZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9S
ZW5kZXJMaXN0SXRlbShyZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7CisgICAgICAg
IGludCBtYXJrZXJMZW5ndGggPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOworICAgICAgICBpZiAob2Zm
c2V0IDwgbWFya2VyTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAg
IC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXQgZm9yIGxpc3QgaXRlbXMuCisgICAgICAg
IG9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgfQorCisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4
dFJhbmdlKG9mZnNldCwgMCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3Jl
T2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisgICAgaWYg
KHJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBjb3JlT2JqZWN0
LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gVFJV
RTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDFhMzQ3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmgKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBh
MTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBt
b3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0X2gKKyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHRfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKK3Zv
aWQgd2Via2l0QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a1RleHRJZmFjZSopOworCitn
Y2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zm
c2V0LCBnaW50IGVuZE9mZnNldCk7CisKK2djaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRl
eHRBZnRlck9mZnNldChBdGtUZXh0KiwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSwgZ2lu
dCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCk7CisKK2djaGFyKiB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFRleHRBdE9mZnNldChBdGtUZXh0KiwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3Vu
ZGFyeSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCk7CisKK2djaGFyKiB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQoQXRrVGV4dCosIGdpbnQgb2Zmc2V0
LCBBdGtUZXh0Qm91bmRhcnksIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpOwor
CitndW5pY2hhciB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckF0T2Zmc2V0KEF0a1Rl
eHQqLCBnaW50IG9mZnNldCk7CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDYXJldE9m
ZnNldChBdGtUZXh0Kik7CisKK0F0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRSdW5BdHRyaWJ1dGVzKEF0a1RleHQqLCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQs
IGdpbnQqIGVuZE9mZnNldCk7CisKK0F0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRl
eHRHZXREZWZhdWx0QXR0cmlidXRlcyhBdGtUZXh0Kik7CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRDaGFyYWN0ZXJFeHRlbnRzKEF0a1RleHQqLCBnaW50IG9mZnNldCwgZ2ludCogeCwg
Z2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlKTsKKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiwgZ2ludCBzdGFy
dE9mZnNldCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nvb3JkVHlwZSwgQXRrVGV4dFJlY3RhbmdsZSop
OworCitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQoQXRrVGV4dCop
OworCitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0T2Zmc2V0QXRQb2ludChBdGtUZXh0Kiwg
Z2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSk7CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRl
eHRHZXROU2VsZWN0aW9ucyhBdGtUZXh0Kik7CisKK2djaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFNlbGVjdGlvbihBdGtUZXh0KiwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQqIHN0YXJ0T2Zm
c2V0LCBnaW50KiBlbmRPZmZzZXQpOworCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEFk
ZFNlbGVjdGlvbihBdGtUZXh0KiwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpOwor
CitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbihBdGtUZXh0KiwgZ2lu
dCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KTsKKworZ2Jv
b2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRSZW1vdmVTZWxlY3Rpb24oQXRrVGV4dCosIGdpbnQg
c2VsZWN0aW9uTnVtKTsKKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRDYXJldE9m
ZnNldChBdGtUZXh0KiwgZ2ludCBvZmZzZXQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8g
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VWYWx1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlOTkxNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmgiCisKKyNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlKEF0a1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19BQ0NF
U1NJQkxFKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNj
ZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV0VCS0lUX0FDQ0VTU0lCTEUodmFsdWUpKTsK
K30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVJbnRlcmZhY2VJbml0KEF0a1ZhbHVlSWZh
Y2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5nZXRfY3VycmVudF92YWx1ZSA9IHdlYmtpdEFjY2Vz
c2libGVWYWx1ZUdldEN1cnJlbnRWYWx1ZTsKKyAgICBpZmFjZS0+Z2V0X21heGltdW1fdmFsdWUg
PSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNYXhpbXVtVmFsdWU7CisgICAgaWZhY2UtPmdldF9t
aW5pbXVtX3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bVZhbHVlOworICAg
IGlmYWNlLT5zZXRfY3VycmVudF92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVWYWx1ZVNldEN1cnJl
bnRWYWx1ZTsKKyAgICBpZmFjZS0+Z2V0X21pbmltdW1faW5jcmVtZW50ID0gd2Via2l0QWNjZXNz
aWJsZVZhbHVlR2V0TWluaW11bUluY3JlbWVudDsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxl
VmFsdWVHZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKK3sK
KyAgICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOworICAgIGdfdmFsdWVfaW5p
dChnVmFsdWUsIEdfVFlQRV9ET1VCTEUpOworICAgIGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUs
IGNvcmUodmFsdWUpLT52YWx1ZUZvclJhbmdlKCkpOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2li
bGVWYWx1ZUdldE1heGltdW1WYWx1ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQor
eworICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVlKSk7CisgICAgZ192YWx1ZV9p
bml0KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7CisgICAgZ192YWx1ZV9zZXRfZG91YmxlKGdWYWx1
ZSwgY29yZSh2YWx1ZSktPm1heFZhbHVlRm9yUmFuZ2UoKSk7Cit9CisKK3ZvaWQgd2Via2l0QWNj
ZXNzaWJsZVZhbHVlR2V0TWluaW11bVZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFs
dWUpCit7CisgICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihHVmFsdWUpKTsKKyAgICBnX3Zh
bHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsKKyAgICBnX3ZhbHVlX3NldF9kb3VibGUo
Z1ZhbHVlLCBjb3JlKHZhbHVlKS0+bWluVmFsdWVGb3JSYW5nZSgpKTsKK30KKworZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgY29u
c3QgR1ZhbHVlKiBnVmFsdWUpCit7CisgICAgaWYgKCFHX1ZBTFVFX0hPTERTX0RPVUJMRShnVmFs
dWUpICYmICFHX1ZBTFVFX0hPTERTX0lOVChnVmFsdWUpKQorICAgICAgICByZXR1cm4gRkFMU0U7
CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh2YWx1ZSk7Cisg
ICAgaWYgKCFjb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBpZiAoR19WQUxVRV9IT0xEU19ET1VCTEUoZ1ZhbHVlKSkKKyAgICAg
ICAgY29yZU9iamVjdC0+c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoZ192YWx1ZV9nZXRfZG91Ymxl
KGdWYWx1ZSkpKTsKKyAgICBlbHNlCisgICAgICAgIGNvcmVPYmplY3QtPnNldFZhbHVlKFN0cmlu
Zzo6bnVtYmVyKGdfdmFsdWVfZ2V0X2ludChnVmFsdWUpKSk7CisKKyAgICByZXR1cm4gVFJVRTsK
K30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtSW5jcmVtZW50KEF0a1Zh
bHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCit7CisgICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNp
emVvZihHVmFsdWUpKTsKKyAgICBnX3ZhbHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsK
KworICAgIC8vIFRoZXJlJ3Mgbm90IHN1Y2ggYSB0aGluZyBpbiB0aGUgV0FJLUFSSUEgc3BlY2lm
aWNhdGlvbiwgdGh1cyByZXR1cm4gemVyby4KKyAgICBnX3ZhbHVlX3NldF9kb3VibGUoZ1ZhbHVl
LCAwLjApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVlYTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVl
LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZV9oCisjZGVmaW5l
IFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZV9oCisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+
CisKK0dfQkVHSU5fREVDTFMKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVJbnRlcmZhY2VJ
bml0KEF0a1ZhbHVlSWZhY2UqKTsKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJy
ZW50VmFsdWUoQXRrVmFsdWUqLCBHVmFsdWUqKTsKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFs
dWVHZXRNYXhpbXVtVmFsdWUoQXRrVmFsdWUqLCBHVmFsdWUqKTsKKwordm9pZCB3ZWJraXRBY2Nl
c3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWUoQXRrVmFsdWUqLCBHVmFsdWUqKTsKKworZ2Jvb2xl
YW4gd2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiwgY29uc3Qg
R1ZhbHVlKik7CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bUluY3JlbWVu
dChBdGtWYWx1ZSosIEdWYWx1ZSopOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBmYTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0w
LDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNv
cHlyaWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEu
b3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBD
b2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5
IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJp
bGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJWaXNp
YmxlU2VsZWN0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitBdGtBdHRyaWJ1dGVTZXQqIGFkZEF0dHJpYnV0ZVRvU2V0KEF0a0F0dHJpYnV0ZVNldCogYXR0
cmlidXRlU2V0LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBB
dGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGdfbWFs
bG9jKHNpemVvZihBdGtBdHRyaWJ1dGUpKSk7CisgICAgYXR0cmlidXRlLT5uYW1lID0gZ19zdHJk
dXAobmFtZSk7CisgICAgYXR0cmlidXRlLT52YWx1ZSA9IGdfc3RyZHVwKHZhbHVlKTsKKyAgICBh
dHRyaWJ1dGVTZXQgPSBnX3NsaXN0X3ByZXBlbmQoYXR0cmlidXRlU2V0LCBhdHRyaWJ1dGUpOwor
CisgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsKK30KKwordm9pZCBjb250ZW50c1RvQXRrKEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUsIEludFJl
Y3QgcmVjdCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCkKK3sK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3
KCk7CisKKyAgICBpZiAoZnJhbWVWaWV3KSB7CisgICAgICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7
CisgICAgICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKKyAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICAgICAgcmVjdCA9IGZyYW1lVmlldy0+Y29udGVu
dHNUb1NjcmVlbihyZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKHgpCisgICAgICAgICp4ID0gcmVjdC54KCk7CisgICAgaWYgKHkpCisgICAgICAg
ICp5ID0gcmVjdC55KCk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSByZWN0Lndp
ZHRoKCk7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7
Cit9CisKKy8vIFVzZWQgdG8gcHJvdmlkZSBjb25zdCBjaGFyKiByZXR1cm5zLgorY29uc3QgY2hh
ciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBDU3RyaW5n
IHJldHVybmVkU3RyaW5nOworICAgIHJldHVybmVkU3RyaW5nID0gc3RyLnV0ZjgoKTsKKyAgICBy
ZXR1cm4gcmV0dXJuZWRTdHJpbmcuZGF0YSgpOworfQorCitib29sIHNlbGVjdGlvbkJlbG9uZ3NU
b09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24pCit7CisgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIHdhbnQgdG8gY2hl
Y2sgdGhhdCBib3RoIHRoZSBzZWxlY3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQorICAgIC8vIEFO
RCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUgb2YgdGhlCisg
ICAgLy8gYm91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sg
d2hldGhlciB0aGUKKyAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBh
dCBsZWFzdCBwYXJ0aWFsbHkuCisgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsK
KyAgICBOb2RlKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmV0dXJuIChyYW5nZS0+aW50ZXJzZWN0c05vZGUo
bm9kZSwgZWMpCisgICAgICAgICAgICAmJiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IG5vZGUg
fHwgcmFuZ2UtPmVuZE9mZnNldCgpKQorICAgICAgICAgICAgJiYgKHJhbmdlLT5zdGFydENvbnRh
aW5lcigpICE9IGxhc3REZXNjZW5kYW50IHx8IHJhbmdlLT5zdGFydE9mZnNldCgpICE9IGxhc3RP
ZmZzZXRJbk5vZGUobGFzdERlc2NlbmRhbnQpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWFmNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaApAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QWNjZXNzaWJsZVV0aWxfaAorI2RlZmlu
ZSBXZWJLaXRBY2Nlc3NpYmxlVXRpbF9oCisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFj
Y2Vzc2liaWxpdHlPYmplY3Q7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKK30KKworR19CRUdJTl9ERUNMUworCisvLyBBZGRzIGFuIGFjY2Vzc2liaWxpdHkgYXR0cmli
dXRlIHRvIGFuIEF0a0F0dHJpYnV0ZVNldCwgYnkgbmFtZSBhbmQgdmFsdWUuCitBdGtBdHRyaWJ1
dGVTZXQqIGFkZEF0dHJpYnV0ZVRvU2V0KEF0a0F0dHJpYnV0ZVNldCosIGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsKKworLy8gUmV0dXJucyBjb250ZW50J3MgY29vcmRpbmF0
ZXMgcmVsYXRpdmUgdG8gdGhlIHdpbmRvdyBvciB0aGUgc2NyZWVuLgordm9pZCBjb250ZW50c1Rv
QXRrKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqLCBBdGtDb29yZFR5cGUsIFdlYkNvcmU6
OkludFJlY3QsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoID0gMCwgZ2ludCogaGVpZ2h0
ID0gMCk7CisKKy8vIFJldHVybnMgYSBjb25zdCBjaGFyKiBwb2ludGluZyB0byBhIHN0YXRpY2Fs
bHkgYWxsb2NhdGVkIHN0cmluZy4KK2NvbnN0IGNoYXIqIHJldHVyblN0cmluZyhjb25zdCBTdHJp
bmcmKTsKKworLy8gQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBzZWxlY3Rpb24gYmVsb25ncyBvciBu
b3QgdG8gYW4gQWNjZXNzaWJpbGl0eU9iamVjdCdzIHNjb3BlLgorYm9vbCBzZWxlY3Rpb25CZWxv
bmdzVG9PYmplY3QoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCosIFdlYkNvcmU6OlZpc2li
bGVTZWxlY3Rpb24mKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktpdEFjY2Vzc2li
bGVVdGlsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zZWIxZGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC0w
LDAgKzEsMTA2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBh
MTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBt
b3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKworI2lmIEhB
VkUoQUNDRVNTSUJJTElUWSkKKworI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIldl
YktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlQWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBv
bmVudC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oIgor
I2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaCIKKyNpbmNs
dWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5oIgorI2luY2x1ZGUg
IldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuaCIKKyNpbmNsdWRlICJXZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRh
YmxlLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuaCIKKyNpbmNs
dWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaCIKKyNpbmNsdWRlICJXZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAidmlz
aWJsZV91bml0cy5oIgorCisjaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGZhbGxiYWNrT2JqZWN0KCkKK3sKKyAgICAvLyBGSVhNRTogQW4gQVhPYmplY3RD
YWNoZSB3aXRoIGEgRG9jdW1lbnQgaXMgbWVhbmluZ2xlc3MuCisgICAgc3RhdGljIEFYT2JqZWN0
Q2FjaGUqIGZhbGxiYWNrQ2FjaGUgPSBuZXcgQVhPYmplY3RDYWNoZSgwKTsKKyAgICBzdGF0aWMg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gMDsKKyAgICBpZiAoIW9iamVjdCkgeworICAg
ICAgICAvLyBGSVhNRTogdXNpbmcgZmFsbGJhY2tDYWNoZS0+Z2V0T3JDcmVhdGUoTGlzdEJveE9w
dGlvblJvbGUpIGlzIGEgaGFjaworICAgICAgICBvYmplY3QgPSBmYWxsYmFja0NhY2hlLT5nZXRP
ckNyZWF0ZShMaXN0Qm94T3B0aW9uUm9sZSk7CisgICAgICAgIG9iamVjdC0+cmVmKCk7CisgICAg
fQorCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmUoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBpZiAoIWFjY2Vzc2li
bGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGFjY2Vzc2libGUtPm1fb2JqZWN0
OworfQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKG9iamVjdCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIGNvcmUoV0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KSk7Cit9
CisKK3N0YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUdldE5hbWUoQXRrT2JqZWN0
KiBvYmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUo
b2JqZWN0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpKQorICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVl
KCkpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzQ29udHJvbCgpKSB7CisgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGxhYmVsID0gY29yZU9iamVjdC0+Y29ycmVzcG9uZGluZ0xhYmVsRm9y
Q29udHJvbEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGxhYmVsKSB7CisgICAgICAgICAgICBBdGtP
YmplY3QqIGF0a09iamVjdCA9IGxhYmVsLT53cmFwcGVyKCk7CisgICAgICAgICAgICBpZiAoQVRL
X0lTX1RFWFQoYXRrT2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNz
aWJsZVRleHRHZXRUZXh0KEFUS19URVhUKGF0a09iamVjdCksIDAsIC0xKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRyeSB0ZXh0IHVuZGVyIHRoZSBub2RlLgorICAgICAgICBTdHJpbmcgdGV4
dFVuZGVyID0gY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOworICAgICAgICBpZiAodGV4
dFVuZGVyLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyh0ZXh0VW5k
ZXIpOworICAgIH0KKworICAgIGlmIChjb3JlT2JqZWN0LT5pc0ltYWdlKCkgfHwgY29yZU9iamVj
dC0+aXNJbnB1dEltYWdlKCkpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5v
ZGUoKTsKKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICAvLyBHZXQgdGhlIGF0dHJpYnV0ZSByYXRoZXIgdGhhbiBhbHRUZXh0IFN0cmluZyBz
byBhcyBub3QgdG8gZmFsbCBiYWNrIG9uIHRpdGxlLgorICAgICAgICAgICAgU3RyaW5nIGFsdCA9
IHRvSFRNTEVsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmFsdEF0dHIpOwor
ICAgICAgICAgICAgaWYgKCFhbHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXR1cm5TdHJpbmcoYWx0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZhbGxiYWNrIGZv
ciB0aGUgd2ViQXJlYSBvYmplY3Q6IGp1c3QgcmV0dXJuIHRoZSBkb2N1bWVudCdzIHRpdGxlLgor
ICAgIGlmIChjb3JlT2JqZWN0LT5pc1dlYkFyZWEoKSkgeworICAgICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOworICAgICAgICBpZiAoZG9jdW1lbnQpCisg
ICAgICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGRvY3VtZW50LT50aXRsZSgpKTsKKyAgICB9
CisKKyAgICAvLyBOb3RoaW5nIHdvcmtlZCBzbyBmYXIsIHRyeSB3aXRoIHRoZSBBY2Nlc3NpYmls
aXR5T2JqZWN0J3MKKyAgICAvLyB0aXRsZSgpIGJlZm9yZSBnb2luZyBhaGVhZCB3aXRoIHN0cmlu
Z1ZhbHVlKCkuCisgICAgU3RyaW5nIGF4VGl0bGUgPSBjb3JlT2JqZWN0LT50aXRsZSgpOworICAg
IGlmICghYXhUaXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcoYXhU
aXRsZSk7CisKKyAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVl
KCkpOworfQorCitzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlw
dGlvbihBdGtPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0ID0gY29yZShvYmplY3QpOworICAgIE5vZGUqIG5vZGUgPSAwOworICAgIGlmIChjb3Jl
T2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgbm9kZSA9IGNv
cmVPYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQo
KSB8fCBjb3JlT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlKQorICAg
ICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmVPYmplY3QtPmFjY2Vzc2liaWxpdHlEZXNjcmlw
dGlvbigpKTsKKworICAgIC8vIGF0a190YWJsZV9nZXRfc3VtbWFyeSByZXR1cm5zIGFuIEF0a09i
amVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28gZXhwb3NlIHN1bW1hcnkgaGVyZS4K
KyAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGFibGVSb2xlKSB7CisgICAgICAg
IFN0cmluZyBzdW1tYXJ5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KG5vZGUpLT5z
dW1tYXJ5KCk7CisgICAgICAgIGlmICghc3VtbWFyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmV0dXJuU3RyaW5nKHN1bW1hcnkpOworICAgIH0KKworICAgIC8vIFRoZSB0aXRsZSBh
dHRyaWJ1dGUgc2hvdWxkIGJlIHJlbGlhYmx5IGF2YWlsYWJsZSBhcyB0aGUgb2JqZWN0J3MgZGVz
Y3JpcHRvbi4KKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBmYWxsIGJhY2sgb24gb3RoZXIgYXR0
cmlidXRlcyBpbiBpdHMgYWJzZW5jZS4gU2VlIGJ1ZyAyNTUyNC4KKyAgICBTdHJpbmcgdGl0bGUg
PSB0b0hUTUxFbGVtZW50KG5vZGUpLT50aXRsZSgpOworICAgIGlmICghdGl0bGUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKHRpdGxlKTsKKworICAgIHJldHVybiByZXR1
cm5TdHJpbmcoY29yZU9iamVjdC0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkpOworfQorCitz
dGF0aWMgdm9pZCBzZXRBdGtSZWxhdGlvblNldEZyb21Db3JlT2JqZWN0KEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QsIEF0a1JlbGF0aW9uU2V0KiByZWxhdGlvblNldCkKK3sKKyAgICBp
ZiAoY29yZU9iamVjdC0+aXNDb250cm9sKCkpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogbGFiZWwgPSBjb3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVu
dCgpOworICAgICAgICBpZiAobGFiZWwpCisgICAgICAgICAgICBhdGtfcmVsYXRpb25fc2V0X2Fk
ZF9yZWxhdGlvbl9ieV90eXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fTEFCRUxMRURfQlks
IGxhYmVsLT53cmFwcGVyKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvbnRyb2wgPSBjb3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nQ29udHJvbEZvckxhYmVs
RWxlbWVudCgpOworICAgICAgICBpZiAoY29udHJvbCkKKyAgICAgICAgICAgIGF0a19yZWxhdGlv
bl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElPTl9MQUJF
TF9GT1IsIGNvbnRyb2wtPndyYXBwZXIoKSk7CisgICAgfQorfQorCitzdGF0aWMgZ3BvaW50ZXIg
d2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzID0gMDsKKworc3RhdGljIGJvb2wgaXNSb290
T2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgLy8gVGhlIHJv
b3QgYWNjZXNzaWJsZSBvYmplY3QgaW4gV2ViQ29yZSBpcyBhbHdheXMgYW4gb2JqZWN0IHdpdGgK
KyAgICAvLyB0aGUgU2Nyb2xsZWRBcmVhIHJvbGUgd2l0aCBvbmUgY2hpbGQgd2l0aCB0aGUgV2Vi
QXJlYSByb2xlLgorICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNTY3JvbGxW
aWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGZpcnN0Q2hpbGQgPSBjb3JlT2JqZWN0LT5maXJzdENoaWxkKCk7CisgICAgaWYgKCFmaXJzdENo
aWxkIHx8ICFmaXJzdENoaWxkLT5pc1dlYkFyZWEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBBdGtPYmplY3QqIGF0a1BhcmVudE9mUm9v
dE9iamVjdChBdGtPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZShvYmplY3QpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVQ
YXJlbnQgPSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKworICAgIC8vIFRo
ZSB0b3AgbGV2ZWwgb2JqZWN0IGNsYWltcyB0byBub3QgaGF2ZSBhIHBhcmVudC4gVGhpcyBtYWtl
cyBpdAorICAgIC8vIGltcG9zc2libGUgZm9yIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgdG8gYXNj
ZW5kIHRoZSBhY2Nlc3NpYmxlCisgICAgLy8gaGllcmFyY2h5IGFsbCB0aGUgd2F5IHRvIHRoZSBh
cHBsaWNhdGlvbi4gKEJ1ZyAzMDQ4OSkKKyAgICBpZiAoIWNvcmVQYXJlbnQgJiYgaXNSb290T2Jq
ZWN0KGNvcmVPYmplY3QpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmpl
Y3QtPmRvY3VtZW50KCk7CisgICAgICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gZG9jdW1lbnQtPnZpZXco
KS0+aG9zdFdpbmRvdygpOworICAgICAgICBpZiAoaG9zdFdpbmRvdykgeworICAgICAgICAgICAg
UGxhdGZvcm1QYWdlQ2xpZW50IHNjcm9sbFZpZXcgPSBob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxWaWV3KSB7CisgICAgICAgICAgICAgICAg
R3RrV2lkZ2V0KiBzY3JvbGxWaWV3UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KHNjcm9s
bFZpZXcpOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxWaWV3UGFyZW50KQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShzY3JvbGxWaWV3UGFy
ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghY29yZVBh
cmVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29yZVBhcmVudC0+d3JhcHBl
cigpOworfQorCitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlR2V0UGFyZW50KEF0
a09iamVjdCogb2JqZWN0KQoreworICAgIC8vIENoZWNrIGZpcnN0IGlmIHRoZSBwYXJlbnQgaGFz
IGJlZW4gYWxyZWFkeSBzZXQuCisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxlUGFyZW50ID0gQVRL
X09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5nZXRfcGFyZW50
KG9iamVjdCk7CisgICAgaWYgKGFjY2Vzc2libGVQYXJlbnQpCisgICAgICAgIHJldHVybiBhY2Nl
c3NpYmxlUGFyZW50OworCisgICAgLy8gUGFyZW50IG5vdCBzZXQgeWV0LCBzbyB0cnkgdG8gZmlu
ZCBpdCBpbiB0aGUgaGllcmFyY2h5LgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QgPSBjb3JlKG9iamVjdCk7CisgICAgaWYgKCFjb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVQYXJlbnQgPSBjb3JlT2JqZWN0LT5w
YXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKworICAgIGlmICghY29yZVBhcmVudCAmJiBpc1Jvb3RP
YmplY3QoY29yZU9iamVjdCkpCisgICAgICAgIHJldHVybiBhdGtQYXJlbnRPZlJvb3RPYmplY3Qo
b2JqZWN0KTsKKworICAgIGlmICghY29yZVBhcmVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAvLyBHVEsgZG9lc24ndCBleHBvc2UgdGFibGUgcm93cyB0byBBc3Npc3RpdmUgdGVjaG5vbG9n
aWVzLCBidXQgd2UKKyAgICAvLyBuZWVkIHRvIGhhdmUgdGhlbSBhbnl3YXkgaW4gdGhlIGhpZXJh
cmNoeSBmcm9tIFdlYkNvcmUgdG8KKyAgICAvLyBwcm9wZXJseSBwZXJmb3JtIGNvb3JkaW5hdGVz
IGNhbGN1bGF0aW9ucyB3aGVuIHJlcXVlc3RlZC4KKyAgICBpZiAoY29yZVBhcmVudC0+aXNUYWJs
ZVJvdygpICYmIGNvcmVPYmplY3QtPmlzVGFibGVDZWxsKCkpCisgICAgICAgIGNvcmVQYXJlbnQg
PSBjb3JlUGFyZW50LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKworICAgIHJldHVybiBjb3Jl
UGFyZW50LT53cmFwcGVyKCk7Cit9CisKK3N0YXRpYyBnaW50IGdldE5DaGlsZHJlbkZvclRhYmxl
KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYmxlQ2hpbGRyZW4gPSBjb3JlT2Jq
ZWN0LT5jaGlsZHJlbigpOworICAgIHNpemVfdCB0YWJsZUNoaWxkcmVuQ291bnQgPSB0YWJsZUNo
aWxkcmVuLnNpemUoKTsKKyAgICBzaXplX3QgY2VsbHNDb3VudCA9IDA7CisKKyAgICAvLyBMb29r
IGZvciB0aGUgYWN0dWFsIGluZGV4IG9mIHRoZSBjZWxsIGluc2lkZSB0aGUgdGFibGUuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlQ2hpbGRyZW5Db3VudDsgKytpKSB7CisgICAg
ICAgIGlmICh0YWJsZUNoaWxkcmVuW2ldLT5pc1RhYmxlUm93KCkpIHsKKyAgICAgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dDaGlsZHJl
biA9IHRhYmxlQ2hpbGRyZW5baV0tPmNoaWxkcmVuKCk7CisgICAgICAgICAgICBjZWxsc0NvdW50
ICs9IHJvd0NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjZWxs
c0NvdW50Kys7CisgICAgfQorCisgICAgcmV0dXJuIGNlbGxzQ291bnQ7Cit9CisKK3N0YXRpYyBn
aW50IHdlYmtpdEFjY2Vzc2libGVHZXROQ2hpbGRyZW4oQXRrT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKKworICAg
IC8vIFRhYmxlcyBzaG91bGQgYmUgdHJlYXRlZCBpbiBhIGRpZmZlcmVudCB3YXkgYmVjYXVzZSBy
b3dzIHNob3VsZAorICAgIC8vIGJlIGJ5cGFzc2VkIGZvciBHVEsgd2hlbiBleHBvc2luZyB0aGUg
YWNjZXNzaWJsZSBoaWVyYXJjaHkuCisgICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVRhYmxlKCkpCisgICAgICAgIHJldHVybiBnZXROQ2hpbGRyZW5Gb3JUYWJsZShjb3JlT2JqZWN0
KTsKKworICAgIHJldHVybiBjb3JlT2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKTsKK30KKworc3Rh
dGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldENoaWxkRm9yVGFibGUoQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFibGVDaGlsZHJlbiA9IGNvcmVPYmplY3Qt
PmNoaWxkcmVuKCk7CisgICAgc2l6ZV90IHRhYmxlQ2hpbGRyZW5Db3VudCA9IHRhYmxlQ2hpbGRy
ZW4uc2l6ZSgpOworICAgIHNpemVfdCBjZWxsc0NvdW50ID0gMDsKKworICAgIC8vIExvb2sgZm9y
IHRoZSBhY3R1YWwgaW5kZXggb2YgdGhlIGNlbGwgaW5zaWRlIHRoZSB0YWJsZS4KKyAgICBzaXpl
X3QgY3VycmVudCA9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0YWJsZUNoaWxkcmVuQ291bnQ7ICsraSkgeworICAgICAgICBpZiAodGFi
bGVDaGlsZHJlbltpXS0+aXNUYWJsZVJvdygpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93Q2hpbGRyZW4gPSB0YWJsZUNo
aWxkcmVuW2ldLT5jaGlsZHJlbigpOworICAgICAgICAgICAgc2l6ZV90IHJvd0NoaWxkcmVuQ291
bnQgPSByb3dDaGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICBpZiAoY3VycmVudCA8IGNlbGxz
Q291bnQgKyByb3dDaGlsZHJlbkNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiByb3dDaGls
ZHJlbi5hdChjdXJyZW50IC0gY2VsbHNDb3VudCkuZ2V0KCk7CisgICAgICAgICAgICBjZWxsc0Nv
dW50ICs9IHJvd0NoaWxkcmVuQ291bnQ7CisgICAgICAgIH0gZWxzZSBpZiAoY2VsbHNDb3VudCA9
PSBjdXJyZW50KQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ2hpbGRyZW5baV0uZ2V0KCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNlbGxzQ291bnQrKzsKKyAgICB9CisKKyAgICAvLyBT
aG91bGRuJ3QgcmVhY2ggaWYgdGhlIGNoaWxkIHdhcyBmb3VuZC4KKyAgICByZXR1cm4gMDsKK30K
Kworc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVJlZkNoaWxkKEF0a09iamVjdCog
b2JqZWN0LCBnaW50IGluZGV4KQoreworICAgIGlmIChpbmRleCA8IDApCisgICAgICAgIHJldHVy
biAwOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0
KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSAwOworCisgICAgLy8gVGFi
bGVzIGFyZSBzcGVjaWFsIGNhc2VzIGluIEdUSyBiZWNhdXNlIHJvd3Mgc2hvdWxkIGJlCisgICAg
Ly8gYnlwYXNzZWQsIGJ1dCBzdGlsbCB0YWtpbmcgdGhlaXIgY2VsbHMgaW50byBhY2NvdW50Lgor
ICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQorICAgICAgICBjb3Jl
Q2hpbGQgPSBnZXRDaGlsZEZvclRhYmxlKGNvcmVPYmplY3QsIGluZGV4KTsKKyAgICBlbHNlIHsK
KyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IGNoaWxkcmVuID0gY29yZU9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkgPj0gY2hpbGRyZW4uc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIGNvcmVDaGlsZCA9IGNoaWxkcmVuLmF0KGluZGV4KS5nZXQoKTsKKyAg
ICB9CisKKyAgICBpZiAoIWNvcmVDaGlsZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtP
YmplY3QqIGNoaWxkID0gY29yZUNoaWxkLT53cmFwcGVyKCk7CisgICAgYXRrX29iamVjdF9zZXRf
cGFyZW50KGNoaWxkLCBvYmplY3QpOworICAgIGdfb2JqZWN0X3JlZihjaGlsZCk7CisKKyAgICBy
ZXR1cm4gY2hpbGQ7Cit9CisKK3N0YXRpYyBnaW50IGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5S
b3coQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnQgPSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAg
ICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogZ3JhbmRQYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAg
IGlmICghZ3JhbmRQYXJlbnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzID0gZ3JhbmRQYXJlbnQt
PmNoaWxkcmVuKCk7CisgICAgc2l6ZV90IHJvd3NDb3VudCA9IHJvd3Muc2l6ZSgpOworICAgIHNp
emVfdCBwcmV2aW91c0NlbGxzQ291bnQgPSAwOworCisgICAgLy8gTG9vayBmb3IgdGhlIGFjdHVh
bCBpbmRleCBvZiB0aGUgY2VsbCBpbnNpZGUgdGhlIHRhYmxlLgorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByb3dzQ291bnQ7ICsraSkgeworICAgICAgICBpZiAoIXJvd3NbaV0tPmlzVGFi
bGVSb3coKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjZWxscyA9IHJvd3NbaV0tPmNoaWxk
cmVuKCk7CisgICAgICAgIHNpemVfdCBjZWxsc0NvdW50ID0gY2VsbHMuc2l6ZSgpOworCisgICAg
ICAgIGlmIChyb3dzW2ldID09IHBhcmVudCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IGNlbGxzQ291bnQ7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChjZWxsc1tq
XSA9PSBjb3JlT2JqZWN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDZWxs
c0NvdW50ICsgajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3Vz
Q2VsbHNDb3VudCArPSBjZWxsc0NvdW50OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwor
c3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZUdldEluZGV4SW5QYXJlbnQoQXRrT2JqZWN0KiBv
YmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2Jq
ZWN0KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBjb3JlT2JqZWN0LT5wYXJl
bnRPYmplY3RVbmlnbm9yZWQoKTsKKworICAgIGlmICghcGFyZW50ICYmIGlzUm9vdE9iamVjdChj
b3JlT2JqZWN0KSkgeworICAgICAgICBBdGtPYmplY3QqIGF0a1BhcmVudCA9IGF0a1BhcmVudE9m
Um9vdE9iamVjdChvYmplY3QpOworICAgICAgICBpZiAoIWF0a1BhcmVudCkKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGF0a19vYmplY3RfZ2V0X25f
YWNjZXNzaWJsZV9jaGlsZHJlbihhdGtQYXJlbnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXRrUGFyZW50LCBpKTsKKyAgICAgICAgICAg
IGJvb2wgY2hpbGRJc09iamVjdCA9IGNoaWxkID09IG9iamVjdDsKKyAgICAgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChjaGlsZElzT2JqZWN0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTmVlZCB0byBj
YWxjdWxhdGUgdGhlIGluZGV4IG9mIHRoZSBjZWxsIGluIHRoZSB0YWJsZSwgYXMKKyAgICAvLyBy
b3dzIHdvbid0IGJlIGV4cG9zZWQgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBpbiBHVEsuCisg
ICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzVGFibGVSb3coKSAmJiBjb3JlT2JqZWN0LT5pc1Rh
YmxlQ2VsbCgpKQorICAgICAgICByZXR1cm4gZ2V0SW5kZXhJblBhcmVudEZvckNlbGxJblJvdyhj
b3JlT2JqZWN0KTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjaGlsZHJlbiA9IHBhcmVudC0+Y2hpbGRyZW4oKTsKKyAgICB1bnNpZ25lZCBj
b3VudCA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gY29yZU9iamVjdCkKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIEF0
a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMoQXRrT2JqZWN0KiBv
YmplY3QpCit7CisgICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSAwOworICAgIGF0
dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgInRvb2xraXQiLCAi
V2ViS2l0R3RrIik7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29y
ZShvYmplY3QpOworICAgIGlmICghY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0
ZVNldDsKKworICAgIGludCBoZWFkaW5nTGV2ZWwgPSBjb3JlT2JqZWN0LT5oZWFkaW5nTGV2ZWwo
KTsKKyAgICBpZiAoaGVhZGluZ0xldmVsKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IFN0cmlu
Zzo6bnVtYmVyKGhlYWRpbmdMZXZlbCk7CisgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZEF0dHJp
YnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgImxldmVsIiwgdmFsdWUudXRmOCgpLmRhdGEoKSk7Cisg
ICAgfQorCisgICAgLy8gU2V0IHRoZSAnbGF5b3V0LWd1ZXNzJyBhdHRyaWJ1dGUgdG8gaGVscCBB
c3Npc3RpdmUKKyAgICAvLyBUZWNobm9sb2dpZXMga25vdyB3aGVuIGFuIGV4cG9zZWQgdGFibGUg
aXMgbm90IGRhdGEgdGFibGUuCisgICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRh
YmxlKCkgJiYgIWNvcmVPYmplY3QtPmlzRGF0YVRhYmxlKCkpCisgICAgICAgIGF0dHJpYnV0ZVNl
dCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgImxheW91dC1ndWVzcyIsICJ0cnVl
Iik7CisKKyAgICByZXR1cm4gYXR0cmlidXRlU2V0OworfQorCitzdGF0aWMgQXRrUm9sZSBhdGtS
b2xlKEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUpCit7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAg
Y2FzZSBVbmtub3duUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1VOS05PV047CisgICAg
Y2FzZSBCdXR0b25Sb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfUFVTSF9CVVRUT047Cisg
ICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9SQURJT19C
VVRUT047CisgICAgY2FzZSBDaGVja0JveFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9D
SEVDS19CT1g7CisgICAgY2FzZSBTbGlkZXJSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVf
U0xJREVSOworICAgIGNhc2UgVGFiR3JvdXBSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVf
UEFHRV9UQUJfTElTVDsKKyAgICBjYXNlIFRleHRGaWVsZFJvbGU6CisgICAgY2FzZSBUZXh0QXJl
YVJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9FTlRSWTsKKyAgICBjYXNlIFN0YXRpY1Rl
eHRSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEVYVDsKKyAgICBjYXNlIE91dGxpbmVS
b2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfVFJFRTsKKyAgICBjYXNlIE1lbnVCYXJSb2xl
OgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUVOVV9CQVI7CisgICAgY2FzZSBNZW51TGlzdFBv
cHVwUm9sZToKKyAgICBjYXNlIE1lbnVSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUVO
VTsKKyAgICBjYXNlIE1lbnVMaXN0T3B0aW9uUm9sZToKKyAgICBjYXNlIE1lbnVJdGVtUm9sZToK
KyAgICAgICAgcmV0dXJuIEFUS19ST0xFX01FTlVfSVRFTTsKKyAgICBjYXNlIENvbHVtblJvbGU6
CisgICAgICAgIC8vIHJldHVybiBBVEtfUk9MRV9UQUJMRV9DT0xVTU5fSEVBREVSOyAvLyBJcyB0
aGlzIHJpZ2h0PworICAgICAgICByZXR1cm4gQVRLX1JPTEVfVU5LTk9XTjsgLy8gTWF0Y2hlcyBN
b3ppbGxhCisgICAgY2FzZSBSb3dSb2xlOgorICAgICAgICAvLyByZXR1cm4gQVRLX1JPTEVfVEFC
TEVfUk9XX0hFQURFUjsgLy8gSXMgdGhpcyByaWdodD8KKyAgICAgICAgcmV0dXJuIEFUS19ST0xF
X0xJU1RfSVRFTTsgLy8gTWF0Y2hlcyBNb3ppbGxhCisgICAgY2FzZSBUb29sYmFyUm9sZToKKyAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX1RPT0xfQkFSOworICAgIGNhc2UgQnVzeUluZGljYXRvclJv
bGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9QUk9HUkVTU19CQVI7IC8vIElzIHRoaXMgcmln
aHQ/CisgICAgY2FzZSBQcm9ncmVzc0luZGljYXRvclJvbGU6CisgICAgICAgIC8vIHJldHVybiBB
VEtfUk9MRV9TUElOX0JVVFRPTjsgLy8gU29tZSBjb25mdXNpb24gYWJvdXQgdGhpcyByb2xlIGlu
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisgICAgICAgIHJldHVybiBBVEtfUk9MRV9Q
Uk9HUkVTU19CQVI7CisgICAgY2FzZSBXaW5kb3dSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JP
TEVfV0lORE9XOworICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgorICAgIGNhc2UgQ29tYm9Cb3hS
b2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfQ09NQk9fQk9YOworICAgIGNhc2UgU3BsaXRH
cm91cFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9TUExJVF9QQU5FOworICAgIGNhc2Ug
U3BsaXR0ZXJSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0VQQVJBVE9SOworICAgIGNh
c2UgQ29sb3JXZWxsUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NPTE9SX0NIT09TRVI7
CisgICAgY2FzZSBMaXN0Um9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1Q7CisgICAg
Y2FzZSBTY3JvbGxCYXJSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0NST0xMX0JBUjsK
KyAgICBjYXNlIFNjcm9sbEFyZWFSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0NST0xM
X1BBTkU7CisgICAgY2FzZSBHcmlkUm9sZTogLy8gSXMgdGhpcyByaWdodD8KKyAgICBjYXNlIFRh
YmxlUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RBQkxFOworICAgIGNhc2UgQXBwbGlj
YXRpb25Sb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfQVBQTElDQVRJT047CisgICAgY2Fz
ZSBHcm91cFJvbGU6CisgICAgY2FzZSBSYWRpb0dyb3VwUm9sZToKKyAgICAgICAgcmV0dXJuIEFU
S19ST0xFX1BBTkVMOworICAgIGNhc2UgUm93SGVhZGVyUm9sZTogLy8gUm93IGhlYWRlcnMgYXJl
IGNlbGxzIGFmdGVyIGFsbC4KKyAgICBjYXNlIENvbHVtbkhlYWRlclJvbGU6IC8vIENvbHVtbiBo
ZWFkZXJzIGFyZSBjZWxscyBhZnRlciBhbGwuCisgICAgY2FzZSBDZWxsUm9sZToKKyAgICAgICAg
cmV0dXJuIEFUS19ST0xFX1RBQkxFX0NFTEw7CisgICAgY2FzZSBMaW5rUm9sZToKKyAgICBjYXNl
IFdlYkNvcmVMaW5rUm9sZToKKyAgICBjYXNlIEltYWdlTWFwTGlua1JvbGU6CisgICAgICAgIHJl
dHVybiBBVEtfUk9MRV9MSU5LOworICAgIGNhc2UgSW1hZ2VNYXBSb2xlOgorICAgIGNhc2UgSW1h
Z2VSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfSU1BR0U7CisgICAgY2FzZSBMaXN0TWFy
a2VyUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RFWFQ7CisgICAgY2FzZSBXZWJBcmVh
Um9sZToKKyAgICAgICAgLy8gcmV0dXJuIEFUS19ST0xFX0hUTUxfQ09OVEFJTkVSOyAvLyBJcyB0
aGlzIHJpZ2h0PworICAgICAgICByZXR1cm4gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUU7CisgICAg
Y2FzZSBIZWFkaW5nUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0hFQURJTkc7CisgICAg
Y2FzZSBMaXN0Qm94Um9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1Q7CisgICAgY2Fz
ZSBMaXN0SXRlbVJvbGU6CisgICAgY2FzZSBMaXN0Qm94T3B0aW9uUm9sZToKKyAgICAgICAgcmV0
dXJuIEFUS19ST0xFX0xJU1RfSVRFTTsKKyAgICBjYXNlIFBhcmFncmFwaFJvbGU6CisgICAgICAg
IHJldHVybiBBVEtfUk9MRV9QQVJBR1JBUEg7CisgICAgY2FzZSBMYWJlbFJvbGU6CisgICAgICAg
IHJldHVybiBBVEtfUk9MRV9MQUJFTDsKKyAgICBjYXNlIERpdlJvbGU6CisgICAgICAgIHJldHVy
biBBVEtfUk9MRV9TRUNUSU9OOworICAgIGNhc2UgRm9ybVJvbGU6CisgICAgICAgIHJldHVybiBB
VEtfUk9MRV9GT1JNOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9VTktO
T1dOOworICAgIH0KK30KKworc3RhdGljIEF0a1JvbGUgd2Via2l0QWNjZXNzaWJsZUdldFJvbGUo
QXRrT2JqZWN0KiBvYmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCA9IGNvcmUob2JqZWN0KTsKKworICAgIGlmICghY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJu
IEFUS19ST0xFX1VOS05PV047CisKKyAgICAvLyBOb3RlOiBXaHkgZG9lc24ndCBXZWJDb3JlIGhh
dmUgYSBwYXNzd29yZCBmaWVsZCBmb3IgdGhpcworICAgIGlmIChjb3JlT2JqZWN0LT5pc1Bhc3N3
b3JkRmllbGQoKSkKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBU1NXT1JEX1RFWFQ7CisKKyAg
ICByZXR1cm4gYXRrUm9sZShjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSk7Cit9CisKK3N0YXRpYyBi
b29sIGlzVGV4dFdpdGhDYXJldChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQorewor
ICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGlu
Z3MtPmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIENoZWNrIHRleHQgb2JqZWN0cyBhbmQgcGFyYWdyYXBocyBvbmx5LgorICAgIEF0a09iamVj
dCogYXhPYmplY3QgPSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgQXRrUm9sZSByb2xlID0g
YXhPYmplY3QgPyBhdGtfb2JqZWN0X2dldF9yb2xlKGF4T2JqZWN0KSA6IEFUS19ST0xFX0lOVkFM
SUQ7CisgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfVEVYVCAmJiByb2xlICE9IEFUS19ST0xFX1BB
UkFHUkFQSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmluYWxseSwgY2hlY2sg
d2hldGhlciB0aGUgY2FyZXQgaXMgc2V0IGluIHRoZSBjdXJyZW50IG9iamVjdC4KKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworICAgIGlm
ICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24pOworfQor
CitzdGF0aWMgdm9pZCBzZXRBdGtTdGF0ZVNldEZyb21Db3JlT2JqZWN0KEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QsIEF0a1N0YXRlU2V0KiBzdGF0ZVNldCkKK3sKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICBi
b29sIGlzTGlzdEJveE9wdGlvbiA9IHBhcmVudCAmJiBwYXJlbnQtPmlzTGlzdEJveCgpOworCisg
ICAgLy8gUGxlYXNlIGtlZXAgdGhlIHN0YXRlIGxpc3QgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCisg
ICAgaWYgKGNvcmVPYmplY3QtPmlzQ2hlY2tlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2Fk
ZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0NIRUNLRUQpOworCisgICAgLy8gRklYTUU6IGlz
UmVhZE9ubHkgZG9lcyBub3Qgc2VlbSB0byBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yCisgICAgLy8g
Y29udHJvbHMsIHNvIGNoZWNrIGV4cGxpY2l0bHkgZm9yIHRoZW0uIEluIGFkZGl0aW9uLCBiZWNh
dXNlCisgICAgLy8gaXNSZWFkT25seSBpcyBmYWxzZSBmb3IgbGlzdEJveE9wdGlvbnMsIHdlIG5l
ZWQgdG8gYWRkIG9uZQorICAgIC8vIG1vcmUgY2hlY2sgc28gdGhhdCB3ZSBkbyBub3QgcHJlc2Vu
dCB0aGVtIGFzIGJlaW5nICJlZGl0YWJsZSIuCisgICAgaWYgKCghY29yZU9iamVjdC0+aXNSZWFk
T25seSgpCisgICAgICAgICB8fCAoY29yZU9iamVjdC0+aXNDb250cm9sKCkgJiYgY29yZU9iamVj
dC0+Y2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSkpCisgICAgICAgICYmICFpc0xpc3RCb3hPcHRpb24p
CisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRURJ
VEFCTEUpOworCisgICAgLy8gRklYTUU6IFB1dCBib3RoIEVOQUJMRUQgYW5kIFNFTlNJVElWRSB0
b2dldGhlciBoZXJlIGZvciBub3cKKyAgICBpZiAoY29yZU9iamVjdC0+aXNFbmFibGVkKCkpIHsK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9FTkFC
TEVEKTsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFU
RV9TRU5TSVRJVkUpOworICAgIH0KKworICAgIGlmIChjb3JlT2JqZWN0LT5jYW5TZXRFeHBhbmRl
ZEF0dHJpYnV0ZSgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwg
QVRLX1NUQVRFX0VYUEFOREFCTEUpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzRXhwYW5kZWQo
KSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9F
WFBBTkRFRCk7CisKKyAgICBpZiAoY29yZU9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NV
U0FCTEUpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzRm9jdXNlZCgpIHx8IGlzVGV4dFdpdGhD
YXJldChjb3JlT2JqZWN0KSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9GT0NVU0VEKTsKKworICAgIC8vIFRPRE86IEFUS19TVEFURV9IT1JJWk9O
VEFMCisKKyAgICBpZiAoY29yZU9iamVjdC0+aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgIGF0
a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfSU5ERVRFUk1JTkFURSk7
CisKKyAgICBpZiAoY29yZU9iamVjdC0+aXNNdWx0aVNlbGVjdGFibGUoKSkKKyAgICAgICAgYXRr
X3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9NVUxUSVNFTEVDVEFCTEUp
OworCisgICAgLy8gVE9ETzogQVRLX1NUQVRFX09QQVFVRQorCisgICAgaWYgKGNvcmVPYmplY3Qt
PmlzUHJlc3NlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwg
QVRLX1NUQVRFX1BSRVNTRUQpOworCisgICAgLy8gVE9ETzogQVRLX1NUQVRFX1NFTEVDVEFCTEVf
VEVYVAorCisgICAgaWYgKGNvcmVPYmplY3QtPmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpIHsK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9TRUxF
Q1RBQkxFKTsKKyAgICAgICAgLy8gSXRlbXMgaW4gZm9jdXNhYmxlIGxpc3RzIGluIEd0ayBoYXZl
IGJvdGggU1RBVEVfU0VMRUNUe0FCTEUsRUR9CisgICAgICAgIC8vIGFuZCBTVEFURV9GT0NVU3tB
QkxFLEVEfS4gV2UnbGwgZmFrZSB0aGUgbGF0dGVyIGJhc2VkIG9uIHRoZQorICAgICAgICAvLyBm
b3JtZXIuCisgICAgICAgIGlmIChpc0xpc3RCb3hPcHRpb24pCisgICAgICAgICAgICBhdGtfc3Rh
dGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7CisgICAgfQor
CisgICAgaWYgKGNvcmVPYmplY3QtPmlzU2VsZWN0ZWQoKSkgeworICAgICAgICBhdGtfc3RhdGVf
c2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKKyAgICAgICAgLy8g
SXRlbXMgaW4gZm9jdXNhYmxlIGxpc3RzIGluIEd0ayBoYXZlIGJvdGggU1RBVEVfU0VMRUNUe0FC
TEUsRUR9CisgICAgICAgIC8vIGFuZCBTVEFURV9GT0NVU3tBQkxFLEVEfS4gV2UnbGwgZmFrZSB0
aGUgbGF0dGVyIGJhc2VkIG9uIHRoZQorICAgICAgICAvLyBmb3JtZXIuCisgICAgICAgIGlmIChp
c0xpc3RCb3hPcHRpb24pCisgICAgICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0
ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTRUQpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBHcm91cCBi
b3RoIFNIT1dJTkcgYW5kIFZJU0lCTEUgaGVyZSBmb3Igbm93CisgICAgLy8gTm90IHN1cmUgaG93
IHRvIGhhbmRsZSB0aGlzIGluIFdlYktpdCwgc2VlIGJ1ZworICAgIC8vIGh0dHA6Ly9idWd6aWxs
YS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTY1MCBmb3Igb3RoZXIKKyAgICAvLyBpc3N1
ZXMgd2l0aCBTSE9XSU5HIHZzIFZJU0lCTEUgd2l0aGluIEdUSysKKyAgICBpZiAoIWNvcmVPYmpl
Y3QtPmlzT2ZmU2NyZWVuKCkpIHsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3Rh
dGVTZXQsIEFUS19TVEFURV9TSE9XSU5HKTsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3Rh
dGUoc3RhdGVTZXQsIEFUS19TVEFURV9WSVNJQkxFKTsKKyAgICB9CisKKyAgICAvLyBNdXR1YWxs
eSBleGNsdXNpdmUsIHNvIHdlIGdyb3VwIHRoZXNlIHR3bworICAgIGlmIChjb3JlT2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBUZXh0RmllbGRSb2xlKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9z
dGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NJTkdMRV9MSU5FKTsKKyAgICBlbHNlIGlmIChjb3Jl
T2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUZXh0QXJlYVJvbGUpCisgICAgICAgIGF0a19zdGF0ZV9z
ZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfTVVMVElfTElORSk7CisKKyAgICAvLyBU
T0RPOiBBVEtfU1RBVEVfU0VOU0lUSVZFCisKKyAgICAvLyBUT0RPOiBBVEtfU1RBVEVfVkVSVElD
QUwKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc1Zpc2l0ZWQoKSkKKyAgICAgICAgYXRrX3N0YXRl
X3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9WSVNJVEVEKTsKK30KKworc3RhdGlj
IEF0a1N0YXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxlUmVmU3RhdGVTZXQoQXRrT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgQXRrU3RhdGVTZXQqIHN0YXRlU2V0ID0gQVRLX09CSkVDVF9DTEFTUyh3ZWJr
aXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5yZWZfc3RhdGVfc2V0KG9iamVjdCk7CisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKKworICAgIGlm
IChjb3JlT2JqZWN0ID09IGZhbGxiYWNrT2JqZWN0KCkpIHsKKyAgICAgICAgYXRrX3N0YXRlX3Nl
dF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9ERUZVTkNUKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRlU2V0OworICAgIH0KKworICAgIC8vIFRleHQgb2JqZWN0cyBtdXN0IGJlIGZvY3VzYWJs
ZS4KKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKG9iamVjdCk7CisgICAg
aWYgKHJvbGUgPT0gQVRLX1JPTEVfVEVYVCB8fCByb2xlID09IEFUS19ST0xFX1BBUkFHUkFQSCkK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NV
U0FCTEUpOworCisgICAgc2V0QXRrU3RhdGVTZXRGcm9tQ29yZU9iamVjdChjb3JlT2JqZWN0LCBz
dGF0ZVNldCk7CisgICAgcmV0dXJuIHN0YXRlU2V0OworfQorCitzdGF0aWMgQXRrUmVsYXRpb25T
ZXQqIHdlYmtpdEFjY2Vzc2libGVSZWZSZWxhdGlvblNldChBdGtPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBBdGtSZWxhdGlvblNldCogcmVsYXRpb25TZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtp
dF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPnJlZl9yZWxhdGlvbl9zZXQob2JqZWN0KTsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOworCisgICAg
c2V0QXRrUmVsYXRpb25TZXRGcm9tQ29yZU9iamVjdChjb3JlT2JqZWN0LCByZWxhdGlvblNldCk7
CisKKyAgICByZXR1cm4gcmVsYXRpb25TZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEFjY2Vz
c2libGVJbml0KEF0a09iamVjdCogb2JqZWN0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChB
VEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxp
emUpCisgICAgICAgIEFUS19PQkpFQ1RfQ0xBU1Mod2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2Ns
YXNzKS0+aW5pdGlhbGl6ZShvYmplY3QsIGRhdGEpOworCisgICAgV0VCS0lUX0FDQ0VTU0lCTEUo
b2JqZWN0KS0+bV9vYmplY3QgPSByZWludGVycHJldF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Qq
PihkYXRhKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZUZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICAvLyBUaGlzIGlzIGEgZ29vZCB0aW1lIHRvIGNsZWFyIHRoZSBy
ZXR1cm4gYnVmZmVyLgorICAgIHJldHVyblN0cmluZyhTdHJpbmcoKSk7CisKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0KEF0a09iamVj
dENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKGtsYXNzKTsKKworICAgIHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyA9
IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudChrbGFzcyk7CisKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0QWNjZXNzaWJsZUZpbmFsaXplOworCisgICAga2xhc3MtPmluaXRpYWxp
emUgPSB3ZWJraXRBY2Nlc3NpYmxlSW5pdDsKKyAgICBrbGFzcy0+Z2V0X25hbWUgPSB3ZWJraXRB
Y2Nlc3NpYmxlR2V0TmFtZTsKKyAgICBrbGFzcy0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Via2l0QWNj
ZXNzaWJsZUdldERlc2NyaXB0aW9uOworICAgIGtsYXNzLT5nZXRfcGFyZW50ID0gd2Via2l0QWNj
ZXNzaWJsZUdldFBhcmVudDsKKyAgICBrbGFzcy0+Z2V0X25fY2hpbGRyZW4gPSB3ZWJraXRBY2Nl
c3NpYmxlR2V0TkNoaWxkcmVuOworICAgIGtsYXNzLT5yZWZfY2hpbGQgPSB3ZWJraXRBY2Nlc3Np
YmxlUmVmQ2hpbGQ7CisgICAga2xhc3MtPmdldF9yb2xlID0gd2Via2l0QWNjZXNzaWJsZUdldFJv
bGU7CisgICAga2xhc3MtPnJlZl9zdGF0ZV9zZXQgPSB3ZWJraXRBY2Nlc3NpYmxlUmVmU3RhdGVT
ZXQ7CisgICAga2xhc3MtPmdldF9pbmRleF9pbl9wYXJlbnQgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0
SW5kZXhJblBhcmVudDsKKyAgICBrbGFzcy0+Z2V0X2F0dHJpYnV0ZXMgPSB3ZWJraXRBY2Nlc3Np
YmxlR2V0QXR0cmlidXRlczsKKyAgICBrbGFzcy0+cmVmX3JlbGF0aW9uX3NldCA9IHdlYmtpdEFj
Y2Vzc2libGVSZWZSZWxhdGlvblNldDsKK30KKworR1R5cGUKK3dlYmtpdF9hY2Nlc3NpYmxlX2dl
dF90eXBlKHZvaWQpCit7CisgICAgc3RhdGljIHZvbGF0aWxlIGdzaXplIHR5cGVfdm9sYXRpbGUg
PSAwOworCisgICAgaWYgKGdfb25jZV9pbml0X2VudGVyKCZ0eXBlX3ZvbGF0aWxlKSkgeworICAg
ICAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIHRpbmZvID0geworICAgICAgICAgICAgc2l6ZW9m
KFdlYktpdEFjY2Vzc2libGVDbGFzcyksCisgICAgICAgICAgICAoR0Jhc2VJbml0RnVuYykgMCwK
KyAgICAgICAgICAgIChHQmFzZUZpbmFsaXplRnVuYykgMCwKKyAgICAgICAgICAgIChHQ2xhc3NJ
bml0RnVuYykgd2Via2l0X2FjY2Vzc2libGVfY2xhc3NfaW5pdCwKKyAgICAgICAgICAgIChHQ2xh
c3NGaW5hbGl6ZUZ1bmMpIDAsCisgICAgICAgICAgICAwLCAvKiBjbGFzcyBkYXRhICovCisgICAg
ICAgICAgICBzaXplb2YoV2ViS2l0QWNjZXNzaWJsZSksIC8qIGluc3RhbmNlIHNpemUgKi8KKyAg
ICAgICAgICAgIDAsIC8qIG5iIHByZWFsbG9jcyAqLworICAgICAgICAgICAgKEdJbnN0YW5jZUlu
aXRGdW5jKSAwLAorICAgICAgICAgICAgMCAvKiB2YWx1ZSB0YWJsZSAqLworICAgICAgICB9Owor
CisgICAgICAgIEdUeXBlIHR5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljKEFUS19UWVBFX09C
SkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlYktp
dEFjY2Vzc2libGUiLCAmdGluZm8sIEdUeXBlRmxhZ3MoMCkpOworICAgICAgICBnX29uY2VfaW5p
dF9sZWF2ZSgmdHlwZV92b2xhdGlsZSwgdHlwZSk7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVf
dm9sYXRpbGU7Cit9CisKK3N0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2Vz
SW5pdEZ1bmN0aW9uc1tdID0geworICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKXdlYmtpdEFjY2Vz
c2libGVBY3Rpb25JbnRlcmZhY2VJbml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykg
MCwgMH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlv
bkludGVyZmFjZUluaXQsCisgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKKyAg
ICB7KEdJbnRlcmZhY2VJbml0RnVuYyl3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0SW50ZXJm
YWNlSW5pdCwKKyAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHsoR0lu
dGVyZmFjZUluaXRGdW5jKXdlYmtpdEFjY2Vzc2libGVUZXh0SW50ZXJmYWNlSW5pdCwKKyAgICAg
KEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHsoR0ludGVyZmFjZUluaXRGdW5j
KXdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0LAorICAgICAoR0ludGVyZmFj
ZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpd2Via2l0QWNj
ZXNzaWJsZUltYWdlSW50ZXJmYWNlSW5pdCwKKyAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMp
IDAsIDB9LAorICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKXdlYmtpdEFjY2Vzc2libGVUYWJsZUlu
dGVyZmFjZUluaXQsCisgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKKyAgICB7
KEdJbnRlcmZhY2VJbml0RnVuYyl3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0SW50ZXJmYWNlSW5p
dCwKKyAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHsoR0ludGVyZmFj
ZUluaXRGdW5jKXdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsSW50ZXJmYWNlSW5pdCwKKyAg
ICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHsoR0ludGVyZmFjZUluaXRG
dW5jKXdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEludGVyZmFjZUluaXQsCisgICAgIChHSW50ZXJm
YWNlRmluYWxpemVGdW5jKSAwLCAwfSwKKyAgICB7KEdJbnRlcmZhY2VJbml0RnVuYyl3ZWJraXRB
Y2Nlc3NpYmxlVmFsdWVJbnRlcmZhY2VJbml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVu
YykgMCwgMH0KK307CisKK2VudW0gV0FJVHlwZSB7CisgICAgV0FJX0FDVElPTiwKKyAgICBXQUlf
U0VMRUNUSU9OLAorICAgIFdBSV9FRElUQUJMRV9URVhULAorICAgIFdBSV9URVhULAorICAgIFdB
SV9DT01QT05FTlQsCisgICAgV0FJX0lNQUdFLAorICAgIFdBSV9UQUJMRSwKKyAgICBXQUlfSFlQ
RVJURVhULAorICAgIFdBSV9IWVBFUkxJTkssCisgICAgV0FJX0RPQ1VNRU5ULAorICAgIFdBSV9W
QUxVRSwKK307CisKK3N0YXRpYyBHVHlwZSBHZXRBdGtJbnRlcmZhY2VUeXBlRnJvbVdBSVR5cGUo
V0FJVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgV0FJX0FDVElP
TjoKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX0FDVElPTjsKKyAgICBjYXNlIFdBSV9TRUxFQ1RJ
T046CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9TRUxFQ1RJT047CisgICAgY2FzZSBXQUlfRURJ
VEFCTEVfVEVYVDoKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX0VESVRBQkxFX1RFWFQ7CisgICAg
Y2FzZSBXQUlfVEVYVDoKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX1RFWFQ7CisgICAgY2FzZSBX
QUlfQ09NUE9ORU5UOgorICAgICAgICByZXR1cm4gQVRLX1RZUEVfQ09NUE9ORU5UOworICAgIGNh
c2UgV0FJX0lNQUdFOgorICAgICAgICByZXR1cm4gQVRLX1RZUEVfSU1BR0U7CisgICAgY2FzZSBX
QUlfVEFCTEU6CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9UQUJMRTsKKyAgICBjYXNlIFdBSV9I
WVBFUlRFWFQ6CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9IWVBFUlRFWFQ7CisgICAgY2FzZSBX
QUlfSFlQRVJMSU5LOgorICAgICAgICByZXR1cm4gQVRLX1RZUEVfSFlQRVJMSU5LX0lNUEw7Cisg
ICAgY2FzZSBXQUlfRE9DVU1FTlQ6CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9ET0NVTUVOVDsK
KyAgICBjYXNlIFdBSV9WQUxVRToKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX1ZBTFVFOworICAg
IH0KKworICAgIHJldHVybiBHX1RZUEVfSU5WQUxJRDsKK30KKworc3RhdGljIGd1aW50MTYgZ2V0
SW50ZXJmYWNlTWFza0Zyb21PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkK
K3sKKyAgICBndWludDE2IGludGVyZmFjZU1hc2sgPSAwOworCisgICAgLy8gQ29tcG9uZW50IGlu
dGVyZmFjZSBpcyBhbHdheXMgc3VwcG9ydGVkCisgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdB
SV9DT01QT05FTlQ7CisKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gY29yZU9iamVjdC0+
cm9sZVZhbHVlKCk7CisKKyAgICAvLyBBY3Rpb24KKyAgICAvLyBBcyB0aGUgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgaXMgYSB2ZXJ5CisgICAgLy8gYmFzaWMgb25l
IChqdXN0IHJlbGF5cyBpbiBleGVjdXRpbmcgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBlYWNoCisg
ICAgLy8gb2JqZWN0LCBhbmQgb25seSBzdXBwb3J0cyBoYXZpbmcgb25lIGFjdGlvbiBwZXIgb2Jq
ZWN0KSwgaXQgaXMKKyAgICAvLyBiZXR0ZXIganVzdCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgZm9yIGV2ZXJ5IGluc3RhbmNlIG9mCisgICAgLy8gdGhlIFdlYktpdEFjY2Vzc2libGUgY2xh
c3MgYW5kIGxldCBXZWJDb3JlIGRlY2lkZSB3aGF0IHRvIGRvLgorICAgIGludGVyZmFjZU1hc2sg
fD0gMSA8PCBXQUlfQUNUSU9OOworCisgICAgLy8gU2VsZWN0aW9uCisgICAgaWYgKGNvcmVPYmpl
Y3QtPmlzTGlzdEJveCgpIHx8IGNvcmVPYmplY3QtPmlzTWVudUxpc3QoKSkKKyAgICAgICAgaW50
ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9TRUxFQ1RJT047CisKKyAgICAvLyBHZXQgcmVuZGVyZXIg
aWYgYXZhaWxhYmxlLgorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAwOworICAgIGlmIChj
b3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmVuZGVy
ZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigpOworCisgICAgLy8gSHlwZXJsaW5rIChsaW5rcyBh
bmQgZW1iZWRkZWQgb2JqZWN0cykuCisgICAgaWYgKGNvcmVPYmplY3QtPmlzTGluaygpIHx8IChy
ZW5kZXJlciAmJiByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSkKKyAgICAgICAgaW50ZXJmYWNlTWFz
ayB8PSAxIDw8IFdBSV9IWVBFUkxJTks7CisKKyAgICAvLyBUZXh0ICYgRWRpdGFibGUgVGV4dAor
ICAgIGlmIChyb2xlID09IFN0YXRpY1RleHRSb2xlIHx8IGNvcmVPYmplY3QtPmlzTWVudUxpc3RP
cHRpb24oKSkKKyAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOworICAgIGVs
c2UgeworICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CisgICAgICAg
ICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1RFWFQ7CisgICAgICAgICAgICBpZiAoIWNv
cmVPYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9
IDEgPDwgV0FJX0VESVRBQkxFX1RFWFQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAocm9sZSAhPSBUYWJsZVJvbGUpIHsKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9
IDEgPDwgV0FJX0hZUEVSVEVYVDsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVu
ZGVyZXItPmNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1h
c2sgfD0gMSA8PCBXQUlfVEVYVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRk
IHRoZSBURVhUIGludGVyZmFjZSBmb3IgbGlzdCBpdGVtcyB3aG9zZQorICAgICAgICAgICAgLy8g
Zmlyc3QgYWNjZXNzaWJsZSBjaGlsZCBoYXMgYSB0ZXh0IHJlbmRlcmVyCisgICAgICAgICAgICBp
ZiAocm9sZSA9PSBMaXN0SXRlbVJvbGUpIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjb3JlT2JqZWN0
LT5jaGlsZHJlbigpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhSZW5kZXJDaGlsZCA9IGNo
aWxkcmVuLmF0KDApLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9
IGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KGF4UmVuZGVyQ2hpbGQpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEltYWdlCisg
ICAgaWYgKGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKKyAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAx
IDw8IFdBSV9JTUFHRTsKKworICAgIC8vIFRhYmxlCisgICAgaWYgKHJvbGUgPT0gVGFibGVSb2xl
KQorICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1RBQkxFOworCisgICAgLy8gRG9j
dW1lbnQKKyAgICBpZiAocm9sZSA9PSBXZWJBcmVhUm9sZSkKKyAgICAgICAgaW50ZXJmYWNlTWFz
ayB8PSAxIDw8IFdBSV9ET0NVTUVOVDsKKworICAgIC8vIFZhbHVlCisgICAgaWYgKHJvbGUgPT0g
U2xpZGVyUm9sZSkKKyAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9WQUxVRTsKKwor
ICAgIHJldHVybiBpbnRlcmZhY2VNYXNrOworfQorCitzdGF0aWMgY29uc3QgY2hhciogZ2V0VW5p
cXVlQWNjZXNzaWJpbGl0eVR5cGVOYW1lKGd1aW50MTYgaW50ZXJmYWNlTWFzaykKK3sKKyNkZWZp
bmUgV0FJX1RZUEVfTkFNRV9MRU4gKDMwKSAvKiBFbm91Z2ggZm9yIHByZWZpeCArIDUgaGV4IGNo
YXJhY3RlcnMgKG1heCkgKi8KKyAgICBzdGF0aWMgY2hhciBuYW1lW1dBSV9UWVBFX05BTUVfTEVO
ICsgMV07CisKKyAgICBnX3NwcmludGYobmFtZSwgIldBSVR5cGUleCIsIGludGVyZmFjZU1hc2sp
OworICAgIG5hbWVbV0FJX1RZUEVfTkFNRV9MRU5dID0gJ1wwJzsKKworICAgIHJldHVybiBuYW1l
OworfQorCitzdGF0aWMgR1R5cGUgZ2V0QWNjZXNzaWJpbGl0eVR5cGVGcm9tT2JqZWN0KEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgc3RhdGljIGNvbnN0IEdUeXBlSW5m
byB0eXBlSW5mbyA9IHsKKyAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGVDbGFzcyksCisg
ICAgICAgIChHQmFzZUluaXRGdW5jKSAwLAorICAgICAgICAoR0Jhc2VGaW5hbGl6ZUZ1bmMpIDAs
CisgICAgICAgIChHQ2xhc3NJbml0RnVuYykgMCwKKyAgICAgICAgKEdDbGFzc0ZpbmFsaXplRnVu
YykgMCwKKyAgICAgICAgMCwgLyogY2xhc3MgZGF0YSAqLworICAgICAgICBzaXplb2YoV2ViS2l0
QWNjZXNzaWJsZSksIC8qIGluc3RhbmNlIHNpemUgKi8KKyAgICAgICAgMCwgLyogbmIgcHJlYWxs
b2NzICovCisgICAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgMCwKKyAgICAgICAgMCAvKiB2YWx1
ZSB0YWJsZSAqLworICAgIH07CisKKyAgICBndWludDE2IGludGVyZmFjZU1hc2sgPSBnZXRJbnRl
cmZhY2VNYXNrRnJvbU9iamVjdChjb3JlT2JqZWN0KTsKKyAgICBjb25zdCBjaGFyKiBhdGtUeXBl
TmFtZSA9IGdldFVuaXF1ZUFjY2Vzc2liaWxpdHlUeXBlTmFtZShpbnRlcmZhY2VNYXNrKTsKKyAg
ICBHVHlwZSB0eXBlID0gZ190eXBlX2Zyb21fbmFtZShhdGtUeXBlTmFtZSk7CisgICAgaWYgKHR5
cGUpCisgICAgICAgIHJldHVybiB0eXBlOworCisgICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9z
dGF0aWMoV0VCS0lUX1RZUEVfQUNDRVNTSUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdGtUeXBlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
dHlwZUluZm8sIEdUeXBlRmxhZ3MoMCkpOworICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkgPCBHX05f
RUxFTUVOVFMoQXRrSW50ZXJmYWNlc0luaXRGdW5jdGlvbnMpOyBpKyspIHsKKyAgICAgICAgaWYg
KGludGVyZmFjZU1hc2sgJiAoMSA8PCBpKSkKKyAgICAgICAgICAgIGdfdHlwZV9hZGRfaW50ZXJm
YWNlX3N0YXRpYyh0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdldEF0a0ludGVyZmFjZVR5cGVGcm9tV0FJVHlwZShzdGF0aWNfY2FzdDxXQUlUeXBlPihpKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkF0a0ludGVyZmFjZXNJ
bml0RnVuY3Rpb25zW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZTsKK30KKworV2ViS2l0
QWNjZXNzaWJsZSogd2Via2l0QWNjZXNzaWJsZU5ldyhBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0KQoreworICAgIEdUeXBlIHR5cGUgPSBnZXRBY2Nlc3NpYmlsaXR5VHlwZUZyb21PYmpl
Y3QoY29yZU9iamVjdCk7CisgICAgQXRrT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxBdGtP
YmplY3QqPihnX29iamVjdF9uZXcodHlwZSwgMCkpOworCisgICAgYXRrX29iamVjdF9pbml0aWFs
aXplKG9iamVjdCwgY29yZU9iamVjdCk7CisKKyAgICByZXR1cm4gV0VCS0lUX0FDQ0VTU0lCTEUo
b2JqZWN0KTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRGV0YWNoKFdlYktpdEFjY2Vzc2li
bGUqIGFjY2Vzc2libGUpCit7CisgICAgQVNTRVJUKGFjY2Vzc2libGUtPm1fb2JqZWN0KTsKKwor
ICAgIGlmIChjb3JlKGFjY2Vzc2libGUpLT5yb2xlVmFsdWUoKSA9PSBXZWJBcmVhUm9sZSkKKyAg
ICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGFjY2Vzc2libGUsICJzdGF0ZS1jaGFuZ2UiLCAi
ZGVmdW5jdCIsIHRydWUpOworCisgICAgLy8gV2UgcmVwbGFjZSB0aGUgV2ViQ29yZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0IHdpdGggYSBmYWxsYmFjayBvYmplY3QgdGhhdAorICAgIC8vIHByb3ZpZGVz
IGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIHJlcGV0aXRpdmUgbnVsbC1jaGVja2lu
ZyBhZnRlcgorICAgIC8vIGRldGFjaG1lbnQuCisgICAgYWNjZXNzaWJsZS0+bV9vYmplY3QgPSBm
YWxsYmFja09iamVjdCgpOworfQorCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVHZXRGb2N1
c2VkRWxlbWVudChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIGlmICghYWNj
ZXNzaWJsZS0+bV9vYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IGZvY3VzZWRPYmogPSBhY2Nlc3NpYmxlLT5tX29iamVjdC0+Zm9jdXNl
ZFVJRWxlbWVudCgpOworICAgIGlmICghZm9jdXNlZE9iaikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gZm9jdXNlZE9iai0+d3JhcHBlcigpOworfQorCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXZWJLaXRBY2Nlc3Np
YmxlKiBhY2Nlc3NpYmxlKQoreworICAgIHJldHVybiBhY2Nlc3NpYmxlLT5tX29iamVjdDsKK30K
KworQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25v
cmVkKEFjY2Vzc2liaWxpdHlPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQpCit7
CisgICAgLy8gSW5kaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBib2d1cyBoYXMgdHJhbnNwaXJlZC4K
KyAgICBvZmZzZXQgPSAtMTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlZmVyZW5jZU9i
amVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIE5vZGUqIGZvY3VzZWROb2RlID0gcmVmZXJlbmNlT2JqZWN0LT5zZWxlY3Rpb24oKS5l
bmQoKS5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFmb2N1c2VkTm9kZSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBSZW5kZXJPYmplY3QqIGZvY3VzZWRSZW5kZXJlciA9IGZvY3VzZWROb2Rl
LT5yZW5kZXJlcigpOworICAgIGlmICghZm9jdXNlZFJlbmRlcmVyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRPYmplY3QgPSBkb2N1bWVudC0+
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkUmVuZGVyZXIpOworICAgIGlmICgh
Zm9jdXNlZE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBMb29rIGZvciB0aGUg
YWN0dWFsIChub3QgaWdub3JpbmcgYWNjZXNzaWJpbGl0eSkgc2VsZWN0ZWQgb2JqZWN0LgorICAg
IGlmIChmb2N1c2VkT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgIGZv
Y3VzZWRPYmplY3QgPSBmb2N1c2VkT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAg
ICBpZiAoIWZvY3VzZWRPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRG9uJ3Qg
aWdub3JlIGxpbmtzIGlmIHRoZSBvZmZzZXQgaXMgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGxpbmsu
CisgICAgaWYgKCFyZWZlcmVuY2VPYmplY3QtPmlzTGluaygpICYmIGZvY3VzZWRPYmplY3QtPmlz
TGluaygpKQorICAgICAgICBmb2N1c2VkT2JqZWN0ID0gZm9jdXNlZE9iamVjdC0+cGFyZW50T2Jq
ZWN0VW5pZ25vcmVkKCk7CisgICAgaWYgKCFmb2N1c2VkT2JqZWN0KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IDA7CisgICAgaWYgKGZvY3VzZWRPYmplY3QgIT0g
cmVmZXJlbmNlT2JqZWN0IHx8IGZvY3VzZWRPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAg
ICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgZmlyc3QgY2hpbGQncyBub2RlIG9mIHRoZSByZWZl
cmVuY2UKKyAgICAgICAgLy8gb2JqZWN0IGFzIHRoZSBzdGFydCBwb2ludCB0byBjYWxjdWxhdGUg
dGhlIGNhcmV0IG9mZnNldAorICAgICAgICAvLyBiZWNhdXNlIHdlIHdhbnQgaXQgdG8gYmUgcmVs
YXRpdmUgdG8gdGhlIG9iamVjdCBvZgorICAgICAgICAvLyByZWZlcmVuY2UsIG5vdCBqdXN0IHRv
IHRoZSBmb2N1c2VkIG9iamVjdCAod2hpY2ggY291bGQgaGF2ZQorICAgICAgICAvLyBwcmV2aW91
cyBzaWJsaW5ncyB3aGljaCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHRvbykuCisgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Rmlyc3RDaGlsZCA9IHJlZmVyZW5jZU9iamVjdC0+
Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoYXhGaXJzdENoaWxkKQorICAgICAgICAgICAgc3Rh
cnROb2RlID0gYXhGaXJzdENoaWxkLT5ub2RlKCk7CisgICAgfQorICAgIGlmICghc3RhcnROb2Rl
KQorICAgICAgICBzdGFydE5vZGUgPSBmb2N1c2VkT2JqZWN0LT5ub2RlKCk7CisKKyAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9u
SW5Ob2RlKHN0YXJ0Tm9kZSksIERPV05TVFJFQU0pOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRQ
b3NpdGlvbiA9IGZvY3VzZWRPYmplY3QtPnNlbGVjdGlvbigpLnZpc2libGVFbmQoKTsKKworICAg
IGlmIChzdGFydFBvc2l0aW9uID09IGVuZFBvc2l0aW9uKQorICAgICAgICBvZmZzZXQgPSAwOwor
ICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSkgeworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLnBy
ZXZpb3VzKCkpOworICAgICAgICBvZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJh
bmdlLmdldCgpLCB0cnVlKSArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IG1ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgICAg
IG9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwor
ICAgIH0KKworICAgIHJldHVybiBmb2N1c2VkT2JqZWN0OworfQorCisjZW5kaWYgLy8gSEFWRShB
Q0NFU1NJQklMSVRZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgKc2ltaWxhcml0eSBpbmRl
eCA2OSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaAppbmRleCBjNTZmMzJmLi4z
MzU5ODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgKQEAgLTEsNiArMSwxNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQg
YXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2Rl
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOCwx
MyArMjgsMTMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGtfaAotI2RlZmluZSBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0a19oCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrX2gK
KyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGtfaAogCiAjaW5jbHVkZSA8YXRrL2F0
ay5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgQWNjZXNzaWJpbGl0eU9iamVj
dDsKK2NsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiB9CiAKIEdfQkVHSU5fREVDTFMKQEAgLTM5
LDI5ICs0OSwyNyBAQCBHX0JFR0lOX0RFQ0xTCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QWNjZXNz
aWJsZSAgICAgICAgICAgICAgICBXZWJLaXRBY2Nlc3NpYmxlOwogdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdEFjY2Vzc2libGVDbGFzcyAgICAgICAgICAgV2ViS2l0QWNjZXNzaWJsZUNsYXNzOwogCi1z
dHJ1Y3QgX1dlYktpdEFjY2Vzc2libGUKLXsKK3N0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZSB7CiAg
ICAgQXRrT2JqZWN0IHBhcmVudDsKICAgICBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBt
X29iamVjdDsKIH07CiAKLXN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZUNsYXNzCi17CitzdHJ1Y3Qg
X1dlYktpdEFjY2Vzc2libGVDbGFzcyB7CiAgICAgQXRrT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OwogfTsKIAotR1R5cGUgd2Via2l0X2FjY2Vzc2libGVfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19D
T05TVDsKK0dUeXBlIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05T
VDsKIAotV2ViS2l0QWNjZXNzaWJsZSogd2Via2l0X2FjY2Vzc2libGVfbmV3IChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlX29iamVjdCk7CitXZWJLaXRBY2Nlc3NpYmxlKiB3ZWJr
aXRBY2Nlc3NpYmxlTmV3KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKTsKIAotV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxp
dHlfb2JqZWN0IChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKTsKK3ZvaWQgd2Via2l0QWNj
ZXNzaWJsZURldGFjaChXZWJLaXRBY2Nlc3NpYmxlKik7CiAKLXZvaWQgd2Via2l0X2FjY2Vzc2li
bGVfZGV0YWNoIChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKTsKK0F0a09iamVjdCogd2Vi
a2l0QWNjZXNzaWJsZUdldEZvY3VzZWRFbGVtZW50KFdlYktpdEFjY2Vzc2libGUqKTsKIAotQXRr
T2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50KFdlYktpdEFjY2Vz
c2libGUqIGFjY2Vzc2libGUpOworV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogd2Via2l0
QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV2ViS2l0QWNjZXNzaWJsZSopOwogCiBX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRV
bmlnbm9yZWQoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCosIGludCYgb2Zmc2V0KTsKIAog
R19FTkRfREVDTFMKIAotI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrX2gK
KyNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0a19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAKaW5kZXggYTYzNzg3MC4uODg0
OWNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRnJhbWVTZWxlY3Rp
b25HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0ZyYW1lU2VsZWN0aW9u
R3RrLmNwcApAQCAtMjAsMTAgKzIwLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRnJhbWVTZWxlY3Rpb24uaCIKIAotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiUmVmUHRyLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuaCIKIAogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDA4YmI4
NDkuLjc4M2VjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMS0y
MSAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dUS10gUmVmYWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1
bGFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSB0aGUgaW5jbHVkZSBmb3IgdGhlIEFjY2Vzc2liaWxpdHlPYmplY3Qgd3JhcHBlciBoZWFkZXIg
YW5kCisgICAgICAgIHVwZGF0ZSBjYWxscyB0byB0aGUgb2xkIHdlYmtpdF9hY2Nlc3NpYmxlX2dl
dF9mb2N1c2VkX2VsZW1lbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpn
ZXRGb2N1c2VkQWNjZXNzaWJsZUVsZW1lbnQpOiBDYWxsIHRvCisgICAgICAgIHdlYmtpdEFjY2Vz
c2libGVHZXRGb2N1c2VkRWxlbWVudCwgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2xkIG5hbWUuCisg
ICAgICAgIChtb2RpZnlBY2Nlc3NpYmlsaXR5VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6YWNjZXNzaWJpbGl0eUhlbHBUZXh0KTogRGl0dG8uCisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKwogMjAxMi0wMS0xOCAgRXZhbiBOZW1l
cnNvbiAgPGV2YW5AY29ldXMtZ3JvdXAuY29tPgogCiAgICAgICAgIFtHVEtdIFdlYktpdC0zLjAu
Z2lyIGRvZXMgbm90IGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgQyBpbmNsdWRlcyBvciBleHBv
cnRlZCBwYWNrYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggMTlmYzZmYi4uYzU5
ZTFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5j
bHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuaCIKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRE9N
V3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTYwLDYgKzU5LDcgQEAK
ICNpbmNsdWRlICJTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuaCIKICNpbmNsdWRlICJXZWJLaXRET01SYW5nZVByaXZhdGUuaCIKICNpbmNsdWRlICJXb3Jr
ZXJUaHJlYWQuaCIKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgpAQCAtNDg0LDcg
KzQ4NCw3IEBAIEF0a09iamVjdCogRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGb2N1c2Vk
QWNjZXNzaWJsZUVsZW1lbnQoV2ViS2l0V2ViRnJhbWUqCiAgICAgaWYgKCF3cmFwcGVyKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNl
ZF9lbGVtZW50KFdFQktJVF9BQ0NFU1NJQkxFKHdyYXBwZXIpKTsKKyAgICByZXR1cm4gd2Via2l0
QWNjZXNzaWJsZUdldEZvY3VzZWRFbGVtZW50KFdFQktJVF9BQ0NFU1NJQkxFKHdyYXBwZXIpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTc2MSw3ICs3NjEsNyBAQCBzdGF0aWMg
dm9pZCBtb2RpZnlBY2Nlc3NpYmlsaXR5VmFsdWUoQXRrT2JqZWN0KiBheE9iamVjdCwgYm9vbCBp
bmNyZW1lbnQpCiAgICAgaWYgKCFheE9iamVjdCB8fCAhV0VCS0lUX0lTX0FDQ0VTU0lCTEUoYXhP
YmplY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0ID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0KFdFQktJ
VF9BQ0NFU1NJQkxFKGF4T2JqZWN0KSk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCA9IHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NF
U1NJQkxFKGF4T2JqZWN0KSk7CiAgICAgaWYgKCFjb3JlT2JqZWN0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTc4Niw3ICs3ODYsNyBAQCBDU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
YWNjZXNzaWJpbGl0eUhlbHBUZXh0KEF0a09iamVjdCogYXhPYmplY3QpCiAgICAgaWYgKCFheE9i
amVjdCB8fCAhV0VCS0lUX0lTX0FDQ0VTU0lCTEUoYXhPYmplY3QpKQogICAgICAgICByZXR1cm4g
Q1N0cmluZygpOwogCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IHdlYmtp
dF9hY2Nlc3NpYmxlX2dldF9hY2Nlc3NpYmlsaXR5X29iamVjdChXRUJLSVRfQUNDRVNTSUJMRShh
eE9iamVjdCkpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSB3ZWJraXRB
Y2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShheE9iamVj
dCkpOwogICAgIGlmICghY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKaW5kZXggMGNjZGRk
MS4uNDdiODg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUu
Y3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKIAogI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckF0ay5oIgogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKQEAgLTU1LDYg
KzU0LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU3Vic3Rp
dHV0ZURhdGEuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXZWJLaXRB
Y2Nlc3NpYmxlV3JhcHBlckF0ay5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIndl
YmtpdC9XZWJLaXRET01SYW5nZVByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRlbnVtdHlwZXMu
aCIKLS0gCjEuNy43LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123474</attachid>
            <date>2012-01-22 08:53:05 -0800</date>
            <delta_ts>2012-01-22 09:01:50 -0800</delta_ts>
            <desc>1. Rename file for ATK AccessibilityObject wrapper</desc>
            <filename>bug-76783-20120122175259.patch</filename>
            <type>text/plain</type>
            <size>221092</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWJhMGQ3OTZmOGI5ZmM1
MWUxNTdjYzYzZDUxN2M5Mjk3MGJkNzYwMy4uMzMwZDIwMDY5MWY2MzU2MmEyZDA0Yzc4ZmJkNDZh
NTgwMWVjZGI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxMi0wMS0yMiAgTWFy
aW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10g
UmVmYWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSB0aGUg
ZmlsZSBmb3IgdGhlIEFUSyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdyYXBwZXIgdG8gYmUgbW9yZQor
ICAgICAgICBjb2hlcmVudCB3aXRoIHRoZSByZXN0IG9mIHRoZSBmaWxlcyBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
V3JhcHBlckF0ay5jcHA6IFJlbmFtZWQgZnJvbQorICAgICAgICBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAuCisgICAgICAg
IChmYWxsYmFja09iamVjdCk6CisgICAgICAgIChyZXR1cm5TdHJpbmcpOgorICAgICAgICAoY29y
ZSk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZSk6CisgICAgICAgICh3ZWJr
aXRfYWNjZXNzaWJsZV9nZXRfZGVzY3JpcHRpb24pOgorICAgICAgICAoc2V0QXRrUmVsYXRpb25T
ZXRGcm9tQ29yZU9iamVjdCk6CisgICAgICAgIChpc1Jvb3RPYmplY3QpOgorICAgICAgICAoYXRr
UGFyZW50T2ZSb290T2JqZWN0KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9wYXJl
bnQpOgorICAgICAgICAoZ2V0TkNoaWxkcmVuRm9yVGFibGUpOgorICAgICAgICAod2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X25fY2hpbGRyZW4pOgorICAgICAgICAoZ2V0Q2hpbGRGb3JUYWJsZSk6Cisg
ICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9yZWZfY2hpbGQpOgorICAgICAgICAoZ2V0SW5kZXhJ
blBhcmVudEZvckNlbGxJblJvdyk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9nZXRfaW5k
ZXhfaW5fcGFyZW50KToKKyAgICAgICAgKGFkZEF0dHJpYnV0ZVRvU2V0KToKKyAgICAgICAgKHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVzKToKKyAgICAgICAgKGF0a1JvbGUpOgorICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X3JvbGUpOgorICAgICAgICAoc2VsZWN0aW9uQmVs
b25nc1RvT2JqZWN0KToKKyAgICAgICAgKGlzVGV4dFdpdGhDYXJldCk6CisgICAgICAgIChzZXRB
dGtTdGF0ZVNldEZyb21Db3JlT2JqZWN0KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3Jl
Zl9zdGF0ZV9zZXQpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfcmVmX3JlbGF0aW9uX3Nl
dCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9h
Y2Nlc3NpYmxlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2NsYXNzX2lu
aXQpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X3R5cGUpOgorICAgICAgICAod2Vi
a2l0X2FjY2Vzc2libGVfYWN0aW9uX2RvX2FjdGlvbik6CisgICAgICAgICh3ZWJraXRfYWNjZXNz
aWJsZV9hY3Rpb25fZ2V0X25fYWN0aW9ucyk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9h
Y3Rpb25fZ2V0X2Rlc2NyaXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlv
bl9nZXRfa2V5YmluZGluZyk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0
X25hbWUpOgorICAgICAgICAoYXRrX2FjdGlvbl9pbnRlcmZhY2VfaW5pdCk6CisgICAgICAgIChs
aXN0T2JqZWN0Rm9yU2VsZWN0aW9uKToKKyAgICAgICAgKG9wdGlvbkZyb21MaXN0KToKKyAgICAg
ICAgKG9wdGlvbkZyb21TZWxlY3Rpb24pOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfc2Vs
ZWN0aW9uX2FkZF9zZWxlY3Rpb24pOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfc2VsZWN0
aW9uX2NsZWFyX3NlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rp
b25fcmVmX3NlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25f
Z2V0X3NlbGVjdGlvbl9jb3VudCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rp
b25faXNfY2hpbGRfc2VsZWN0ZWQpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfc2VsZWN0
aW9uX3JlbW92ZV9zZWxlY3Rpb24pOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfc2VsZWN0
aW9uX3NlbGVjdF9hbGxfc2VsZWN0aW9uKToKKyAgICAgICAgKGF0a19zZWxlY3Rpb25faW50ZXJm
YWNlX2luaXQpOgorICAgICAgICAodXRmOFN1YnN0cik6CisgICAgICAgIChjb252ZXJ0VW5pQ2hh
clRvVVRGOCk6CisgICAgICAgICh0ZXh0Rm9yUmVuZGVyZXIpOgorICAgICAgICAodGV4dEZvck9i
amVjdCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KToKKyAgICAg
ICAgKGdldEdhaWxUZXh0VXRpbEZvckF0ayk6CisgICAgICAgIChnZXRQYW5nb0xheW91dEZvckF0
ayk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNl
dCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2F0X29mZnNldCk6
CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQp
OgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2F0X29mZnNl
dCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQpOgor
ICAgICAgICAoYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdCk6CisgICAgICAgIChnZXRB
dHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKGNvbXBhcmVBdHRy
aWJ1dGUpOgorICAgICAgICAoYXR0cmlidXRlU2V0RGlmZmVyZW5jZSk6CisgICAgICAgIChhY2Nl
c3NpYmlsaXR5T2JqZWN0TGVuZ3RoKToKKyAgICAgICAgKGdldEFjY2Vzc2liaWxpdHlPYmplY3RG
b3JPZmZzZXQpOgorICAgICAgICAoZ2V0UnVuQXR0cmlidXRlc0Zyb21BY2Nlc2liaWxpdHlPYmpl
Y3QpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMp
OgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVz
KToKKyAgICAgICAgKHRleHRFeHRlbnRzKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X3JhbmdlX2V4dGVudHMpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfY2hhcmFjdGVyX2NvdW50KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X29mZnNldF9hdF9wb2ludCk6CisgICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0
KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X25fc2VsZWN0aW9ucyk6Cisg
ICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9zZWxlY3Rpb24pOgorICAgICAgICAo
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9hZGRfc2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24pOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KToKKyAgICAgICAgKGF0a190ZXh0X2ludGVyZmFjZV9pbml0KToK
KyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfc2V0X3J1bl9hdHRyaWJ1
dGVzKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfc2V0X3RleHRf
Y29udGVudHMpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9pbnNl
cnRfdGV4dCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2NvcHlf
dGV4dCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2N1dF90ZXh0
KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQp
OgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9wYXN0ZV90ZXh0KToK
KyAgICAgICAgKGF0a19lZGl0YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKGNv
bnRlbnRzVG9BdGspOgorICAgICAgICAoYXRrVG9Db250ZW50cyk6CisgICAgICAgICh3ZWJraXRf
YWNjZXNzaWJsZV9jb21wb25lbnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQpOgorICAgICAgICAo
d2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dldF9leHRlbnRzKToKKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFiX2ZvY3VzKToKKyAgICAgICAgKGF0a19jb21wb25l
bnRfaW50ZXJmYWNlX2luaXQpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfaW1hZ2VfZ2V0
X2ltYWdlX3Bvc2l0aW9uKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9p
bWFnZV9kZXNjcmlwdGlvbik6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRf
aW1hZ2Vfc2l6ZSk6CisgICAgICAgIChhdGtfaW1hZ2VfaW50ZXJmYWNlX2luaXQpOgorICAgICAg
ICAoY2VsbCk6CisgICAgICAgIChjZWxsSW5kZXgpOgorICAgICAgICAoY2VsbEF0SW5kZXgpOgor
ICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGFibGVfcmVmX2F0KToKKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9pbmRleF9hdCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNz
aWJsZV90YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3Np
YmxlX3RhYmxlX2dldF9yb3dfYXRfaW5kZXgpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVf
dGFibGVfZ2V0X25fY29sdW1ucyk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9n
ZXRfbl9yb3dzKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5f
ZXh0ZW50X2F0KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfZXh0
ZW50X2F0KToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5faGVh
ZGVyKToKKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfaGVhZGVyKToK
KyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jYXB0aW9uKToKKyAgICAgICAg
KHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZGVzY3JpcHRpb24pOgorICAgICAg
ICAod2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlwdGlvbik6CisgICAgICAg
IChhdGtfdGFibGVfaW50ZXJmYWNlX2luaXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5
cGVydGV4dEdldExpbmspOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldE5M
aW5rcyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4KToK
KyAgICAgICAgKGF0a0h5cGVydGV4dEludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUh5cGVybGlua0ltcGxHZXRIeXBlcmxpbmspOgorICAgICAgICAoYXRrSHlwZXJsaW5r
SW1wbEludGVyZmFjZUluaXQpOgorICAgICAgICAoZG9jdW1lbnRBdHRyaWJ1dGVWYWx1ZSk6Cisg
ICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVlKToK
KyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVzKToKKyAg
ICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50X2dldF9sb2NhbGUpOgorICAgICAgICAo
YXRrX2RvY3VtZW50X2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVW
YWx1ZUdldEN1cnJlbnRWYWx1ZSk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRN
YXhpbXVtVmFsdWUpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bVZh
bHVlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVWYWx1ZVNldEN1cnJlbnRWYWx1ZSk6Cisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtSW5jcmVtZW50KToKKyAgICAg
ICAgKGF0a1ZhbHVlSW50ZXJmYWNlSW5pdCk6CisgICAgICAgIChHZXRBdGtJbnRlcmZhY2VUeXBl
RnJvbVdBSVR5cGUpOgorICAgICAgICAoZ2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QpOgorICAg
ICAgICAoZ2V0VW5pcXVlQWNjZXNzaWJpbGl0eVR5cGVOYW1lKToKKyAgICAgICAgKGdldEFjY2Vz
c2liaWxpdHlUeXBlRnJvbU9iamVjdCk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9uZXcp
OgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0KToK
KyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2RldGFjaCk6CisgICAgICAgICh3ZWJraXRfYWNj
ZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50KToKKyAgICAgICAgKG9iamVjdEZvY3VzZWRBbmRD
YXJldE9mZnNldFVuaWdub3JlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuaDogUmVuYW1lZCBmcm9tCisgICAgICAgIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmguCisK
KyAgICAgICAgVXBkYXRlIHRoZSBpbmNsdWRlIGZvciB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdCB3
cmFwcGVyIGhlYWRlci4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2Fj
aGVBdGsuY3BwOiBVcGRhdGUgaW5jbHVkZS4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcDogRGl0dG8uCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oOiBEaXR0by4KKyAgICAgICAgKiBl
ZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHA6CisKKyAgICAgICAgVXBkYXRlIGZpbGVu
YW1lIGZvciB0aGUgQVRLIHdyYXBwZXIgaW4gYnVpbGQgZmlsZXMuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBVcGRhdGVkLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogVXBkYXRl
ZC4KKwogMjAxMi0wMS0yMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNv
bT4KIAogICAgICAgICA8ZmVJbWFnZT4gaWdub3JlcyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25l
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCmluZGV4IDA4YmI4NDk2NjdkZjlkMDRhMjdiZmE2ZTM0NjZhN2QwYzUy
Y2E3YzAuLjllYzg4ZWIxYWYzMGU1MGZkMTk1NjY4YjU0NTQ0MzYxOTcyMGE4YzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQcmFk
YSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0b3IgR1RLJ3Mg
YWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGUgaW5jbHVkZSBmb3IgdGhl
IEFjY2Vzc2liaWxpdHlPYmplY3Qgd3JhcHBlciBoZWFkZXIuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwOiBVcGRhdGUgaW5jbHVkZS4KKyAg
ICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwOiBEaXR0by4KKwogMjAxMi0wMS0xOCAg
RXZhbiBOZW1lcnNvbiAgPGV2YW5AY29ldXMtZ3JvdXAuY29tPgogCiAgICAgICAgIFtHVEtdIFdl
YktpdC0zLjAuZ2lyIGRvZXMgbm90IGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgQyBpbmNsdWRl
cyBvciBleHBvcnRlZCBwYWNrYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
MjEzMDFjN2NlYjE5MjcyYWM4MTBjNjI5MjU4NzNhZDYzY2ZkMTFjMy4uNDMyMWI5MzE1ZWVmMGNi
NWFmZjEzZjQ4ZGRjMDY5MWVmMTdhZmQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC00NDIxLDExICs0NDIxLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAjIFdlYkNvcmUg
ZmlsZXMgdGhhdCB1c2UgR1RLL0dESyBvciBhbnkgb3RoZXIgZGVwZW5kZW5jeSB0aGF0IHJlcXVp
cmVzIEdUSysuCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2Fj
aGVBdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJHdGsuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
MmYxMDkzNzY4MDcyMWZjM2U4MjM2M2ZmMzYyNTFmYjhiNzk0ZTNkMy4uZjUzMzUyZjRmYzAxOGFh
ZTdiMjQ0Mjk0ZjgyYzI5YTljZTNjOTk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTc2NiwxMCAr
MTc2NiwxMCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZWZsL0FjY2Vzc2liaWxpdHlP
YmplY3RFZmwuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdEF0ay5jcHAnLAotICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCcsCi0gICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCcsCiAgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaCcsCisgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwJywK
KyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0
ay5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1t
JywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFj
Lm1tJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKaW5kZXggMGRjNGU1MmU5MmE3ZTNlNTQ0MjZjYzc0ODQx
MDM5ZTUyZTc2YjJlMC4uYTFmOTE1YjRkZGUyZTUzNTE2OGZjZTk4MTE5ZGM3OGRlMDNiOGQzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RDYWNo
ZUF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RD
YWNoZUF0ay5jcHAKQEAgLTIxLDEzICsyMSwxMyBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUu
aCIKIAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVhZGFjYWYzYmJiODk1OWY5YWU1YTUyNmJjMmRlYTIxYjZkMTAz
NzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKgotICogUG9ydGlvbnMgZnJvbSBNb3pp
bGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2Rl
IGlzIG1vemlsbGEub3JnIGNvZGUuCi0gKgotICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCi0gKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAy
Ci0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIgot
Ci0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotCi0jaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgot
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0LmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxp
c3RCb3guaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oIgotI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKLSNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5VGFibGVSb3cuaCIKLSNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAi
RWRpdG9yLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJHT3duUHRyLmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGlzdE1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaCIKLSNpbmNs
dWRlICJodG1sZWRpdGluZy5oIgotI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKLQotI2luY2x1
ZGUgPGF0ay9hdGsuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9ncHJpbnRm
Lmg+Ci0jaW5jbHVkZSA8bGliZ2FpbC11dGlsL2dhaWwtdXRpbC5oPgotI2luY2x1ZGUgPHBhbmdv
L3BhbmdvLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGlj
IEdRdWFyayBoeXBlcmxpbmtPYmplY3RRdWFyayA9IDA7Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBmYWxsYmFja09iamVjdCgpCi17Ci0gICAgLy8gRklYTUU6IEFuIEFYT2JqZWN0Q2Fj
aGUgd2l0aCBhIERvY3VtZW50IGlzIG1lYW5pbmdsZXNzLgotICAgIHN0YXRpYyBBWE9iamVjdENh
Y2hlKiBmYWxsYmFja0NhY2hlID0gbmV3IEFYT2JqZWN0Q2FjaGUoMCk7Ci0gICAgc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IDA7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAg
ICAgLy8gRklYTUU6IHVzaW5nIGZhbGxiYWNrQ2FjaGUtPmdldE9yQ3JlYXRlKExpc3RCb3hPcHRp
b25Sb2xlKSBpcyBhIGhhY2sKLSAgICAgICAgb2JqZWN0ID0gZmFsbGJhY2tDYWNoZS0+Z2V0T3JD
cmVhdGUoTGlzdEJveE9wdGlvblJvbGUpOwotICAgICAgICBvYmplY3QtPnJlZigpOwotICAgIH0K
LQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLS8vIFVzZWQgdG8gcHJvdmlkZSBjb25zdCBjaGFy
KiByZXR1cm5zLgotc3RhdGljIGNvbnN0IGNoYXIqIHJldHVyblN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cikKLXsKLSAgICBzdGF0aWMgQ1N0cmluZyByZXR1cm5lZFN0cmluZzsKLSAgICByZXR1cm5l
ZFN0cmluZyA9IHN0ci51dGY4KCk7Ci0gICAgcmV0dXJuIHJldHVybmVkU3RyaW5nLmRhdGEoKTsK
LX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoV2ViS2l0QWNjZXNzaWJsZSog
YWNjZXNzaWJsZSkKLXsKLSAgICBpZiAoIWFjY2Vzc2libGUpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGFjY2Vzc2libGUtPm1fb2JqZWN0OwotfQotCi1zdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZShBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAoIVdFQktJVF9J
U19BQ0NFU1NJQkxFKG9iamVjdCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNv
cmUoV0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KSk7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlKEF0a0FjdGlvbiogYWN0aW9uKQotewotICAgIHJldHVybiBjb3JlKEFUS19P
QkpFQ1QoYWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0
a1NlbGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1Qoc2Vs
ZWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RleHQq
IHRleHQpCi17Ci0gICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVCh0ZXh0KSk7Ci19Ci0KLXN0YXRp
YyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0VkaXRhYmxlVGV4dCogdGV4dCkKLXsKLSAg
ICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHRleHQpKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmUoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIGNv
cmUoQVRLX09CSkVDVChjb21wb25lbnQpKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmUoQXRrSW1hZ2UqIGltYWdlKQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1Qo
aW1hZ2UpKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrVGFibGUq
IHRhYmxlKQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGFibGUpKTsKLX0KLQotc3Rh
dGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQpCi17
Ci0gICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChoeXBlcnRleHQpKTsKLX0KLQotc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJl
dHVybiBjb3JlKEFUS19PQkpFQ1QoZG9jdW1lbnQpKTsKLX0KLQotc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmUoQXRrVmFsdWUqIHZhbHVlKQotewotICAgIHJldHVybiBjb3JlKEFUS19P
QkpFQ1QodmFsdWUpKTsKLX0KLQotc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0
X2dldF90ZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0
KTsKLQotc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZShBdGtP
YmplY3QqIG9iamVjdCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0g
Y29yZShvYmplY3QpOwotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZU9iamVjdC0+c3RyaW5n
VmFsdWUoKSk7Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+aXNDb250cm9sKCkpIHsKLSAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogbGFiZWwgPSBjb3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nTGFi
ZWxGb3JDb250cm9sRWxlbWVudCgpOwotICAgICAgICBpZiAobGFiZWwpIHsKLSAgICAgICAgICAg
IEF0a09iamVjdCogYXRrT2JqZWN0ID0gbGFiZWwtPndyYXBwZXIoKTsKLSAgICAgICAgICAgIGlm
IChBVEtfSVNfVEVYVChhdGtPYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKGF0a09iamVjdCksIDAsIC0xKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFRyeSB0ZXh0IHVuZGVyIHRoZSBub2RlLgotICAgICAgICBT
dHJpbmcgdGV4dFVuZGVyID0gY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOwotICAgICAg
ICBpZiAodGV4dFVuZGVyLmxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIHJldHVyblN0cmlu
Zyh0ZXh0VW5kZXIpOwotICAgIH0KLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc0ltYWdlKCkgfHwg
Y29yZU9iamVjdC0+aXNJbnB1dEltYWdlKCkpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGNvcmVP
YmplY3QtPm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIGF0dHJpYnV0ZSByYXRoZXIgdGhhbiBhbHRUZXh0
IFN0cmluZyBzbyBhcyBub3QgdG8gZmFsbCBiYWNrIG9uIHRpdGxlLgotICAgICAgICAgICAgU3Ry
aW5nIGFsdCA9IHRvSFRNTEVsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmFs
dEF0dHIpOwotICAgICAgICAgICAgaWYgKCFhbHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiByZXR1cm5TdHJpbmcoYWx0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZh
bGxiYWNrIGZvciB0aGUgd2ViQXJlYSBvYmplY3Q6IGp1c3QgcmV0dXJuIHRoZSBkb2N1bWVudCdz
IHRpdGxlLgotICAgIGlmIChjb3JlT2JqZWN0LT5pc1dlYkFyZWEoKSkgewotICAgICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoZG9j
dW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGRvY3VtZW50LT50aXRsZSgp
KTsKLSAgICB9Ci0KLSAgICAvLyBOb3RoaW5nIHdvcmtlZCBzbyBmYXIsIHRyeSB3aXRoIHRoZSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0J3MKLSAgICAvLyB0aXRsZSgpIGJlZm9yZSBnb2luZyBhaGVhZCB3
aXRoIHN0cmluZ1ZhbHVlKCkuCi0gICAgU3RyaW5nIGF4VGl0bGUgPSBjb3JlT2JqZWN0LT50aXRs
ZSgpOwotICAgIGlmICghYXhUaXRsZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByZXR1cm5T
dHJpbmcoYXhUaXRsZSk7Ci0KLSAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmVPYmplY3QtPnN0
cmluZ1ZhbHVlKCkpOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9kZXNjcmlwdGlvbihBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIE5vZGUqIG5vZGUgPSAwOwot
ICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAg
ICAgbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
SFRNTEVsZW1lbnQoKSB8fCBjb3JlT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpICE9IFVua25v
d25Sb2xlKQotICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmVPYmplY3QtPmFjY2Vzc2li
aWxpdHlEZXNjcmlwdGlvbigpKTsKLQotICAgIC8vIGF0a190YWJsZV9nZXRfc3VtbWFyeSByZXR1
cm5zIGFuIEF0a09iamVjdC4gV2UgaGF2ZSBubyBzdW1tYXJ5IG9iamVjdCwgc28gZXhwb3NlIHN1
bW1hcnkgaGVyZS4KLSAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGFibGVSb2xl
KSB7Ci0gICAgICAgIFN0cmluZyBzdW1tYXJ5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVu
dCo+KG5vZGUpLT5zdW1tYXJ5KCk7Ci0gICAgICAgIGlmICghc3VtbWFyeS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKHN1bW1hcnkpOwotICAgIH0KLQotICAgIC8v
IFRoZSB0aXRsZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHJlbGlhYmx5IGF2YWlsYWJsZSBhcyB0aGUg
b2JqZWN0J3MgZGVzY3JpcHRvbi4KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBmYWxsIGJhY2sg
b24gb3RoZXIgYXR0cmlidXRlcyBpbiBpdHMgYWJzZW5jZS4gU2VlIGJ1ZyAyNTUyNC4KLSAgICBT
dHJpbmcgdGl0bGUgPSB0b0hUTUxFbGVtZW50KG5vZGUpLT50aXRsZSgpOwotICAgIGlmICghdGl0
bGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKHRpdGxlKTsKLQotICAg
IHJldHVybiByZXR1cm5TdHJpbmcoY29yZU9iamVjdC0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRBdGtSZWxhdGlvblNldEZyb21Db3JlT2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a1JlbGF0aW9uU2V0KiByZWxhdGlvblNl
dCkKLXsKLSAgICBpZiAoY29yZU9iamVjdC0+aXNDb250cm9sKCkpIHsKLSAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogbGFiZWwgPSBjb3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nTGFiZWxGb3JD
b250cm9sRWxlbWVudCgpOwotICAgICAgICBpZiAobGFiZWwpCi0gICAgICAgICAgICBhdGtfcmVs
YXRpb25fc2V0X2FkZF9yZWxhdGlvbl9ieV90eXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05f
TEFCRUxMRURfQlksIGxhYmVsLT53cmFwcGVyKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvbnRyb2wgPSBjb3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nQ29u
dHJvbEZvckxhYmVsRWxlbWVudCgpOwotICAgICAgICBpZiAoY29udHJvbCkKLSAgICAgICAgICAg
IGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19S
RUxBVElPTl9MQUJFTF9GT1IsIGNvbnRyb2wtPndyYXBwZXIoKSk7Ci0gICAgfQotfQotCi1zdGF0
aWMgZ3BvaW50ZXIgd2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzID0gMDsKLQotc3RhdGlj
IGJvb2wgaXNSb290T2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0g
ICAgLy8gVGhlIHJvb3QgYWNjZXNzaWJsZSBvYmplY3QgaW4gV2ViQ29yZSBpcyBhbHdheXMgYW4g
b2JqZWN0IHdpdGgKLSAgICAvLyB0aGUgU2Nyb2xsZWRBcmVhIHJvbGUgd2l0aCBvbmUgY2hpbGQg
d2l0aCB0aGUgV2ViQXJlYSByb2xlLgotICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVj
dC0+aXNTY3JvbGxWaWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGZpcnN0Q2hpbGQgPSBjb3JlT2JqZWN0LT5maXJzdENoaWxkKCk7Ci0gICAg
aWYgKCFmaXJzdENoaWxkIHx8ICFmaXJzdENoaWxkLT5pc1dlYkFyZWEoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIGF0
a1BhcmVudE9mUm9vdE9iamVjdChBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVQYXJlbnQgPSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsK
LQotICAgIC8vIFRoZSB0b3AgbGV2ZWwgb2JqZWN0IGNsYWltcyB0byBub3QgaGF2ZSBhIHBhcmVu
dC4gVGhpcyBtYWtlcyBpdAotICAgIC8vIGltcG9zc2libGUgZm9yIGFzc2lzdGl2ZSB0ZWNobm9s
b2dpZXMgdG8gYXNjZW5kIHRoZSBhY2Nlc3NpYmxlCi0gICAgLy8gaGllcmFyY2h5IGFsbCB0aGUg
d2F5IHRvIHRoZSBhcHBsaWNhdGlvbi4gKEJ1ZyAzMDQ4OSkKLSAgICBpZiAoIWNvcmVQYXJlbnQg
JiYgaXNSb290T2JqZWN0KGNvcmVPYmplY3QpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gZG9j
dW1lbnQtPnZpZXcoKS0+aG9zdFdpbmRvdygpOwotICAgICAgICBpZiAoaG9zdFdpbmRvdykgewot
ICAgICAgICAgICAgUGxhdGZvcm1QYWdlQ2xpZW50IHNjcm9sbFZpZXcgPSBob3N0V2luZG93LT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICAgICAgICAgIGlmIChzY3JvbGxWaWV3KSB7Ci0gICAg
ICAgICAgICAgICAgR3RrV2lkZ2V0KiBzY3JvbGxWaWV3UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRf
cGFyZW50KHNjcm9sbFZpZXcpOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxWaWV3UGFyZW50
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShz
Y3JvbGxWaWV3UGFyZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghY29yZVBhcmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY29yZVBh
cmVudC0+d3JhcHBlcigpOwotfQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfcGFyZW50KEF0a09iamVjdCogb2JqZWN0KQotewotICAgIC8vIENoZWNrIGZpcnN0IGlm
IHRoZSBwYXJlbnQgaGFzIGJlZW4gYWxyZWFkeSBzZXQuCi0gICAgQXRrT2JqZWN0KiBhY2Nlc3Np
YmxlUGFyZW50ID0gQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xh
c3MpLT5nZXRfcGFyZW50KG9iamVjdCk7Ci0gICAgaWYgKGFjY2Vzc2libGVQYXJlbnQpCi0gICAg
ICAgIHJldHVybiBhY2Nlc3NpYmxlUGFyZW50OwotCi0gICAgLy8gUGFyZW50IG5vdCBzZXQgeWV0
LCBzbyB0cnkgdG8gZmluZCBpdCBpbiB0aGUgaGllcmFyY2h5LgotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7Ci0gICAgaWYgKCFjb3JlT2JqZWN0KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVQYXJlbnQg
PSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLQotICAgIGlmICghY29yZVBh
cmVudCAmJiBpc1Jvb3RPYmplY3QoY29yZU9iamVjdCkpCi0gICAgICAgIHJldHVybiBhdGtQYXJl
bnRPZlJvb3RPYmplY3Qob2JqZWN0KTsKLQotICAgIGlmICghY29yZVBhcmVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBHVEsgZG9lc24ndCBleHBvc2UgdGFibGUgcm93cyB0byBBc3Np
c3RpdmUgdGVjaG5vbG9naWVzLCBidXQgd2UKLSAgICAvLyBuZWVkIHRvIGhhdmUgdGhlbSBhbnl3
YXkgaW4gdGhlIGhpZXJhcmNoeSBmcm9tIFdlYkNvcmUgdG8KLSAgICAvLyBwcm9wZXJseSBwZXJm
b3JtIGNvb3JkaW5hdGVzIGNhbGN1bGF0aW9ucyB3aGVuIHJlcXVlc3RlZC4KLSAgICBpZiAoY29y
ZVBhcmVudC0+aXNUYWJsZVJvdygpICYmIGNvcmVPYmplY3QtPmlzVGFibGVDZWxsKCkpCi0gICAg
ICAgIGNvcmVQYXJlbnQgPSBjb3JlUGFyZW50LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLQot
ICAgIHJldHVybiBjb3JlUGFyZW50LT53cmFwcGVyKCk7Ci19Ci0KLXN0YXRpYyBnaW50IGdldE5D
aGlsZHJlbkZvclRhYmxlKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYmxlQ2hp
bGRyZW4gPSBjb3JlT2JqZWN0LT5jaGlsZHJlbigpOwotICAgIHNpemVfdCB0YWJsZUNoaWxkcmVu
Q291bnQgPSB0YWJsZUNoaWxkcmVuLnNpemUoKTsKLSAgICBzaXplX3QgY2VsbHNDb3VudCA9IDA7
Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgYWN0dWFsIGluZGV4IG9mIHRoZSBjZWxsIGluc2lkZSB0
aGUgdGFibGUuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlQ2hpbGRyZW5Db3Vu
dDsgKytpKSB7Ci0gICAgICAgIGlmICh0YWJsZUNoaWxkcmVuW2ldLT5pc1RhYmxlUm93KCkpIHsK
LSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciByb3dDaGlsZHJlbiA9IHRhYmxlQ2hpbGRyZW5baV0tPmNoaWxkcmVuKCk7Ci0gICAgICAg
ICAgICBjZWxsc0NvdW50ICs9IHJvd0NoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBjZWxsc0NvdW50Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNlbGxzQ291bnQ7
Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uX2NoaWxkcmVuKEF0a09i
amVjdCogb2JqZWN0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBj
b3JlKG9iamVjdCk7Ci0KLSAgICAvLyBUYWJsZXMgc2hvdWxkIGJlIHRyZWF0ZWQgaW4gYSBkaWZm
ZXJlbnQgd2F5IGJlY2F1c2Ugcm93cyBzaG91bGQKLSAgICAvLyBiZSBieXBhc3NlZCBmb3IgR1RL
IHdoZW4gZXhwb3NpbmcgdGhlIGFjY2Vzc2libGUgaGllcmFyY2h5LgotICAgIGlmIChjb3JlT2Jq
ZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gZ2V0TkNoaWxkcmVu
Rm9yVGFibGUoY29yZU9iamVjdCk7Ci0KLSAgICByZXR1cm4gY29yZU9iamVjdC0+Y2hpbGRyZW4o
KS5zaXplKCk7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRDaGlsZEZvclRh
YmxlKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIGdpbnQgaW5kZXgpCi17Ci0gICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYmxlQ2hp
bGRyZW4gPSBjb3JlT2JqZWN0LT5jaGlsZHJlbigpOwotICAgIHNpemVfdCB0YWJsZUNoaWxkcmVu
Q291bnQgPSB0YWJsZUNoaWxkcmVuLnNpemUoKTsKLSAgICBzaXplX3QgY2VsbHNDb3VudCA9IDA7
Ci0KLSAgICAvLyBMb29rIGZvciB0aGUgYWN0dWFsIGluZGV4IG9mIHRoZSBjZWxsIGluc2lkZSB0
aGUgdGFibGUuCi0gICAgc2l6ZV90IGN1cnJlbnQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGVDaGlsZHJlbkNvdW50OyArK2kp
IHsKLSAgICAgICAgaWYgKHRhYmxlQ2hpbGRyZW5baV0tPmlzVGFibGVSb3coKSkgewotICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJv
d0NoaWxkcmVuID0gdGFibGVDaGlsZHJlbltpXS0+Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHNp
emVfdCByb3dDaGlsZHJlbkNvdW50ID0gcm93Q2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICAgICAg
aWYgKGN1cnJlbnQgPCBjZWxsc0NvdW50ICsgcm93Q2hpbGRyZW5Db3VudCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcm93Q2hpbGRyZW4uYXQoY3VycmVudCAtIGNlbGxzQ291bnQpLmdldCgpOwot
ICAgICAgICAgICAgY2VsbHNDb3VudCArPSByb3dDaGlsZHJlbkNvdW50OwotICAgICAgICB9IGVs
c2UgaWYgKGNlbGxzQ291bnQgPT0gY3VycmVudCkKLSAgICAgICAgICAgIHJldHVybiB0YWJsZUNo
aWxkcmVuW2ldLmdldCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjZWxsc0NvdW50Kys7
Ci0gICAgfQotCi0gICAgLy8gU2hvdWxkbid0IHJlYWNoIGlmIHRoZSBjaGlsZCB3YXMgZm91bmQu
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxl
X3JlZl9jaGlsZChBdGtPYmplY3QqIG9iamVjdCwgZ2ludCBpbmRleCkKLXsKLSAgICBpZiAoaW5k
ZXggPCAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QgPSBjb3JlKG9iamVjdCk7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZUNo
aWxkID0gMDsKLQotICAgIC8vIFRhYmxlcyBhcmUgc3BlY2lhbCBjYXNlcyBpbiBHVEsgYmVjYXVz
ZSByb3dzIHNob3VsZCBiZQotICAgIC8vIGJ5cGFzc2VkLCBidXQgc3RpbGwgdGFraW5nIHRoZWly
IGNlbGxzIGludG8gYWNjb3VudC4KLSAgICBpZiAoY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5
VGFibGUoKSkKLSAgICAgICAgY29yZUNoaWxkID0gZ2V0Q2hpbGRGb3JUYWJsZShjb3JlT2JqZWN0
LCBpbmRleCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVuKCk7
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID49IGNoaWxkcmVuLnNp
emUoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjb3JlQ2hpbGQgPSBjaGlsZHJl
bi5hdChpbmRleCkuZ2V0KCk7Ci0gICAgfQotCi0gICAgaWYgKCFjb3JlQ2hpbGQpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgQXRrT2JqZWN0KiBjaGlsZCA9IGNvcmVDaGlsZC0+d3JhcHBlcigp
OwotICAgIGF0a19vYmplY3Rfc2V0X3BhcmVudChjaGlsZCwgb2JqZWN0KTsKLSAgICBnX29iamVj
dF9yZWYoY2hpbGQpOwotCi0gICAgcmV0dXJuIGNoaWxkOwotfQotCi1zdGF0aWMgZ2ludCBnZXRJ
bmRleEluUGFyZW50Rm9yQ2VsbEluUm93KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qp
Ci17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gY29yZU9iamVjdC0+cGFyZW50
T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiAtMTsK
LQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdyYW5kUGFyZW50ID0gcGFyZW50LT5wYXJlbnRP
YmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAoIWdyYW5kUGFyZW50KQotICAgICAgICByZXR1cm4g
LTE7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3Igcm93cyA9IGdyYW5kUGFyZW50LT5jaGlsZHJlbigpOwotICAgIHNpemVfdCByb3dzQ291bnQg
PSByb3dzLnNpemUoKTsKLSAgICBzaXplX3QgcHJldmlvdXNDZWxsc0NvdW50ID0gMDsKLQotICAg
IC8vIExvb2sgZm9yIHRoZSBhY3R1YWwgaW5kZXggb2YgdGhlIGNlbGwgaW5zaWRlIHRoZSB0YWJs
ZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm93c0NvdW50OyArK2kpIHsKLSAgICAg
ICAgaWYgKCFyb3dzW2ldLT5pc1RhYmxlUm93KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
Y2VsbHMgPSByb3dzW2ldLT5jaGlsZHJlbigpOwotICAgICAgICBzaXplX3QgY2VsbHNDb3VudCA9
IGNlbGxzLnNpemUoKTsKLQotICAgICAgICBpZiAocm93c1tpXSA9PSBwYXJlbnQpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjZWxsc0NvdW50OyArK2opIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY2VsbHNbal0gPT0gY29yZU9iamVjdCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHByZXZpb3VzQ2VsbHNDb3VudCArIGo7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBwcmV2aW91c0NlbGxzQ291bnQgKz0gY2VsbHNDb3VudDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gLTE7Ci19Ci0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfZ2V0
X2luZGV4X2luX3BhcmVudChBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwotICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudCA9IGNvcmVPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotCi0gICAg
aWYgKCFwYXJlbnQgJiYgaXNSb290T2JqZWN0KGNvcmVPYmplY3QpKSB7Ci0gICAgICAgIEF0a09i
amVjdCogYXRrUGFyZW50ID0gYXRrUGFyZW50T2ZSb290T2JqZWN0KG9iamVjdCk7Ci0gICAgICAg
IGlmICghYXRrUGFyZW50KQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIHVuc2ln
bmVkIGNvdW50ID0gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGF0a1BhcmVu
dCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChhdGtQYXJlbnQsIGkpOwotICAgICAgICAgICAgYm9vbCBjaGlsZElzT2JqZWN0ID0gY2hpbGQg
PT0gb2JqZWN0OwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwotICAgICAgICAg
ICAgaWYgKGNoaWxkSXNPYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBOZWVkIHRvIGNhbGN1bGF0ZSB0aGUgaW5kZXggb2YgdGhlIGNl
bGwgaW4gdGhlIHRhYmxlLCBhcwotICAgIC8vIHJvd3Mgd29uJ3QgYmUgZXhwb3NlZCB0byBhc3Np
c3RpdmUgdGVjaG5vbG9naWVzIGluIEdUSy4KLSAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNU
YWJsZVJvdygpICYmIGNvcmVPYmplY3QtPmlzVGFibGVDZWxsKCkpCi0gICAgICAgIHJldHVybiBn
ZXRJbmRleEluUGFyZW50Rm9yQ2VsbEluUm93KGNvcmVPYmplY3QpOwotCi0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gcGFyZW50
LT5jaGlsZHJlbigpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChjaGls
ZHJlbltpXSA9PSBjb3JlT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBhZGRBdHRyaWJ1dGVU
b1NldChBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCwgY29uc3QgY2hhciogbmFtZSwgY29u
c3QgY2hhciogdmFsdWUpCi17Ci0gICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNf
Y2FzdDxBdGtBdHRyaWJ1dGUqPihnX21hbGxvYyhzaXplb2YoQXRrQXR0cmlidXRlKSkpOwotICAg
IGF0dHJpYnV0ZS0+bmFtZSA9IGdfc3RyZHVwKG5hbWUpOwotICAgIGF0dHJpYnV0ZS0+dmFsdWUg
PSBnX3N0cmR1cCh2YWx1ZSk7Ci0gICAgYXR0cmlidXRlU2V0ID0gZ19zbGlzdF9wcmVwZW5kKGF0
dHJpYnV0ZVNldCwgYXR0cmlidXRlKTsKLQotICAgIHJldHVybiBhdHRyaWJ1dGVTZXQ7Ci19Ci0K
LXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVz
KEF0a09iamVjdCogb2JqZWN0KQotewotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
ID0gMDsKLSAgICBhdHRyaWJ1dGVTZXQgPSBhZGRBdHRyaWJ1dGVUb1NldChhdHRyaWJ1dGVTZXQs
ICJ0b29sa2l0IiwgIldlYktpdEd0ayIpOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKLSAgICBpZiAoIWNvcmVPYmplY3QpCi0gICAgICAgIHJl
dHVybiBhdHRyaWJ1dGVTZXQ7Ci0KLSAgICBpbnQgaGVhZGluZ0xldmVsID0gY29yZU9iamVjdC0+
aGVhZGluZ0xldmVsKCk7Ci0gICAgaWYgKGhlYWRpbmdMZXZlbCkgewotICAgICAgICBTdHJpbmcg
dmFsdWUgPSBTdHJpbmc6Om51bWJlcihoZWFkaW5nTGV2ZWwpOwotICAgICAgICBhdHRyaWJ1dGVT
ZXQgPSBhZGRBdHRyaWJ1dGVUb1NldChhdHRyaWJ1dGVTZXQsICJsZXZlbCIsIHZhbHVlLnV0Zjgo
KS5kYXRhKCkpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgJ2xheW91dC1ndWVzcycgYXR0cmli
dXRlIHRvIGhlbHAgQXNzaXN0aXZlCi0gICAgLy8gVGVjaG5vbG9naWVzIGtub3cgd2hlbiBhbiBl
eHBvc2VkIHRhYmxlIGlzIG5vdCBkYXRhIHRhYmxlLgotICAgIGlmIChjb3JlT2JqZWN0LT5pc0Fj
Y2Vzc2liaWxpdHlUYWJsZSgpICYmICFjb3JlT2JqZWN0LT5pc0RhdGFUYWJsZSgpKQotICAgICAg
ICBhdHRyaWJ1dGVTZXQgPSBhZGRBdHRyaWJ1dGVUb1NldChhdHRyaWJ1dGVTZXQsICJsYXlvdXQt
Z3Vlc3MiLCAidHJ1ZSIpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsKLX0KLQotc3RhdGlj
IEF0a1JvbGUgYXRrUm9sZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQotewotICAgIHN3aXRjaCAo
cm9sZSkgewotICAgIGNhc2UgVW5rbm93blJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9V
TktOT1dOOwotICAgIGNhc2UgQnV0dG9uUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BV
U0hfQlVUVE9OOwotICAgIGNhc2UgUmFkaW9CdXR0b25Sb2xlOgotICAgICAgICByZXR1cm4gQVRL
X1JPTEVfUkFESU9fQlVUVE9OOwotICAgIGNhc2UgQ2hlY2tCb3hSb2xlOgotICAgICAgICByZXR1
cm4gQVRLX1JPTEVfQ0hFQ0tfQk9YOwotICAgIGNhc2UgU2xpZGVyUm9sZToKLSAgICAgICAgcmV0
dXJuIEFUS19ST0xFX1NMSURFUjsKLSAgICBjYXNlIFRhYkdyb3VwUm9sZToKLSAgICAgICAgcmV0
dXJuIEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q7Ci0gICAgY2FzZSBUZXh0RmllbGRSb2xlOgotICAg
IGNhc2UgVGV4dEFyZWFSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfRU5UUlk7Ci0gICAg
Y2FzZSBTdGF0aWNUZXh0Um9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RFWFQ7Ci0gICAg
Y2FzZSBPdXRsaW5lUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RSRUU7Ci0gICAgY2Fz
ZSBNZW51QmFyUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX01FTlVfQkFSOwotICAgIGNh
c2UgTWVudUxpc3RQb3B1cFJvbGU6Ci0gICAgY2FzZSBNZW51Um9sZToKLSAgICAgICAgcmV0dXJu
IEFUS19ST0xFX01FTlU7Ci0gICAgY2FzZSBNZW51TGlzdE9wdGlvblJvbGU6Ci0gICAgY2FzZSBN
ZW51SXRlbVJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9NRU5VX0lURU07Ci0gICAgY2Fz
ZSBDb2x1bW5Sb2xlOgotICAgICAgICAvL3JldHVybiBBVEtfUk9MRV9UQUJMRV9DT0xVTU5fSEVB
REVSOyAvLyBJcyB0aGlzIHJpZ2h0PwotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVU5LTk9XTjsg
Ly8gTWF0Y2hlcyBNb3ppbGxhCi0gICAgY2FzZSBSb3dSb2xlOgotICAgICAgICAvL3JldHVybiBB
VEtfUk9MRV9UQUJMRV9ST1dfSEVBREVSOyAvLyBJcyB0aGlzIHJpZ2h0PwotICAgICAgICByZXR1
cm4gQVRLX1JPTEVfTElTVF9JVEVNOyAvLyBNYXRjaGVzIE1vemlsbGEKLSAgICBjYXNlIFRvb2xi
YXJSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVE9PTF9CQVI7Ci0gICAgY2FzZSBCdXN5
SW5kaWNhdG9yUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BST0dSRVNTX0JBUjsgLy8g
SXMgdGhpcyByaWdodD8KLSAgICBjYXNlIFByb2dyZXNzSW5kaWNhdG9yUm9sZToKLSAgICAgICAg
Ly9yZXR1cm4gQVRLX1JPTEVfU1BJTl9CVVRUT047IC8vIFNvbWUgY29uZnVzaW9uIGFib3V0IHRo
aXMgcm9sZSBpbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAotICAgICAgICByZXR1cm4g
QVRLX1JPTEVfUFJPR1JFU1NfQkFSOwotICAgIGNhc2UgV2luZG93Um9sZToKLSAgICAgICAgcmV0
dXJuIEFUS19ST0xFX1dJTkRPVzsKLSAgICBjYXNlIFBvcFVwQnV0dG9uUm9sZToKLSAgICBjYXNl
IENvbWJvQm94Um9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NPTUJPX0JPWDsKLSAgICBj
YXNlIFNwbGl0R3JvdXBSb2xlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfU1BMSVRfUEFORTsK
LSAgICBjYXNlIFNwbGl0dGVyUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NFUEFSQVRP
UjsKLSAgICBjYXNlIENvbG9yV2VsbFJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9DT0xP
Ul9DSE9PU0VSOwotICAgIGNhc2UgTGlzdFJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9M
SVNUOwotICAgIGNhc2UgU2Nyb2xsQmFyUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1ND
Uk9MTF9CQVI7Ci0gICAgY2FzZSBTY3JvbGxBcmVhUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19S
T0xFX1NDUk9MTF9QQU5FOwotICAgIGNhc2UgR3JpZFJvbGU6IC8vIElzIHRoaXMgcmlnaHQ/Ci0g
ICAgY2FzZSBUYWJsZVJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9UQUJMRTsKLSAgICBj
YXNlIEFwcGxpY2F0aW9uUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0FQUExJQ0FUSU9O
OwotICAgIGNhc2UgR3JvdXBSb2xlOgotICAgIGNhc2UgUmFkaW9Hcm91cFJvbGU6Ci0gICAgICAg
IHJldHVybiBBVEtfUk9MRV9QQU5FTDsKLSAgICBjYXNlIFJvd0hlYWRlclJvbGU6IC8vIFJvdyBo
ZWFkZXJzIGFyZSBjZWxscyBhZnRlciBhbGwuCi0gICAgY2FzZSBDb2x1bW5IZWFkZXJSb2xlOiAv
LyBDb2x1bW4gaGVhZGVycyBhcmUgY2VsbHMgYWZ0ZXIgYWxsLgotICAgIGNhc2UgQ2VsbFJvbGU6
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9UQUJMRV9DRUxMOwotICAgIGNhc2UgTGlua1JvbGU6
Ci0gICAgY2FzZSBXZWJDb3JlTGlua1JvbGU6Ci0gICAgY2FzZSBJbWFnZU1hcExpbmtSb2xlOgot
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfTElOSzsKLSAgICBjYXNlIEltYWdlTWFwUm9sZToKLSAg
ICBjYXNlIEltYWdlUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0lNQUdFOwotICAgIGNh
c2UgTGlzdE1hcmtlclJvbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9URVhUOwotICAgIGNh
c2UgV2ViQXJlYVJvbGU6Ci0gICAgICAgIC8vcmV0dXJuIEFUS19ST0xFX0hUTUxfQ09OVEFJTkVS
OyAvLyBJcyB0aGlzIHJpZ2h0PwotICAgICAgICByZXR1cm4gQVRLX1JPTEVfRE9DVU1FTlRfRlJB
TUU7Ci0gICAgY2FzZSBIZWFkaW5nUm9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0hFQURJ
Tkc7Ci0gICAgY2FzZSBMaXN0Qm94Um9sZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1Q7
Ci0gICAgY2FzZSBMaXN0SXRlbVJvbGU6Ci0gICAgY2FzZSBMaXN0Qm94T3B0aW9uUm9sZToKLSAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1RfSVRFTTsKLSAgICBjYXNlIFBhcmFncmFwaFJvbGU6
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9QQVJBR1JBUEg7Ci0gICAgY2FzZSBMYWJlbFJvbGU6
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9MQUJFTDsKLSAgICBjYXNlIERpdlJvbGU6Ci0gICAg
ICAgIHJldHVybiBBVEtfUk9MRV9TRUNUSU9OOwotICAgIGNhc2UgRm9ybVJvbGU6Ci0gICAgICAg
IHJldHVybiBBVEtfUk9MRV9GT1JNOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBBVEtf
Uk9MRV9VTktOT1dOOwotICAgIH0KLX0KLQotc3RhdGljIEF0a1JvbGUgd2Via2l0X2FjY2Vzc2li
bGVfZ2V0X3JvbGUoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKLQotICAgIGlmICghY29yZU9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX1VOS05PV047Ci0KLSAgICAvLyBOb3RlOiBXaHkgZG9lc24n
dCBXZWJDb3JlIGhhdmUgYSBwYXNzd29yZCBmaWVsZCBmb3IgdGhpcwotICAgIGlmIChjb3JlT2Jq
ZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBU1NXT1JE
X1RFWFQ7Ci0KLSAgICByZXR1cm4gYXRrUm9sZShjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSk7Ci19
Ci0KLXN0YXRpYyBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCi17Ci0gICAgaWYg
KCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIFdlIHdhbnQgdG8gY2hlY2sgdGhhdCBib3RoIHRoZSBzZWxlY3Rp
b24gaW50ZXJzZWN0cyB0aGUgbm9kZQotICAgIC8vIEFORCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMg
bm90IGp1c3QgInRvdWNoaW5nIiBvbmUgb2YgdGhlCi0gICAgLy8gYm91bmRhcmllcyBmb3IgdGhl
IHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUKLSAgICAvLyBub2Rl
IGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHkuCi0gICAg
Tm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKLSAgICBOb2RlKiBsYXN0RGVzY2VuZGFu
dCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgcmV0dXJuIChyYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgZWMpCi0gICAgICAgICAgICAm
JiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IG5vZGUgfHwgcmFuZ2UtPmVuZE9mZnNldCgpKQot
ICAgICAgICAgICAgJiYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IGxhc3REZXNjZW5kYW50
IHx8IHJhbmdlLT5zdGFydE9mZnNldCgpICE9IGxhc3RPZmZzZXRJbk5vZGUobGFzdERlc2NlbmRh
bnQpKSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzVGV4dFdpdGhDYXJldChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0KQotewotICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+
aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgaWYg
KCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgaWYg
KCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIENoZWNrIHRleHQgb2JqZWN0cyBhbmQgcGFyYWdyYXBo
cyBvbmx5LgotICAgIEF0a09iamVjdCogYXhPYmplY3QgPSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7
Ci0gICAgQXRrUm9sZSByb2xlID0gYXhPYmplY3QgPyBhdGtfb2JqZWN0X2dldF9yb2xlKGF4T2Jq
ZWN0KSA6IEFUS19ST0xFX0lOVkFMSUQ7Ci0gICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfVEVYVCAm
JiByb2xlICE9IEFUS19ST0xFX1BBUkFHUkFQSCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gRmluYWxseSwgY2hlY2sgd2hldGhlciB0aGUgY2FyZXQgaXMgc2V0IGluIHRoZSBjdXJy
ZW50IG9iamVjdC4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3Qt
PnNlbGVjdGlvbigpOwotICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2Jq
ZWN0LCBzZWxlY3Rpb24pOwotfQotCi1zdGF0aWMgdm9pZCBzZXRBdGtTdGF0ZVNldEZyb21Db3Jl
T2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a1N0YXRlU2V0KiBzdGF0
ZVNldCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBjb3JlT2JqZWN0LT5w
YXJlbnRPYmplY3QoKTsKLSAgICBib29sIGlzTGlzdEJveE9wdGlvbiA9IHBhcmVudCAmJiBwYXJl
bnQtPmlzTGlzdEJveCgpOwotCi0gICAgLy8gUGxlYXNlIGtlZXAgdGhlIHN0YXRlIGxpc3QgaW4g
YWxwaGFiZXRpY2FsIG9yZGVyCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzQ2hlY2tlZCgpKQotICAg
ICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0NIRUNLRUQp
OwotCi0gICAgLy8gRklYTUU6IGlzUmVhZE9ubHkgZG9lcyBub3Qgc2VlbSB0byBkbyB0aGUgcmln
aHQgdGhpbmcgZm9yCi0gICAgLy8gY29udHJvbHMsIHNvIGNoZWNrIGV4cGxpY2l0bHkgZm9yIHRo
ZW0uIEluIGFkZGl0aW9uLCBiZWNhdXNlCi0gICAgLy8gaXNSZWFkT25seSBpcyBmYWxzZSBmb3Ig
bGlzdEJveE9wdGlvbnMsIHdlIG5lZWQgdG8gYWRkIG9uZQotICAgIC8vIG1vcmUgY2hlY2sgc28g
dGhhdCB3ZSBkbyBub3QgcHJlc2VudCB0aGVtIGFzIGJlaW5nICJlZGl0YWJsZSIuCi0gICAgaWYg
KCghY29yZU9iamVjdC0+aXNSZWFkT25seSgpIHx8Ci0gICAgICAgIChjb3JlT2JqZWN0LT5pc0Nv
bnRyb2woKSAmJiBjb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKSkgJiYKLSAgICAg
ICAgIWlzTGlzdEJveE9wdGlvbikKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3Rh
dGVTZXQsIEFUS19TVEFURV9FRElUQUJMRSk7Ci0KLSAgICAvLyBGSVhNRTogUHV0IGJvdGggRU5B
QkxFRCBhbmQgU0VOU0lUSVZFIHRvZ2V0aGVyIGhlcmUgZm9yIG5vdwotICAgIGlmIChjb3JlT2Jq
ZWN0LT5pc0VuYWJsZWQoKSkgewotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0
ZVNldCwgQVRLX1NUQVRFX0VOQUJMRUQpOwotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0
ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NFTlNJVElWRSk7Ci0gICAgfQotCi0gICAgaWYgKGNvcmVP
YmplY3QtPmNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRf
YWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRVhQQU5EQUJMRSk7Ci0KLSAgICBpZiAoY29y
ZU9iamVjdC0+aXNFeHBhbmRlZCgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShz
dGF0ZVNldCwgQVRLX1NUQVRFX0VYUEFOREVEKTsKLQotICAgIGlmIChjb3JlT2JqZWN0LT5jYW5T
ZXRGb2N1c0F0dHJpYnV0ZSgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0
ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+aXNGb2N1
c2VkKCkgfHwgaXNUZXh0V2l0aENhcmV0KGNvcmVPYmplY3QpKQotICAgICAgICBhdGtfc3RhdGVf
c2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTRUQpOwotCi0gICAgLy8gVE9E
TzogQVRLX1NUQVRFX0hPUklaT05UQUwKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc0luZGV0ZXJt
aW5hdGUoKSkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19T
VEFURV9JTkRFVEVSTUlOQVRFKTsKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc011bHRpU2VsZWN0
YWJsZSgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX01VTFRJU0VMRUNUQUJMRSk7Ci0KLSAgICAvLyBUT0RPOiBBVEtfU1RBVEVfT1BBUVVFCi0K
LSAgICBpZiAoY29yZU9iamVjdC0+aXNQcmVzc2VkKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRf
YWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfUFJFU1NFRCk7Ci0KLSAgICAvLyBUT0RPOiBB
VEtfU1RBVEVfU0VMRUNUQUJMRV9URVhUCi0KLSAgICBpZiAoY29yZU9iamVjdC0+Y2FuU2V0U2Vs
ZWN0ZWRBdHRyaWJ1dGUoKSkgewotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0
ZVNldCwgQVRLX1NUQVRFX1NFTEVDVEFCTEUpOwotICAgICAgICAvLyBJdGVtcyBpbiBmb2N1c2Fi
bGUgbGlzdHMgaW4gR3RrIGhhdmUgYm90aCBTVEFURV9TRUxFQ1R7QUJMRSxFRH0KLSAgICAgICAg
Ly8gYW5kIFNUQVRFX0ZPQ1VTe0FCTEUsRUR9LiBXZSdsbCBmYWtlIHRoZSBsYXR0ZXIgYmFzZWQg
b24gdGhlCi0gICAgICAgIC8vIGZvcm1lci4KLSAgICAgICAgaWYgKGlzTGlzdEJveE9wdGlvbikK
LSAgICAgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
Rk9DVVNBQkxFKTsKLSAgICB9Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+aXNTZWxlY3RlZCgpKSB7
Ci0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0VM
RUNURUQpOwotICAgICAgICAvLyBJdGVtcyBpbiBmb2N1c2FibGUgbGlzdHMgaW4gR3RrIGhhdmUg
Ym90aCBTVEFURV9TRUxFQ1R7QUJMRSxFRH0KLSAgICAgICAgLy8gYW5kIFNUQVRFX0ZPQ1VTe0FC
TEUsRUR9LiBXZSdsbCBmYWtlIHRoZSBsYXR0ZXIgYmFzZWQgb24gdGhlCi0gICAgICAgIC8vIGZv
cm1lci4KLSAgICAgICAgaWYgKGlzTGlzdEJveE9wdGlvbikKLSAgICAgICAgICAgIGF0a19zdGF0
ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRk9DVVNFRCk7Ci0gICAgfQotCi0g
ICAgLy8gRklYTUU6IEdyb3VwIGJvdGggU0hPV0lORyBhbmQgVklTSUJMRSBoZXJlIGZvciBub3cK
LSAgICAvLyBOb3Qgc3VyZSBob3cgdG8gaGFuZGxlIHRoaXMgaW4gV2ViS2l0LCBzZWUgYnVnCi0g
ICAgLy8gaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA5NjUwIGZv
ciBvdGhlcgotICAgIC8vIGlzc3VlcyB3aXRoIFNIT1dJTkcgdnMgVklTSUJMRSB3aXRoaW4gR1RL
KwotICAgIGlmICghY29yZU9iamVjdC0+aXNPZmZTY3JlZW4oKSkgewotICAgICAgICBhdGtfc3Rh
dGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NIT1dJTkcpOwotICAgICAgICBh
dGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1ZJU0lCTEUpOwotICAg
IH0KLQotICAgIC8vIE11dHVhbGx5IGV4Y2x1c2l2ZSwgc28gd2UgZ3JvdXAgdGhlc2UgdHdvCi0g
ICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IFRleHRGaWVsZFJvbGUpCi0gICAgICAg
IGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfU0lOR0xFX0xJTkUp
OwotICAgIGVsc2UgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IFRleHRBcmVhUm9sZSkK
LSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9NVUxU
SV9MSU5FKTsKLQotICAgIC8vIFRPRE86IEFUS19TVEFURV9TRU5TSVRJVkUKLQotICAgIC8vIFRP
RE86IEFUS19TVEFURV9WRVJUSUNBTAotCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzVmlzaXRlZCgp
KQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1ZJ
U0lURUQpOwotfQotCi1zdGF0aWMgQXRrU3RhdGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9z
dGF0ZV9zZXQoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQXRrU3RhdGVTZXQqIHN0YXRlU2V0
ID0gQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5yZWZf
c3RhdGVfc2V0KG9iamVjdCk7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9
IGNvcmUob2JqZWN0KTsKLQotICAgIGlmIChjb3JlT2JqZWN0ID09IGZhbGxiYWNrT2JqZWN0KCkp
IHsKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9E
RUZVTkNUKTsKLSAgICAgICAgcmV0dXJuIHN0YXRlU2V0OwotICAgIH0KLQotICAgIC8vIFRleHQg
b2JqZWN0cyBtdXN0IGJlIGZvY3VzYWJsZS4KLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0
X2dldF9yb2xlKG9iamVjdCk7Ci0gICAgaWYgKHJvbGUgPT0gQVRLX1JPTEVfVEVYVCB8fCByb2xl
ID09IEFUS19ST0xFX1BBUkFHUkFQSCkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUo
c3RhdGVTZXQsIEFUS19TVEFURV9GT0NVU0FCTEUpOwotCi0gICAgc2V0QXRrU3RhdGVTZXRGcm9t
Q29yZU9iamVjdChjb3JlT2JqZWN0LCBzdGF0ZVNldCk7Ci0gICAgcmV0dXJuIHN0YXRlU2V0Owot
fQotCi1zdGF0aWMgQXRrUmVsYXRpb25TZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9yZWxhdGlv
bl9zZXQoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQXRrUmVsYXRpb25TZXQqIHJlbGF0aW9u
U2V0ID0gQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5y
ZWZfcmVsYXRpb25fc2V0KG9iamVjdCk7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCA9IGNvcmUob2JqZWN0KTsKLQotICAgIHNldEF0a1JlbGF0aW9uU2V0RnJvbUNvcmVPYmpl
Y3QoY29yZU9iamVjdCwgcmVsYXRpb25TZXQpOwotCi0gICAgcmV0dXJuIHJlbGF0aW9uU2V0Owot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbml0KEF0a09iamVjdCogb2JqZWN0
LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmIChBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nl
c3NpYmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUpCi0gICAgICAgIEFUS19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+aW5pdGlhbGl6ZShvYmplY3QsIGRh
dGEpOwotCi0gICAgV0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KS0+bV9vYmplY3QgPSByZWludGVy
cHJldF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPihkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2FjY2Vzc2libGVfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIC8vIFRo
aXMgaXMgYSBnb29kIHRpbWUgdG8gY2xlYXIgdGhlIHJldHVybiBidWZmZXIuCi0gICAgcmV0dXJu
U3RyaW5nKFN0cmluZygpKTsKLQotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxl
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtp
dF9hY2Nlc3NpYmxlX2NsYXNzX2luaXQoQXRrT2JqZWN0Q2xhc3MqIGtsYXNzKQotewotICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwotCi0gICAg
d2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50
KGtsYXNzKTsKLQotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfYWNjZXNzaWJs
ZV9maW5hbGl6ZTsKLQotICAgIGtsYXNzLT5pbml0aWFsaXplID0gd2Via2l0X2FjY2Vzc2libGVf
aW5pdDsKLSAgICBrbGFzcy0+Z2V0X25hbWUgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZTsK
LSAgICBrbGFzcy0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2Rlc2Ny
aXB0aW9uOwotICAgIGtsYXNzLT5nZXRfcGFyZW50ID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X3Bh
cmVudDsKLSAgICBrbGFzcy0+Z2V0X25fY2hpbGRyZW4gPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRf
bl9jaGlsZHJlbjsKLSAgICBrbGFzcy0+cmVmX2NoaWxkID0gd2Via2l0X2FjY2Vzc2libGVfcmVm
X2NoaWxkOwotICAgIGtsYXNzLT5nZXRfcm9sZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9yb2xl
OwotICAgIGtsYXNzLT5yZWZfc3RhdGVfc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfcmVmX3N0YXRl
X3NldDsKLSAgICBrbGFzcy0+Z2V0X2luZGV4X2luX3BhcmVudCA9IHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9pbmRleF9pbl9wYXJlbnQ7Ci0gICAga2xhc3MtPmdldF9hdHRyaWJ1dGVzID0gd2Via2l0
X2FjY2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXM7Ci0gICAga2xhc3MtPnJlZl9yZWxhdGlvbl9zZXQg
PSB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfcmVsYXRpb25fc2V0OwotCi0gICAgaHlwZXJsaW5rT2Jq
ZWN0UXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygid2Via2l0LWFjY2Vzc2libGUt
aHlwZXJsaW5rLW9iamVjdCIpOwotfQotCi1HVHlwZQotd2Via2l0X2FjY2Vzc2libGVfZ2V0X3R5
cGUodm9pZCkKLXsKLSAgICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgdHlwZV92b2xhdGlsZSA9IDA7
Ci0KLSAgICBpZiAoZ19vbmNlX2luaXRfZW50ZXIoJnR5cGVfdm9sYXRpbGUpKSB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBHVHlwZUluZm8gdGluZm8gPSB7Ci0gICAgICAgICAgICBzaXplb2YoV2Vi
S2l0QWNjZXNzaWJsZUNsYXNzKSwKLSAgICAgICAgICAgIChHQmFzZUluaXRGdW5jKSAwLAotICAg
ICAgICAgICAgKEdCYXNlRmluYWxpemVGdW5jKSAwLAotICAgICAgICAgICAgKEdDbGFzc0luaXRG
dW5jKSB3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0LAotICAgICAgICAgICAgKEdDbGFzc0Zp
bmFsaXplRnVuYykgMCwKLSAgICAgICAgICAgIDAsIC8qIGNsYXNzIGRhdGEgKi8KLSAgICAgICAg
ICAgIHNpemVvZihXZWJLaXRBY2Nlc3NpYmxlKSwgLyogaW5zdGFuY2Ugc2l6ZSAqLwotICAgICAg
ICAgICAgMCwgLyogbmIgcHJlYWxsb2NzICovCi0gICAgICAgICAgICAoR0luc3RhbmNlSW5pdEZ1
bmMpIDAsCi0gICAgICAgICAgICAwIC8qIHZhbHVlIHRhYmxlICovCi0gICAgICAgIH07Ci0KLSAg
ICAgICAgR1R5cGUgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoQVRLX1RZUEVfT0JKRUNU
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2ViS2l0QWNj
ZXNzaWJsZSIsICZ0aW5mbywgR1R5cGVGbGFncygwKSk7Ci0gICAgICAgIGdfb25jZV9pbml0X2xl
YXZlKCZ0eXBlX3ZvbGF0aWxlLCB0eXBlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZV92b2xh
dGlsZTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9kb19h
Y3Rpb24oQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQgaSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChpID09IDAsIEZBTFNFKTsKLSAgICByZXR1cm4gY29yZShhY3Rpb24pLT5wZXJmb3JtRGVm
YXVsdEFjdGlvbigpOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25f
Z2V0X25fYWN0aW9ucyhBdGtBY3Rpb24qIGFjdGlvbikKLXsKLSAgICByZXR1cm4gMTsKLX0KLQot
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X2Rlc2NyaXB0
aW9uKEF0a0FjdGlvbiogYWN0aW9uLCBnaW50IGkpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoaSA9PSAwLCAwKTsKLSAgICAvLyBUT0RPOiBOZWVkIGEgd2F5IHRvIHByb3ZpZGUvbG9jYWxp
emUgYWN0aW9uIGRlc2NyaXB0aW9ucy4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAiIjsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25f
Z2V0X2tleWJpbmRpbmcoQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQgaSkKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChpID09IDAsIDApOwotICAgIC8vIEZJWE1FOiBDb25zdHJ1Y3QgYSBwcm9w
ZXIga2V5YmluZGluZyBzdHJpbmcuCi0gICAgcmV0dXJuIHJldHVyblN0cmluZyhjb3JlKGFjdGlv
biktPmFjY2Vzc0tleSgpLnN0cmluZygpKTsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJr
aXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X25hbWUoQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQgaSkK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChpID09IDAsIDApOwotICAgIHJldHVybiByZXR1
cm5TdHJpbmcoY29yZShhY3Rpb24pLT5hY3Rpb25WZXJiKCkpOwotfQotCi1zdGF0aWMgdm9pZCBh
dGtfYWN0aW9uX2ludGVyZmFjZV9pbml0KEF0a0FjdGlvbklmYWNlKiBpZmFjZSkKLXsKLSAgICBp
ZmFjZS0+ZG9fYWN0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2RvX2FjdGlvbjsKLSAg
ICBpZmFjZS0+Z2V0X25fYWN0aW9ucyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfbl9h
Y3Rpb25zOwotICAgIGlmYWNlLT5nZXRfZGVzY3JpcHRpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV9h
Y3Rpb25fZ2V0X2Rlc2NyaXB0aW9uOwotICAgIGlmYWNlLT5nZXRfa2V5YmluZGluZyA9IHdlYmtp
dF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfa2V5YmluZGluZzsKLSAgICBpZmFjZS0+Z2V0X25hbWUg
PSB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X25hbWU7Ci19Ci0KLS8vIFNlbGVjdGlvbiAo
Zm9yIGNvbnRyb2xzKQotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9iamVjdEZv
clNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKLXsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotCi0gICAgLy8gT25seSBs
aXN0IGJveGVzIGFuZCBtZW51IGxpc3RzIHN1cHBvcnRlZCBzbyBmYXIuCi0gICAgaWYgKCFjb3Jl
U2VsZWN0aW9uLT5pc0xpc3RCb3goKSAmJiAhY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZvciBsaXN0IGJveGVzIHRoZSBsaXN0IG9iamVj
dCBpcyBqdXN0IGl0c2VsZi4KLSAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpCi0g
ICAgICAgIHJldHVybiBjb3JlU2VsZWN0aW9uOwotCi0gICAgLy8gRm9yIG1lbnUgbGlzdHMgd2Ug
bmVlZCB0byByZXR1cm4gdGhlIGZpcnN0IGFjY2Vzc2libGUgY2hpbGQsCi0gICAgLy8gd2l0aCBy
b2xlIE1lbnVMaXN0UG9wdXBSb2xlLCBzaW5jZSB0aGF0J3MgdGhlIG9uZSBob2xkaW5nIHRoZSBs
aXN0Ci0gICAgLy8gb2YgaXRlbXMgd2l0aCByb2xlIE1lbnVMaXN0T3B0aW9uUm9sZS4KLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4g
PSBjb3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOwotICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPYmplY3Qg
PSBjaGlsZHJlbi5hdCgwKS5nZXQoKTsKLSAgICBpZiAoIWxpc3RPYmplY3QtPmlzTWVudUxpc3RQ
b3B1cCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBsaXN0T2JqZWN0OwotfQot
Ci1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbUxpc3QoQXRrU2VsZWN0aW9u
KiBzZWxlY3Rpb24sIGdpbnQgaSkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2Vs
ZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmICghY29yZVNlbGVjdGlvbiB8fCBpIDwg
MCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBOZWVkIHRvIHNlbGVjdCB0aGUgcHJvcGVy
IGxpc3Qgb2JqZWN0IGRlcGVuZGluZyBvbiB0aGUgdHlwZS4KLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBsaXN0T2JqZWN0ID0gbGlzdE9iamVjdEZvclNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAg
IGlmICghbGlzdE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igb3B0aW9ucyA9IGxpc3RPYmplY3Qt
PmNoaWxkcmVuKCk7Ci0gICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihvcHRpb25zLnNpemUo
KSkpCi0gICAgICAgIHJldHVybiBvcHRpb25zLmF0KGkpLmdldCgpOwotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb25Gcm9tU2VsZWN0aW9uKEF0
a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50IGkpCi17Ci0gICAgLy8gaSBpcyB0aGUgaXRoIHNl
bGVjdGlvbiBhcyBvcHBvc2VkIHRvIHRoZSBpdGggY2hpbGQuCi0KLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmICghY29yZVNl
bGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkg
fHwgaSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgaWYgKGNvcmVT
ZWxlY3Rpb24tPmlzTGlzdEJveCgpKQotICAgICAgICBjb3JlU2VsZWN0aW9uLT5zZWxlY3RlZENo
aWxkcmVuKHNlbGVjdGVkSXRlbXMpOwotICAgIGVsc2UgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTWVu
dUxpc3QoKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZVNlbGVjdGlv
bi0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVy
biAwOwotCi0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3ROb2RlID0gdG9IVE1MU2Vs
ZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKLSAgICAgICAgaW50IHNlbGVjdGVkSW5kZXgg
PSBzZWxlY3ROb2RlLT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+IGxpc3RJdGVtcyA9IHNlbGVjdE5vZGUtPmxpc3RJdGVtcygpOwotCi0gICAgICAg
IGlmIChzZWxlY3RlZEluZGV4IDwgMCB8fCBzZWxlY3RlZEluZGV4ID49IHN0YXRpY19jYXN0PGlu
dD4obGlzdEl0ZW1zLnNpemUoKSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBy
ZXR1cm4gb3B0aW9uRnJvbUxpc3Qoc2VsZWN0aW9uLCBzZWxlY3RlZEluZGV4KTsKLSAgICB9Ci0K
LSAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KHNlbGVjdGVkSXRlbXMuc2l6ZSgpKSkKLSAg
ICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuYXQoaSkuZ2V0KCk7Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9hZGRfc2Vs
ZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50IGkpCi17Ci0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNv
cmVTZWxlY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9wdGlvbiA9IG9wdGlvbkZyb21MaXN0KHNlbGVjdGlvbiwgaSk7Ci0gICAgaWYgKG9w
dGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNN
ZW51TGlzdCgpKSkgewotICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKHRydWUpOwotICAgICAg
ICByZXR1cm4gb3B0aW9uLT5pc1NlbGVjdGVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2NsZWFy
X3NlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKLXsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmICghY29yZVNl
bGVjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgaWYgKGNv
cmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkg
ewotICAgICAgICAvLyBTZXQgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgaXRlbXMgdG8gYW4gZW1wdHkg
bGlzdDsgdGhlbiB2ZXJpZnkgdGhhdCBpdCB3b3JrZWQuCi0gICAgICAgIEFjY2Vzc2liaWxpdHlM
aXN0Qm94KiBsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3gqPihjb3Jl
U2VsZWN0aW9uKTsKLSAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGlsZHJlbihzZWxlY3Rl
ZEl0ZW1zKTsKLSAgICAgICAgbGlzdEJveC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1z
KTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IDA7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVf
c2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkK
LXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb24gPSBvcHRpb25Gcm9tU2VsZWN0aW9u
KHNlbGVjdGlvbiwgaSk7Ci0gICAgaWYgKG9wdGlvbikgewotICAgICAgICBBdGtPYmplY3QqIGNo
aWxkID0gb3B0aW9uLT53cmFwcGVyKCk7Ci0gICAgICAgIGdfb2JqZWN0X3JlZihjaGlsZCk7Ci0g
ICAgICAgIHJldHVybiBjaGlsZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj
IGdpbnQgd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQoQXRr
U2VsZWN0aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNl
bGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwgIWNv
cmVTZWxlY3Rpb24tPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSkgewotICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJ
dGVtczsKLSAgICAgICAgY29yZVNlbGVjdGlvbi0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0
ZW1zKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdpbnQ+KHNlbGVjdGVkSXRlbXMuc2l6
ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlU2VsZWN0aW9uLT5yZW5kZXJlcigp
OwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgaW50IHNlbGVjdGVkSW5kZXggPSB0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2Rl
KCkpLT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4ID49IDAg
JiYgc2VsZWN0ZWRJbmRleCA8IHN0YXRpY19jYXN0PGludD4odG9IVE1MU2VsZWN0RWxlbWVudChy
ZW5kZXJlci0+bm9kZSgpKS0+bGlzdEl0ZW1zKCkuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9p
c19jaGlsZF9zZWxlY3RlZChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpKQotewotICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0g
ICAgaWYgKCFjb3JlU2VsZWN0aW9uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZyb21MaXN0KHNlbGVjdGlvbiwgaSk7Ci0gICAg
aWYgKG9wdGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlv
bi0+aXNNZW51TGlzdCgpKSkKLSAgICAgICAgcmV0dXJuIG9wdGlvbi0+aXNTZWxlY3RlZCgpOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2li
bGVfc2VsZWN0aW9uX3JlbW92ZV9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdp
bnQgaSkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShz
ZWxlY3Rpb24pOwotICAgIGlmICghY29yZVNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgZ2V0dGluZyBjYWxsZWQgaWYgaSA9PSAwLiBXaGF0
IGlzIHByZXZlbnRpbmcgdGhlIHJlc3Q/Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9u
ID0gb3B0aW9uRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24sIGkpOwotICAgIGlmIChvcHRpb24gJiYg
KGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3Qo
KSkpIHsKLSAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3RlZChmYWxzZSk7Ci0gICAgICAgIHJldHVy
biAhb3B0aW9uLT5pc1NlbGVjdGVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX3NlbGVjdF9hbGxf
c2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2Vs
ZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc011bHRpU2VsZWN0YWJsZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjb3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOwotICAgIGlm
IChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlz
dEJveCogbGlzdEJveCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4oY29yZVNl
bGVjdGlvbik7Ci0gICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkQ2hpbGRyZW4oY2hpbGRyZW4p
OwotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3Igc2VsZWN0ZWRJdGVtczsKLSAgICAgICAgbGlzdEJveC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxl
Y3RlZEl0ZW1zKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IGNoaWxk
cmVuLnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lk
IGF0a19zZWxlY3Rpb25faW50ZXJmYWNlX2luaXQoQXRrU2VsZWN0aW9uSWZhY2UqIGlmYWNlKQot
ewotICAgIGlmYWNlLT5hZGRfc2VsZWN0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9u
X2FkZF9zZWxlY3Rpb247Ci0gICAgaWZhY2UtPmNsZWFyX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nl
c3NpYmxlX3NlbGVjdGlvbl9jbGVhcl9zZWxlY3Rpb247Ci0gICAgaWZhY2UtPnJlZl9zZWxlY3Rp
b24gPSB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbjsKLSAgICBpZmFj
ZS0+Z2V0X3NlbGVjdGlvbl9jb3VudCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9nZXRf
c2VsZWN0aW9uX2NvdW50OwotICAgIGlmYWNlLT5pc19jaGlsZF9zZWxlY3RlZCA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZDsKLSAgICBpZmFjZS0+cmVtb3Zl
X3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZW1vdmVfc2VsZWN0aW9u
OwotICAgIGlmYWNlLT5zZWxlY3RfYWxsX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3Nl
bGVjdGlvbl9zZWxlY3RfYWxsX3NlbGVjdGlvbjsKLX0KLQotLy8gVGV4dAotCi1zdGF0aWMgZ2No
YXIqIHV0ZjhTdWJzdHIoY29uc3QgZ2NoYXIqIHN0cmluZywgZ2ludCBzdGFydCwgZ2ludCBlbmQp
Ci17Ci0gICAgQVNTRVJUKHN0cmluZyk7Ci0gICAgZ2xvbmcgc3RyTGVuID0gZ191dGY4X3N0cmxl
bihzdHJpbmcsIC0xKTsKLSAgICBpZiAoc3RhcnQgPiBzdHJMZW4gfHwgZW5kID4gc3RyTGVuKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBnY2hhciogc3RhcnRQdHIgPSBnX3V0Zjhfb2Zmc2V0X3Rv
X3BvaW50ZXIoc3RyaW5nLCBzdGFydCk7Ci0gICAgZ3NpemUgbGVuSW5CeXRlcyA9IGdfdXRmOF9v
ZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIGVuZCArIDEpIC0gIHN0YXJ0UHRyOwotICAgIGdjaGFy
KiBvdXRwdXQgPSBzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFsbG9jMChsZW5JbkJ5dGVzICsgMSkp
OwotICAgIHJldHVybiBnX3V0Zjhfc3RybmNweShvdXRwdXQsIHN0YXJ0UHRyLCBlbmQgLSBzdGFy
dCArIDEpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb21wbGV0ZWx5IGdlbmVyYWws
IGlzIGl0J3MgdGllZCB0byB0aGUKLS8vIGludGVybmFscyBvZiBXZWJDb3JlJ3MgdGV4dCBwcmVz
ZW50YXRpb24uCi1zdGF0aWMgZ2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwgaW50IGZyb20sIGludCB0bykKLXsKLSAgICBDU3Ry
aW5nIHN0cmluZ1VURjggPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUoY2hhcmFjdGVycywgbGVuZ3Ro
LCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBnY2hhciogdXRmOFN0cmluZyA9
IHV0ZjhTdWJzdHIoc3RyaW5nVVRGOC5kYXRhKCksIGZyb20sIHRvKTsKLSAgICBpZiAoIWdfdXRm
OF92YWxpZGF0ZSh1dGY4U3RyaW5nLCAtMSwgMCkpIHsKLSAgICAgICAgZ19mcmVlKHV0ZjhTdHJp
bmcpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZ3NpemUgbGVuID0gc3RybGVuKHV0
ZjhTdHJpbmcpOwotICAgIEdTdHJpbmcqIHJldCA9IGdfc3RyaW5nX25ld19sZW4oMCwgbGVuKTsK
LSAgICBnY2hhciogcHRyID0gdXRmOFN0cmluZzsKLQotICAgIC8vIFdlYkNvcmUgaW50cm9kdWNl
cyBsaW5lIGJyZWFrcyBpbiB0aGUgdGV4dCB0aGF0IGRvIG5vdCByZWZsZWN0Ci0gICAgLy8gdGhl
IGxheW91dCB5b3Ugc2VlIG9uIHRoZSBzY3JlZW4sIHJlcGxhY2UgdGhlbSB3aXRoIHNwYWNlcwot
ICAgIHdoaWxlIChsZW4gPiAwKSB7Ci0gICAgICAgIGdpbnQgaW5kZXgsIHN0YXJ0OwotICAgICAg
ICBwYW5nb19maW5kX3BhcmFncmFwaF9ib3VuZGFyeShwdHIsIGxlbiwgJmluZGV4LCAmc3RhcnQp
OwotICAgICAgICBnX3N0cmluZ19hcHBlbmRfbGVuKHJldCwgcHRyLCBpbmRleCk7Ci0gICAgICAg
IGlmIChpbmRleCA9PSBzdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBnX3N0cmlu
Z19hcHBlbmRfYyhyZXQsICcgJyk7Ci0gICAgICAgIHB0ciArPSBzdGFydDsKLSAgICAgICAgbGVu
IC09IHN0YXJ0OwotICAgIH0KLQotICAgIGdfZnJlZSh1dGY4U3RyaW5nKTsKLSAgICByZXR1cm4g
Z19zdHJpbmdfZnJlZShyZXQsIEZBTFNFKTsKLX0KLQotZ2NoYXIqIHRleHRGb3JSZW5kZXJlcihS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIEdTdHJpbmcqIHJlc3VsdFRleHQgPSBnX3N0
cmluZ19uZXcoMCk7Ci0KLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gZ19zdHJp
bmdfZnJlZShyZXN1bHRUZXh0LCBGQUxTRSk7Ci0KLSAgICAvLyBGb3IgUmVuZGVyQmxvY2tzLCBw
aWVjZSB0b2dldGhlciB0aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0IG9iamVjdHMgdGhleSBj
b250YWluLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlci0+Zmlyc3RD
aGlsZCgpOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpZiAob2JqZWN0LT5pc0JSKCkpIHsKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1
bHRUZXh0LCAiXG4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dDsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNUZXh0KCkp
Ci0gICAgICAgICAgICByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG9iamVjdCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgaWYgKG9iamVjdC0+aXNSZXBsYWNlZCgpKQotICAgICAgICAg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZF91bmljaGFyKHJlc3VsdFRleHQsIG9iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVyKTsKLQotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBjaGlsZHJl
biwgaWYgYW55LCB0byBjb25zaWRlciB3aGVuCi0gICAgICAgICAgICAvLyBjdXJyZW50IG9iamVj
dCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQgc29tZSBvZiBpdHMKLSAgICAgICAgICAgIC8vIGNo
aWxkcmVuIGFyZSwgaW4gb3JkZXIgbm90IHRvIG1pc3MgdGhvc2UgcG9ydGlvbnMgb2YKLSAgICAg
ICAgICAgIC8vIHRleHQgYnkgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRob3NlIHNpdHVhdGlvbnMK
LSAgICAgICAgICAgIGlmIChvYmplY3QtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgICAgICBn
X3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgdGV4dEZvclJlbmRlcmVyKG9iamVjdCkpOwotCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIElubGluZVRleHRCb3gq
IGJveCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKSA6IDA7Ci0gICAg
ICAgIHdoaWxlIChib3gpIHsKLSAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0gY29udmVydFVuaUNo
YXJUb1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50ZXh0TGVuZ3Ro
KCksIGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19hcHBl
bmQocmVzdWx0VGV4dCwgdGV4dCk7Ci0gICAgICAgICAgICAvLyBOZXdsaW5lIGNoYXJzIGluIHRo
ZSBzb3VyY2UgcmVzdWx0IGluIHNlcGFyYXRlIHRleHQgYm94ZXMsIHNvIGNoZWNrCi0gICAgICAg
ICAgICAvLyBiZWZvcmUgYWRkaW5nIGEgbmV3bGluZSBpbiB0aGUgbGF5b3V0LiBTZWUgYnVnIDI1
NDE1IGNvbW1lbnQgIzc4LgotICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc2libGluZyBpcyBh
IEJSLCB3ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3ZSBleGFtaW5lIHRoYXQgY2hpbGQuCi0g
ICAgICAgICAgICBpZiAoIWJveC0+bmV4dE9uTGluZUV4aXN0cygpICYmICghb2JqZWN0LT5uZXh0
U2libGluZygpIHx8ICFvYmplY3QtPm5leHRTaWJsaW5nKCktPmlzQlIoKSkpCi0gICAgICAgICAg
ICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsICJcbiIpOwotICAgICAgICAgICAgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSW5zZXJ0
IHRoZSB0ZXh0IG9mIHRoZSBtYXJrZXIgZm9yIGxpc3QgaXRlbSBpbiB0aGUgcmlnaHQgcGxhY2Us
IGlmIHByZXNlbnQKLSAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICBT
dHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0
V2l0aFN1ZmZpeCgpOwotICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUikKLSAgICAgICAgICAgIGdfc3RyaW5nX3ByZXBlbmQocmVzdWx0VGV4dCwgbWFya2Vy
VGV4dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19zdHJpbmdf
YXBwZW5kKHJlc3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0UpOwotfQotCi1nY2hhciog
dGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQotewotICAgIEdT
dHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKLQotICAgIC8vIEZvciB0ZXh0IGNvbnRyb2xz
LCB3ZSBjYW4gZ2V0IHRoZSB0ZXh0IGxpbmUgYnkgbGluZS4KLSAgICBpZiAoY29yZU9iamVjdC0+
aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBjb3JlT2Jq
ZWN0LT50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICAgICAg
UGxhaW5UZXh0UmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKGxpbmVO
dW1iZXIpOwotICAgICAgICB3aGlsZSAocmFuZ2UubGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBX
aGVuIGEgbGluZSBvZiB0ZXh0IHdyYXBzIGluIGEgdGV4dCBhcmVhLCB0aGUgZmluYWwgc3BhY2Ug
aXMgcmVtb3ZlZC4KLSAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCA8
IHRleHRMZW5ndGgpCi0gICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoIC09IDE7Ci0gICAgICAg
ICAgICBTdHJpbmcgbGluZVRleHQgPSBjb3JlT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocmFu
Z2UpOwotICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgbGluZVRleHQudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAgICAg
ICAgIHJhbmdlID0gY29yZU9iamVjdC0+ZG9BWFJhbmdlRm9yTGluZSgrK2xpbmVOdW1iZXIpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QoKSkgewotICAgICAgICBHT3duUHRyPGdjaGFyPiByZW5kZXJlclRleHQodGV4dEZv
clJlbmRlcmVyKGNvcmVPYmplY3QtPnJlbmRlcmVyKCkpKTsKLSAgICAgICAgZ19zdHJpbmdfYXBw
ZW5kKHN0ciwgcmVuZGVyZXJUZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ19zdHJp
bmdfZnJlZShzdHIsIEZBTFNFKTsKLX0KLQotc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF90ZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5k
T2Zmc2V0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRl
eHQpOwotCi0gICAgaW50IGVuZCA9IGVuZE9mZnNldDsKLSAgICBpZiAoZW5kT2Zmc2V0ID09IC0x
KSB7Ci0gICAgICAgIGVuZCA9IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCkubGVuZ3RoKCk7Ci0g
ICAgICAgIGlmICghZW5kKQotICAgICAgICAgICAgZW5kID0gY29yZU9iamVjdC0+dGV4dFVuZGVy
RWxlbWVudCgpLmxlbmd0aCgpOwotICAgIH0KLQotICAgIFN0cmluZyByZXQ7Ci0gICAgaWYgKGNv
cmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+ZG9B
WFN0cmluZ0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKDAsIGVuZE9mZnNldCkpOwotICAgIGVsc2Ug
ewotICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT5zdHJpbmdWYWx1ZSgpOwotICAgICAgICBpZiAo
IXJldCkKLSAgICAgICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKTsK
LSAgICB9Ci0KLSAgICBpZiAoIXJldC5sZW5ndGgoKSkgewotICAgICAgICAvLyBUaGlzIGNhbiBo
YXBwZW4gYXQgbGVhc3Qgd2l0aCBhbm9ueW1vdXMgUmVuZGVyQmxvY2tzIChlLmcuIGJvZHkgdGV4
dCBhbW9uZ3N0IHBhcmFncmFwaHMpCi0gICAgICAgIHJldCA9IFN0cmluZyh0ZXh0Rm9yT2JqZWN0
KGNvcmVPYmplY3QpKTsKLSAgICAgICAgaWYgKCFlbmQpCi0gICAgICAgICAgICBlbmQgPSByZXQu
bGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgLy8gUHJlZml4IGEgaXRlbSBudW1iZXIvYnVsbGV0IGlm
IG5lZWRlZAotICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBMaXN0SXRlbVJvbGUp
IHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmpSZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRl
cmVyKCk7Ci0gICAgICAgIGlmIChvYmpSZW5kZXJlciAmJiBvYmpSZW5kZXJlci0+aXNMaXN0SXRl
bSgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0o
b2JqUmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICAgICAgcmV0ID0g
b2JqUmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IG1hcmtlclRleHQgKyBy
ZXQgOiByZXQgKyBtYXJrZXJUZXh0OwotICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA9PSAtMSkK
LSAgICAgICAgICAgICAgICBlbmQgKz0gbWFya2VyVGV4dC5sZW5ndGgoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldCA9IHJldC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZCAtIHN0YXJ0
T2Zmc2V0KTsKLSAgICByZXR1cm4gZ19zdHJkdXAocmV0LnV0ZjgoKS5kYXRhKCkpOwotfQotCi1z
dGF0aWMgR2FpbFRleHRVdGlsKiBnZXRHYWlsVGV4dFV0aWxGb3JBdGsoQXRrVGV4dCogdGV4dE9i
amVjdCkKLXsKLSAgICBHYWlsVGV4dFV0aWwqIGdhaWxUZXh0VXRpbCA9IGdhaWxfdGV4dF91dGls
X25ldygpOwotICAgIGdhaWxfdGV4dF91dGlsX3RleHRfc2V0dXAoZ2FpbFRleHRVdGlsLCB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KHRleHRPYmplY3QsIDAsIC0xKSk7Ci0gICAgcmV0
dXJuIGdhaWxUZXh0VXRpbDsKLX0KLQotc3RhdGljIFBhbmdvTGF5b3V0KiBnZXRQYW5nb0xheW91
dEZvckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QgPSBjb3JlKHRleHRPYmplY3QpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC0+dmlldygp
LT5ob3N0V2luZG93KCk7Ci0gICAgaWYgKCFob3N0V2luZG93KQotICAgICAgICByZXR1cm4gMDsK
LSAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgd2ViVmlldyA9IGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFn
ZUNsaWVudCgpOwotICAgIGlmICghd2ViVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv
LyBDcmVhdGUgYSBzdHJpbmcgd2l0aCB0aGUgbGF5b3V0IGFzIGl0IGFwcGVhcnMgb24gdGhlIHNj
cmVlbgotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBndGtfd2lkZ2V0X2NyZWF0ZV9wYW5nb19s
YXlvdXQoc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4od2ViVmlldyksIHRleHRGb3JPYmplY3QoY29y
ZU9iamVjdCkpOwotICAgIHJldHVybiBsYXlvdXQ7Ci19Ci0KLXN0YXRpYyBnY2hhciogd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2lu
dCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIGdpbnQqIHN0YXJ0T2Zmc2V0
LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgcmV0dXJuIGdhaWxfdGV4dF91dGlsX2dldF90ZXh0
KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0ZXh0KSwgZ2V0UGFuZ29MYXlvdXRGb3JBdGsodGV4dCks
IEdBSUxfQUZURVJfT0ZGU0VULCBib3VuZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
dGV4dF9hdF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFy
eSBib3VuZGFyeVR5cGUsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0g
ICAgcmV0dXJuIGdhaWxfdGV4dF91dGlsX2dldF90ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0
ZXh0KSwgZ2V0UGFuZ29MYXlvdXRGb3JBdGsodGV4dCksIEdBSUxfQVRfT0ZGU0VULCBib3VuZGFy
eVR5cGUsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnY2hh
ciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0KEF0a1RleHQq
IHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBz
dGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIHJldHVybiBnYWlsX3RleHRfdXRp
bF9nZXRfdGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0Rm9y
QXRrKHRleHQpLCBHQUlMX0JFRk9SRV9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQotc3RhdGljIGd1bmljaGFyIHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9hdF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZz
ZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj
IGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQqIHRl
eHQpCi17Ci0gICAgLy8gY29yZU9iamVjdCBpcyB0aGUgdW5pZ25vcmVkIG9iamVjdCB3aG9zZSBv
ZmZzZXQgdGhlIGNhbGxlciBpcyByZXF1ZXN0aW5nLgotICAgIC8vIGZvY3VzZWRPYmplY3QgaXMg
dGhlIG9iamVjdCB3aXRoIHRoZSBjYXJldC4gSXQgaXMgbGlrZWx5IGlnbm9yZWQgLS0gdW5sZXNz
IGl0J3MgYSBsaW5rLgotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHQpOwotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IG9mZnNldDsKLSAgICBpZiAoIW9iamVj
dEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChjb3JlT2JqZWN0LCBvZmZzZXQpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlT2JqZWN0
LT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgp
KSB7Ci0gICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJl
ciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1
c3QgdGhlIG9mZnNldCBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCi0gICAgICAgIG9mZnNldCAr
PSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwotICAgIH0KLQotICAgIC8vIFRPRE86IFZlcmlmeSB0aGlz
IGZvciBSVEwgdGV4dC4KLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGJhc2Vs
aW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYmFzZWxpbmVQb3NpdGlvbiBv
cmlnaW5hdGVzIGZyb20gUmVuZGVyT2JqZWN0LmNwcCBhbmQgd2FzCi0gICAgLy8gcmVtb3ZlZCBp
biByNzAwNzIuIFRoZSBpbXBsZW1lbnRhdGlvbiBsb29rcyBpbmNvcnJlY3QgdGhvdWdoLCBiZWNh
dXNlIHRoaXMgaXMgbm90IHRoZQotICAgIC8vIGJhc2VsaW5lIG9mIHRoZSB1bmRlcmx5aW5nIFJl
bmRlck9iamVjdCwgYnV0IG9mIHRoZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LgotICAgIGNv
bnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IHJlbmRlck9iamVjdC0+Zmlyc3RMaW5lU3R5
bGUoKS0+Zm9udE1ldHJpY3MoKTsKLSAgICByZXR1cm4gZm9udE1ldHJpY3MuYXNjZW50KCkgKyAo
cmVuZGVyT2JqZWN0LT5maXJzdExpbmVTdHlsZSgpLT5jb21wdXRlZExpbmVIZWlnaHQoKSAtIGZv
bnRNZXRyaWNzLmhlaWdodCgpKSAvIDI7Ci19Ci0KLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdl
dEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29uc3QgQWNjZXNzaWJpbGl0eU9i
amVjdCogb2JqZWN0KQotewotICAgIGlmICghb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gb2JqZWN0LT5yZW5kZXJlcigpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVy
LT5zdHlsZSgpOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQgPSAwOwotICAgIEdPd25Q
dHI8Z2NoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoIiVpIiwgc3R5bGUtPmZvbnRTaXplKCkp
KTsKLSAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJp
YnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NJWkUpLCBidWZmZXIuZ2V0KCkpOwotCi0gICAg
Q29sb3IgYmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpOwotICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBi
dWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiZ0NvbG9yLnJlZCgpLCBiZ0NvbG9yLmdyZWVuKCksIGJnQ29sb3Iu
Ymx1ZSgpKSk7Ci0gICAgICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRr
X3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIu
Z2V0KCkpOwotICAgIH0KLQotICAgIENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwotICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkg
ewotICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZ0NvbG9yLnJlZCgpLCBmZ0NvbG9yLmdyZWVu
KCksIGZnQ29sb3IuYmx1ZSgpKSk7Ci0gICAgICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0
KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09M
T1IpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQotICAgIGludCBiYXNlbGluZVBvc2l0aW9uOwot
ICAgIGJvb2wgaW5jbHVkZVJpc2UgPSB0cnVlOwotICAgIHN3aXRjaCAoc3R5bGUtPnZlcnRpY2Fs
QWxpZ24oKSkgewotICAgIGNhc2UgU1VCOgotICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gLTEg
KiBiYXNlbGluZVBvc2l0aW9uRm9yUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBTVVBFUjoKLSAgICAgICAgYmFzZWxpbmVQb3NpdGlvbiA9IGJhc2VsaW5l
UG9zaXRpb25Gb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEJBU0VMSU5FOgotICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaW5jbHVkZVJpc2UgPSBmYWxzZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGluY2x1ZGVSaXNlKSB7Ci0gICAgICAgIGJ1ZmZlci5z
ZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGJhc2VsaW5lUG9zaXRpb24pKTsKLSAgICAgICAgcmVz
dWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoQVRLX1RFWFRfQVRUUl9SSVNFKSwgYnVmZmVyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAo
IXN0eWxlLT50ZXh0SW5kZW50KCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBpbnQgaW5kZW50
YXRpb24gPSBzdHlsZS0+dGV4dEluZGVudCgpLmNhbGNWYWx1ZShvYmplY3QtPnNpemUoKS53aWR0
aCgpKTsKLSAgICAgICAgYnVmZmVyLnNldChnX3N0cmR1cF9wcmludGYoIiVpIiwgaW5kZW50YXRp
b24pKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4
dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9JTkRFTlQpLCBidWZmZXIuZ2V0KCkp
OwotICAgIH0KLQotICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5mb250KCkuZmFt
aWx5KCkuZmFtaWx5KCkuc3RyaW5nKCk7Ci0gICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQoOCkg
PT0gIi13ZWJraXQtIikKLSAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFtZS5z
dWJzdHJpbmcoOCk7Ci0KLSAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0
a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1FKSwgZm9u
dEZhbWlseU5hbWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpbnQgZm9udFdlaWdodCA9IC0xOwot
ICAgIHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgewotICAgIGNhc2UgRm9udFdlaWdo
dDEwMDoKLSAgICAgICAgZm9udFdlaWdodCA9IDEwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb250V2VpZ2h0MjAwOgotICAgICAgICBmb250V2VpZ2h0ID0gMjAwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSAzMDA7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDQwMDoKLSAgICAgICAgZm9udFdlaWdo
dCA9IDQwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAg
ICBmb250V2VpZ2h0ID0gNTAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ2
MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSA2MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFdlaWdodDcwMDoKLSAgICAgICAgZm9udFdlaWdodCA9IDcwMDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250V2VpZ2h0ODAwOgotICAgICAgICBmb250V2VpZ2h0ID0gODAwOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQg
PSA5MDA7Ci0gICAgfQotICAgIGlmIChmb250V2VpZ2h0ID4gMCkgewotICAgICAgICBidWZmZXIu
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBmb250V2VpZ2h0KSk7Ci0gICAgICAgIHJlc3VsdCA9
IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFU
S19URVhUX0FUVFJfV0VJR0hUKSwgYnVmZmVyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2gg
KHN0eWxlLT50ZXh0QWxpZ24oKSkgewotICAgIGNhc2UgVEFBVVRPOgotICAgIGNhc2UgVEFTVEFS
VDoKLSAgICBjYXNlIFRBRU5EOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIExFRlQ6Ci0gICAg
Y2FzZSBXRUJLSVRfTEVGVDoKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVz
dWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FU
SU9OKSwgImxlZnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSSUdIVDoKLSAgICBjYXNl
IFdFQktJVF9SSUdIVDoKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0
LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9O
KSwgInJpZ2h0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0VOVEVSOgotICAgIGNhc2Ug
V0VCS0lUX0NFTlRFUjoKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0
LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9O
KSwgImNlbnRlciIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpVU1RJRlk6Ci0gICAgICAg
IHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfSlVTVElGSUNBVElPTiksICJmaWxsIik7Ci0gICAgfQotCi0g
ICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9VTkRFUkxJTkUpLCAoc3R5bGUtPnRleHREZWNvcmF0aW9u
KCkgJiBVTkRFUkxJTkUpID8gInNpbmdsZSIgOiAibm9uZSIpOwotCi0gICAgcmVzdWx0ID0gYWRk
QXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkgPyAiaXRhbGljIiA6ICJub3Jt
YWwiKTsKLQotICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCksIChzdHlsZS0+
dGV4dERlY29yYXRpb24oKSAmIExJTkVfVEhST1VHSCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLQot
ICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRl
X2dldF9uYW1lKEFUS19URVhUX0FUVFJfSU5WSVNJQkxFKSwgKHN0eWxlLT52aXNpYmlsaXR5KCkg
PT0gSElEREVOKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCi0gICAgcmVzdWx0ID0gYWRkQXR0cmli
dXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9FRElUQUJMRSksIG9iamVjdC0+aXNSZWFkT25seSgpID8gImZhbHNlIiA6ICJ0cnVlIik7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2ludCBjb21wYXJlQXR0cmlidXRlKGNv
bnN0IEF0a0F0dHJpYnV0ZSogYSwgY29uc3QgQXRrQXR0cmlidXRlKiBiKQotewotICAgIHJldHVy
biBnX3N0cmNtcDAoYS0+bmFtZSwgYi0+bmFtZSkgfHwgZ19zdHJjbXAwKGEtPnZhbHVlLCBiLT52
YWx1ZSk7Ci19Ci0KLS8vIFJldHVybnMgYW4gQXRrQXR0cmlidXRlU2V0IHdpdGggdGhlIGVsZW1l
bnRzIG9mIGExIHdoaWNoIGFyZSBlaXRoZXIKLS8vIG5vdCBwcmVzZW50IG9yIGRpZmZlcmVudCBp
biBhMi4gIE5laXRoZXIgYTEgbm9yIGEyIHNob3VsZCBiZSB1c2VkCi0vLyBhZnRlciBjYWxsaW5n
IHRoaXMgZnVuY3Rpb24uCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXREaWZm
ZXJlbmNlKEF0a0F0dHJpYnV0ZVNldCogYTEsIEF0a0F0dHJpYnV0ZVNldCogYTIpCi17Ci0gICAg
aWYgKCFhMikKLSAgICAgICAgcmV0dXJuIGExOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBpID0g
YTE7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBmb3VuZDsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHRv
RGVsZXRlID0gMDsKLQotICAgIHdoaWxlIChpKSB7Ci0gICAgICAgIGZvdW5kID0gZ19zbGlzdF9m
aW5kX2N1c3RvbShhMiwgaS0+ZGF0YSwgKEdDb21wYXJlRnVuYyljb21wYXJlQXR0cmlidXRlKTsK
LSAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICBBdGtBdHRyaWJ1dGVTZXQqIHQgPSBp
LT5uZXh0OwotICAgICAgICAgICAgdG9EZWxldGUgPSBnX3NsaXN0X3ByZXBlbmQodG9EZWxldGUs
IGktPmRhdGEpOwotICAgICAgICAgICAgYTEgPSBnX3NsaXN0X2RlbGV0ZV9saW5rKGExLCBpKTsK
LSAgICAgICAgICAgIGkgPSB0OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGkgPSBpLT5u
ZXh0OwotICAgIH0KLQotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoYTIpOwotICAgIGF0a19h
dHRyaWJ1dGVfc2V0X2ZyZWUodG9EZWxldGUpOwotICAgIHJldHVybiBhMTsKLX0KLQotc3RhdGlj
IGd1aW50IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0KQotewotICAgIC8vIE5vbiByZW5kZXIgb2JqZWN0cyBhcmUgbm90IHRha2VuIGlu
dG8gYWNjb3VudAotICAgIGlmICghb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBGb3IgdGhvc2Ugb2JqZWN0cyBpbXBsZW1l
bnRpbmcgdGhlIEF0a1RleHQgaW50ZXJmYWNlIHdlIHVzZSB0aGUKLSAgICAvLyB3ZWxsIGtub3du
IEFQSSB0byBhbHdheXMgZ2V0IHRoZSB0ZXh0IGluIGEgY29uc2lzdGVudCB3YXkKLSAgICBBdGtP
YmplY3QqIGF0a09iaiA9IEFUS19PQkpFQ1Qob2JqZWN0LT53cmFwcGVyKCkpOwotICAgIGlmIChB
VEtfSVNfVEVYVChhdGtPYmopKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHRleHQod2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChhdGtPYmopLCAwLCAtMSkpOwotICAg
ICAgICByZXR1cm4gZ191dGY4X3N0cmxlbih0ZXh0LmdldCgpLCAtMSk7Ci0gICAgfQotCi0gICAg
Ly8gRXZlbiBpZiB3ZSBkb24ndCBleHBvc2UgbGlzdCBtYXJrZXJzIHRvIEFzc2lzdGl2ZQotICAg
IC8vIFRlY2hub2xvZ2llcywgd2UgbmVlZCB0byBoYXZlIGEgd2F5IHRvIG1lYXN1cmUgdGhlaXIg
bGVuZ3RoCi0gICAgLy8gZm9yIHRob3NlIGNhc2VzIHdoZW4gaXQncyBuZWVkZWQgdG8gdGFrZSBp
dCBpbnRvIGFjY291bnQKLSAgICAvLyBzZXBhcmF0ZWx5IChhcyBpbiBnZXRBY2Nlc3NpYmlsaXR5
T2JqZWN0Rm9yT2Zmc2V0KQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBvYmplY3QtPnJl
bmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RNYXJrZXIoKSkg
ewotICAgICAgICBSZW5kZXJMaXN0TWFya2VyKiBtYXJrZXIgPSB0b1JlbmRlckxpc3RNYXJrZXIo
cmVuZGVyZXIpOwotICAgICAgICByZXR1cm4gbWFya2VyLT50ZXh0KCkubGVuZ3RoKCkgKyBtYXJr
ZXItPnN1ZmZpeCgpLmxlbmd0aCgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0
aWMgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9m
ZnNldChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGd1aW50IG9mZnNldCwgZ2lu
dCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICBjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiByZXN1bHQ7Ci0gICAgZ3VpbnQgbGVuZ3RoID0gYWNjZXNzaWJpbGl0eU9iamVj
dExlbmd0aChvYmplY3QpOwotICAgIGlmIChsZW5ndGggPiBvZmZzZXQpIHsKLSAgICAgICAgKnN0
YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgKmVuZE9mZnNldCA9IGxlbmd0aDsKLSAgICAgICAgcmVz
dWx0ID0gb2JqZWN0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgICpzdGFydE9mZnNldCA9IC0xOwot
ICAgICAgICAqZW5kT2Zmc2V0ID0gLTE7Ci0gICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgfQotCi0g
ICAgaWYgKCFvYmplY3QtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJzdENoaWxkKCk7Ci0g
ICAgZ3VpbnQgY3VycmVudE9mZnNldCA9IDA7Ci0gICAgZ3VpbnQgY2hpbGRQb3NpdGlvbiA9IDA7
Ci0gICAgd2hpbGUgKGNoaWxkICYmIGN1cnJlbnRPZmZzZXQgPD0gb2Zmc2V0KSB7Ci0gICAgICAg
IGd1aW50IGNoaWxkTGVuZ3RoID0gYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjaGlsZCk7Ci0g
ICAgICAgIGN1cnJlbnRPZmZzZXQgPSBjaGlsZExlbmd0aCArIGNoaWxkUG9zaXRpb247Ci0gICAg
ICAgIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7Ci0gICAgICAgICAgICBnaW50IGNoaWxk
U3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBnaW50IGNoaWxkRW5kT2Zmc2V0OwotICAgICAgICAg
ICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZ3JhbmRDaGlsZCA9IGdldEFjY2Vzc2liaWxp
dHlPYmplY3RGb3JPZmZzZXQoY2hpbGQsIG9mZnNldC1jaGlsZFBvc2l0aW9uLCAgJmNoaWxkU3Rh
cnRPZmZzZXQsICZjaGlsZEVuZE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoY2hpbGRTdGFydE9m
ZnNldCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gY2hpbGRTdGFydE9m
ZnNldCArIGNoaWxkUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgKmVuZE9mZnNldCA9IGNoaWxk
RW5kT2Zmc2V0ICsgY2hpbGRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBncmFu
ZENoaWxkOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hp
bGRQb3NpdGlvbiArPSBjaGlsZExlbmd0aDsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0UnVuQXR0cmlidXRlc0Zyb21BY2Nlc2liaWxpdHlP
YmplY3QoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZWxlbWVudCwgZ2ludCBvZmZzZXQsIGdp
bnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCAqY2hpbGQgPSBnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KGVsZW1l
bnQsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgaWYgKCFjaGlsZCkgewot
ICAgICAgICAqc3RhcnRPZmZzZXQgPSAtMTsKLSAgICAgICAgKmVuZE9mZnNldCA9IC0xOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGRlZmF1bHRBdHRy
aWJ1dGVzID0gZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChlbGVtZW50KTsK
LSAgICBBdGtBdHRyaWJ1dGVTZXQqIGNoaWxkQXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZVNldEZv
ckFjY2Vzc2liaWxpdHlPYmplY3QoY2hpbGQpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZVNldERp
ZmZlcmVuY2UoY2hpbGRBdHRyaWJ1dGVzLCBkZWZhdWx0QXR0cmlidXRlcyk7Ci19Ci0KLXN0YXRp
YyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1bl9hdHRyaWJ1
dGVzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCog
ZW5kT2Zmc2V0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHQpOwotICAgIEF0a0F0dHJpYnV0ZVNldCogcmVzdWx0OwotCi0gICAgaWYgKCFjb3JlT2Jq
ZWN0KSB7Ci0gICAgICAgICpzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgICplbmRPZmZzZXQgPSBh
dGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHQpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBpZiAob2Zmc2V0ID09IC0xKQotICAgICAgICBvZmZzZXQgPSBhdGtfdGV4dF9n
ZXRfY2FyZXRfb2Zmc2V0KHRleHQpOwotCi0gICAgcmVzdWx0ID0gZ2V0UnVuQXR0cmlidXRlc0Zy
b21BY2Nlc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0KTsKLQotICAgIGlmICgqc3RhcnRPZmZzZXQgPCAwKSB7Ci0gICAgICAgICpzdGFydE9m
ZnNldCA9IG9mZnNldDsKLSAgICAgICAgKmVuZE9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoQXRrVGV4dCogdGV4dCkKLXsKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBpZiAo
IWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nl
c3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOwotfQotCi1zdGF0aWMgSW50UmVjdCB0ZXh0RXh0
ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGxlbmd0aCwgQXRrQ29v
cmRUeXBlIGNvb3JkcykKLXsKLSAgICBnY2hhciogdGV4dENvbnRlbnQgPSB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF90ZXh0KHRleHQsIHN0YXJ0T2Zmc2V0LCAtMSk7Ci0gICAgZ2ludCB0ZXh0
TGVuZ3RoID0gZ191dGY4X3N0cmxlbih0ZXh0Q29udGVudCwgLTEpOwotCi0gICAgLy8gVGhlIGZp
cnN0IGNhc2UgKGVuZE9mZnNldCBvZiAtMSkgc2hvdWxkIHdvcmssIGJ1dCBzZWVtcyBicm9rZW4g
Zm9yIGFsbCBHdGsrIGFwcHMuCi0gICAgZ2ludCByYW5nZUxlbmd0aCA9IGxlbmd0aDsKLSAgICBp
ZiAocmFuZ2VMZW5ndGggPCAwIHx8IHJhbmdlTGVuZ3RoID4gdGV4dExlbmd0aCkKLSAgICAgICAg
cmFuZ2VMZW5ndGggPSB0ZXh0TGVuZ3RoOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QgPSBjb3JlKHRleHQpOwotCi0gICAgSW50UmVjdCBleHRlbnRzID0gY29yZU9iamVjdC0+
ZG9BWEJvdW5kc0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0
aCkpOwotICAgIHN3aXRjaChjb29yZHMpIHsKLSAgICBjYXNlIEFUS19YWV9TQ1JFRU46Ci0gICAg
ICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpKQotICAg
ICAgICAgICAgZXh0ZW50cyA9IGRvY3VtZW50LT52aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4oZXh0
ZW50cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKLSAgICAgICAg
Ly8gTm8tb3AKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4dGVudHM7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRl
bnRzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3
aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRzKQotewotICAgIEludFJlY3Qg
ZXh0ZW50cyA9IHRleHRFeHRlbnRzKHRleHQsIG9mZnNldCwgMSwgY29vcmRzKTsKLSAgICAqeCA9
IGV4dGVudHMueCgpOwotICAgICp5ID0gZXh0ZW50cy55KCk7Ci0gICAgKndpZHRoID0gZXh0ZW50
cy53aWR0aCgpOwotICAgICpoZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzKEF0a1RleHQqIHRl
eHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0LCBBdGtDb29yZFR5cGUgY29vcmRz
LCBBdGtUZXh0UmVjdGFuZ2xlKiByZWN0KQotewotICAgIEludFJlY3QgZXh0ZW50cyA9IHRleHRF
eHRlbnRzKHRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwgY29vcmRz
KTsKLSAgICByZWN0LT54ID0gZXh0ZW50cy54KCk7Ci0gICAgcmVjdC0+eSA9IGV4dGVudHMueSgp
OwotICAgIHJlY3QtPndpZHRoID0gZXh0ZW50cy53aWR0aCgpOwotICAgIHJlY3QtPmhlaWdodCA9
IGV4dGVudHMuaGVpZ2h0KCk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X2NoYXJhY3Rlcl9jb3VudChBdGtUZXh0KiB0ZXh0KQotewotICAgIHJldHVybiBhY2Nl
c3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmUodGV4dCkpOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQoQXRrVGV4dCogdGV4dCwgZ2lu
dCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZHMpCi17Ci0gICAgLy8gRklYTUU6IFVzZSB0
aGUgQXRrQ29vcmRUeXBlCi0gICAgLy8gVE9ETzogSXMgaXQgY29ycmVjdCB0byBpZ25vcmUgcmFu
Z2UubGVuZ3RoPwotICAgIEludFBvaW50IHBvcyh4LCB5KTsKLSAgICBQbGFpblRleHRSYW5nZSBy
YW5nZSA9IGNvcmUodGV4dCktPmRvQVhSYW5nZUZvclBvc2l0aW9uKHBvcyk7Ci0gICAgcmV0dXJu
IHJhbmdlLnN0YXJ0OwotfQotCi1zdGF0aWMgdm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2Jq
ZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgZ2ludCYgc3RhcnRPZmZzZXQsIGdpbnQmIGVuZE9mZnNldCkKLXsKLSAgICBpZiAo
IWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBkb2Vzbid0IGFmZmVj
dCB0aGUgc2VsZWN0ZWQgbm9kZS4KLSAgICBpZiAoIXNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChj
b3JlT2JqZWN0LCBzZWxlY3Rpb24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBuZWVk
IHRvIGZpbmQgdGhlIGV4YWN0IHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIGluIHRoZQotICAgIC8v
IHNlbGVjdGVkIG5vZGUgdGhhdCBpbnRlcnNlY3RzIHRoZSBzZWxlY3Rpb24sIHRvIGxhdGVyIG9u
IGdldAotICAgIC8vIHRoZSByaWdodCB2YWx1ZXMgZm9yIHRoZSBlZmZlY3RpdmUgc3RhcnQgYW5k
IGVuZCBvZmZzZXRzLgotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBvc2l0aW9uIG5v
ZGVSYW5nZVN0YXJ0OwotICAgIFBvc2l0aW9uIG5vZGVSYW5nZUVuZDsKLSAgICBOb2RlKiBub2Rl
ID0gY29yZU9iamVjdC0+bm9kZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gc2VsUmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLQotICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gYWZm
ZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGZpcnN0Ci0gICAgLy8gcG9zc2libGUgcG9z
aXRpb24gaXMgYWxzbyBpbiB0aGUgc2VsZWN0aW9uLCB3ZSBtdXN0IHNldAotICAgIC8vIG5vZGVS
YW5nZVN0YXJ0IHRvIHRoYXQgcG9zaXRpb24sIG90aGVyd2lzZSB0byB0aGUgc2VsZWN0aW9uJ3MK
LSAgICAvLyBzdGFydCBwb3NpdGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdh
eSkuCi0gICAgTm9kZSogZmlyc3RMZWFmTm9kZSA9IG5vZGUtPmZpcnN0RGVzY2VuZGFudCgpOwot
ICAgIGlmIChzZWxSYW5nZS0+aXNQb2ludEluUmFuZ2UoZmlyc3RMZWFmTm9kZSwgMCwgZWMpKQot
ICAgICAgICBub2RlUmFuZ2VTdGFydCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShmaXJz
dExlYWZOb2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gc2VsUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKTsKLQotICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUg
c2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGxhc3QKLSAgICAvLyBwb3NzaWJsZSBwb3NpdGlvbiBpcyBh
bHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0Ci0gICAgLy8gbm9kZVJhbmdlRW5kIHRv
IHRoYXQgcG9zaXRpb24sIG90aGVyd2lzZSB0byB0aGUgc2VsZWN0aW9uJ3MKLSAgICAvLyBlbmQg
cG9zaXRpb24gKGl0IHdvdWxkIGJlbG9uZyB0byB0aGUgbm9kZSBhbnl3YXkpLgotICAgIE5vZGUq
IGxhc3RMZWFmTm9kZSA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgaWYgKHNlbFJhbmdl
LT5pc1BvaW50SW5SYW5nZShsYXN0TGVhZk5vZGUsIGxhc3RPZmZzZXRJbk5vZGUobGFzdExlYWZO
b2RlKSwgZWMpKQotICAgICAgICBub2RlUmFuZ2VFbmQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJO
b2RlKGxhc3RMZWFmTm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBub2RlUmFuZ2VFbmQgPSBzZWxS
YW5nZS0+ZW5kUG9zaXRpb24oKTsKLQotICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUg
c2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBvYmplY3QuCi0gICAgUG9zaXRpb24gcGFyZW50Rmly
c3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCks
IHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVSYW5nZVN0YXJ0KTsKLQotICAgIC8vIFNldCB2YWx1
ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cy4KLSAgICBzdGFydE9mZnNldCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5nZXQoKSwgdHJ1ZSk7Ci0KLSAgICAvLyBX
ZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCi0g
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAg
aWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5n
IG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhT
dWZmaXgoKTsKLSAgICAgICAgc3RhcnRPZmZzZXQgKz0gbWFya2VyVGV4dC5sZW5ndGgoKTsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+
ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgZW5kT2Zmc2V0
ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5nZXQo
KSwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X25f
c2VsZWN0aW9ucyhBdGtUZXh0KiB0ZXh0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0g
Y29yZU9iamVjdC0+c2VsZWN0aW9uKCk7Ci0KLSAgICAvLyBPbmx5IHJhbmdlIHNlbGVjdGlvbnMg
YXJlIG5lZWRlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QKLSAgICBpZiAoIXNlbGVj
dGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zIGZvciBub3csIHNvIHRoZXJlJ3Mgb25seQotICAgIC8v
IHR3byBwb3NzaWJpbGl0aWVzCi0gICAgLy8gQWxzbywgd2UgZG9uJ3Qgd2FudCB0byBkbyBhbnl0
aGluZyBpZiB0aGUgc2VsZWN0aW9uIGRvZXMgbm90Ci0gICAgLy8gYmVsb25nIHRvIHRoZSBjdXJy
ZW50bHkgc2VsZWN0ZWQgb2JqZWN0LiBXZSBoYXZlIHRvIGNoZWNrIHNpbmNlCi0gICAgLy8gdGhl
cmUncyBubyB3YXkgdG8gZ2V0IHRoZSBzZWxlY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0LCBvbmx5
Ci0gICAgLy8gdGhlIGdsb2JhbCBvbmUgKHRoZSBBUEkgaXMgYSBiaXQgY29uZnVzaW5nKQotICAg
IHJldHVybiBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uKSA/
IDEgOiAwOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3Nl
bGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlvbk51bSwgZ2ludCogc3RhcnRPZmZz
ZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICAvLyBEZWZhdWx0IHZhbHVlcywgdW5sZXNzIHRo
ZSBjb250cmFyeSBpcyBwcm92ZWQKLSAgICAqc3RhcnRPZmZzZXQgPSAqZW5kT2Zmc2V0ID0gMDsK
LQotICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNv
IGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KLSAgICBpZiAoc2Vs
ZWN0aW9uTnVtKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEdldCB0aGUgb2Zmc2V0cyBv
ZiB0aGUgc2VsZWN0aW9uIGZvciB0aGUgc2VsZWN0ZWQgb2JqZWN0Ci0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKTsKLSAgICBnZXRTZWxlY3Rpb25PZmZz
ZXRzRm9yT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbiwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zm
c2V0KTsKLQotICAgIC8vIFJldHVybiAwIGluc3RlYWQgb2YgIiIsIGFzIHRoYXQncyB0aGUgZXhw
ZWN0ZWQgcmVzdWx0IGZvcgotICAgIC8vIHRoaXMgQXRrVGV4dCBtZXRob2Qgd2hlbiB0aGVyZSdz
IG5vIHNlbGVjdGlvbgotICAgIGlmICgqc3RhcnRPZmZzZXQgPT0gKmVuZE9mZnNldCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4
dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9hZGRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQg
c3RhcnRfb2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X3NldF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdp
bnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQotewotICAgIC8vIFdlYkNvcmUgZG9lcyBu
b3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90
IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KLSAgICBpZiAoc2VsZWN0aW9uTnVtKQotICAgICAgICByZXR1
cm4gRkFMU0U7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0
ZXh0KTsKLSAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBDb25zaWRlciAtMSBhbmQgb3V0LW9m
LWJvdW5kIHZhbHVlcyBhbmQgY29ycmVjdCB0aGVtIHRvIGxlbmd0aAotICAgIGdpbnQgdGV4dENv
dW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHQpOwot
ICAgIGlmIChzdGFydE9mZnNldCA8IDAgfHwgc3RhcnRPZmZzZXQgPiB0ZXh0Q291bnQpCi0gICAg
ICAgIHN0YXJ0T2Zmc2V0ID0gdGV4dENvdW50OwotICAgIGlmIChlbmRPZmZzZXQgPCAwIHx8IGVu
ZE9mZnNldCA+IHRleHRDb3VudCkKLSAgICAgICAgZW5kT2Zmc2V0ID0gdGV4dENvdW50OwotCi0g
ICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldHMgZm9yIHRoZSBsaXN0IGl0ZW0gbWFy
a2VyLgotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigp
OwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAg
IFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlciktPm1hcmtlclRl
eHRXaXRoU3VmZml4KCk7Ci0gICAgICAgIGludCBtYXJrZXJMZW5ndGggPSBtYXJrZXJUZXh0Lmxl
bmd0aCgpOwotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBtYXJrZXJMZW5ndGggfHwgZW5kT2Zm
c2V0IDwgbWFya2VyTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICAg
IHN0YXJ0T2Zmc2V0IC09IG1hcmtlckxlbmd0aDsKLSAgICAgICAgZW5kT2Zmc2V0IC09IG1hcmtl
ckxlbmd0aDsKLSAgICB9Ci0KLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uoc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBy
YW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UodGV4dFJhbmdl
KTsKLSAgICBpZiAocmFuZ2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAg
IGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2UpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9yZW1vdmVfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtKQotewot
ICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFu
eXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KLSAgICBpZiAoc2VsZWN0
aW9uTnVtKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBEbyBub3RoaW5nIGlmIGN1
cnJlbnQgc2VsZWN0aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBvYmplY3QKLSAgICBpZiAoIXdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X25fc2VsZWN0aW9ucyh0ZXh0KSkKLSAgICAgICAgcmV0
dXJuIEZBTFNFOwotCi0gICAgLy8gU2V0IGEgbmV3IDAtc2l6ZWQgc2VsZWN0aW9uIHRvIHRoZSBj
YXJldCBwb3NpdGlvbiwgaW4gb3JkZXIKLSAgICAvLyB0byBzaW11bGF0ZSBzZWxlY3Rpb24gcmVt
b3ZhbCAoR0FJTCBzdHlsZSkKLSAgICBnaW50IGNhcmV0T2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHQpOwotICAgIHJldHVybiB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X3NldF9zZWxlY3Rpb24odGV4dCwgc2VsZWN0aW9uTnVtLCBjYXJldE9mZnNldCwg
Y2FyZXRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0KQotewotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotCi0gICAgaWYgKCFj
b3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJu
IEZBTFNFOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAg
ICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFy
a2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgaW50IG1hcmtlckxlbmd0aCA9IG1hcmtlclRl
eHQubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBtYXJrZXJMZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9m
ZnNldCBmb3IgbGlzdCBpdGVtcy4KLSAgICAgICAgb2Zmc2V0IC09IG1hcmtlckxlbmd0aDsKLSAg
ICB9Ci0KLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uob2Zmc2V0LCAwKTsKLSAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdl
Rm9yUmFuZ2UodGV4dFJhbmdlKTsKLSAgICBpZiAocmFuZ2UuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBGQUxTRTsKLQotICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9u
UmFuZ2UocmFuZ2UpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBhdGtfdGV4
dF9pbnRlcmZhY2VfaW5pdChBdGtUZXh0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5nZXRf
dGV4dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQ7Ci0gICAgaWZhY2UtPmdldF90
ZXh0X2FmdGVyX29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYWZ0ZXJf
b2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfdGV4dF9hdF9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF90ZXh0X2F0X29mZnNldDsKLSAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9hdF9v
ZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfYXRfb2Zmc2V0Owot
ICAgIGlmYWNlLT5nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfY2FyZXRfb2Zmc2V0ID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0OwotICAgIGlmYWNlLT5nZXRf
cnVuX2F0dHJpYnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9ydW5fYXR0cmlidXRl
czsKLSAgICBpZmFjZS0+Z2V0X2RlZmF1bHRfYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlczsKLSAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9l
eHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHM7Ci0g
ICAgaWZhY2UtPmdldF9yYW5nZV9leHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
cmFuZ2VfZXh0ZW50czsKLSAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9jb3VudCA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudDsKLSAgICBpZmFjZS0+Z2V0X29mZnNl
dF9hdF9wb2ludCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludDsK
LSAgICBpZmFjZS0+Z2V0X25fc2VsZWN0aW9ucyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X25fc2VsZWN0aW9uczsKLSAgICBpZmFjZS0+Z2V0X3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3NlbGVjdGlvbjsKLQotICAgIC8vIHNldCBtZXRob2RzCi0gICAgaWZhY2Ut
PmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rpb247Ci0g
ICAgaWZhY2UtPnJlbW92ZV9zZWxlY3Rpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3JlbW92
ZV9zZWxlY3Rpb247Ci0gICAgaWZhY2UtPnNldF9zZWxlY3Rpb24gPSB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X3NldF9zZWxlY3Rpb247Ci0gICAgaWZhY2UtPnNldF9jYXJldF9vZmZzZXQgPSB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQ7Ci19Ci0KLS8vIEVkaXRhYmxlVGV4
dAotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9zZXRf
cnVuX2F0dHJpYnV0ZXMoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBBdGtBdHRyaWJ1dGVTZXQqIGF0
dHJpYl9zZXQsIGdpbnQgc3RhcnRfb2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtp
dF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfc2V0X3RleHRfY29udGVudHMoQXRrRWRpdGFibGVU
ZXh0KiB0ZXh0LCBjb25zdCBnY2hhciogc3RyaW5nKQotewotICAgIC8vIEZJWE1FOiBzdHJpbmcg
bnVsbGNoZWNrPwotICAgIGNvcmUodGV4dCktPnNldFZhbHVlKFN0cmluZzo6ZnJvbVVURjgoc3Ry
aW5nKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRf
aW5zZXJ0X3RleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBjb25zdCBnY2hhciogc3RyaW5nLCBn
aW50IGxlbmd0aCwgZ2ludCogcG9zaXRpb24pCi17Ci0gICAgLy8gRklYTUU6IHN0cmluZyBudWxs
Y2hlY2s/Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0
KTsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIGluIFdlYkNvcmUKLSAgICAvL2NvcmVP
YmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKCpwb3NpdGlvbiwgMCkp
OwotICAgIC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KFN0cmluZzo6ZnJvbVVURjgoc3Ry
aW5nKSk7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgp
OwotICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNv
cmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UoKnBv
c2l0aW9uLCAwKSkpOwotICAgIGNvcmVPYmplY3QtPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzZXQgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBpbnNlcnRlZCB0ZXh0
IGxlbmd0aCwgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbiB0aGF0IHJlcXVlc3RlZC4KLSAgICBpZiAo
ZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT5pbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0
RXZlbnQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBmYWxzZSwgMCkpCi0gICAgICAgICpwb3Np
dGlvbiArPSBsZW5ndGg7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRh
YmxlX3RleHRfY29weV90ZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgZ2ludCBzdGFydF9wb3Ms
IGdpbnQgZW5kX3BvcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2N1dF90ZXh0KEF0a0VkaXRhYmxlVGV4
dCogdGV4dCwgZ2ludCBzdGFydF9wb3MsIGdpbnQgZW5kX3BvcykKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0
X2RlbGV0ZV90ZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgZ2ludCBzdGFydF9wb3MsIGdpbnQg
ZW5kX3BvcykKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0
ZXh0KTsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkIGluIFdlYkNvcmUKLSAgICAvL2Nv
cmVPYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0X3Bvcywg
ZW5kX3BvcyAtIHN0YXJ0X3BvcykpOwotICAgIC8vY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0
KFN0cmluZygpKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5n
ZShzdGFydF9wb3MsIGVuZF9wb3MgLSBzdGFydF9wb3MpKSk7Ci0gICAgY29yZU9iamVjdC0+c2V0
Rm9jdXNlZCh0cnVlKTsKLSAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnBlcmZvcm1E
ZWxldGUoKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4
dF9wYXN0ZV90ZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgZ2ludCBwb3NpdGlvbikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBhdGtfZWRpdGFibGVfdGV4dF9p
bnRlcmZhY2VfaW5pdChBdGtFZGl0YWJsZVRleHRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2Ut
PnNldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfc2V0
X3J1bl9hdHRyaWJ1dGVzOwotICAgIGlmYWNlLT5zZXRfdGV4dF9jb250ZW50cyA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfc2V0X3RleHRfY29udGVudHM7Ci0gICAgaWZhY2UtPmlu
c2VydF90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dDsK
LSAgICBpZmFjZS0+Y29weV90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9j
b3B5X3RleHQ7Ci0gICAgaWZhY2UtPmN1dF90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFi
bGVfdGV4dF9jdXRfdGV4dDsKLSAgICBpZmFjZS0+ZGVsZXRlX3RleHQgPSB3ZWJraXRfYWNjZXNz
aWJsZV9lZGl0YWJsZV90ZXh0X2RlbGV0ZV90ZXh0OwotICAgIGlmYWNlLT5wYXN0ZV90ZXh0ID0g
d2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9wYXN0ZV90ZXh0OwotfQotCi1zdGF0aWMg
dm9pZCBjb250ZW50c1RvQXRrKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nv
b3JkVHlwZSBjb29yZFR5cGUsIEludFJlY3QgcmVjdCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCog
d2lkdGggPSAwLCBnaW50KiBoZWlnaHQgPSAwKQotewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKLQotICAgIGlmIChmcmFtZVZpZXcp
IHsKLSAgICAgICAgc3dpdGNoIChjb29yZFR5cGUpIHsKLSAgICAgICAgY2FzZSBBVEtfWFlfV0lO
RE9XOgotICAgICAgICAgICAgcmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFUS19YWV9TQ1JFRU46Ci0gICAg
ICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKHJlY3QpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeCkKLSAgICAgICAgKngg
PSByZWN0LngoKTsKLSAgICBpZiAoeSkKLSAgICAgICAgKnkgPSByZWN0LnkoKTsKLSAgICBpZiAo
d2lkdGgpCi0gICAgICAgICp3aWR0aCA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAoaGVpZ2h0KQot
ICAgICAgICAqaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKLX0KLQotc3RhdGljIEludFBvaW50IGF0
a1RvQ29udGVudHMoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrQ29vcmRUeXBl
IGNvb3JkVHlwZSwgZ2ludCB4LCBnaW50IHkpCi17Ci0gICAgSW50UG9pbnQgcG9zKHgsIHkpOwot
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBjb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmll
dygpOwotICAgIGlmIChmcmFtZVZpZXcpIHsKLSAgICAgICAgc3dpdGNoIChjb29yZFR5cGUpIHsK
LSAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgotICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmll
dy0+c2NyZWVuVG9Db250ZW50cyhwb3MpOwotICAgICAgICBjYXNlIEFUS19YWV9XSU5ET1c6Ci0g
ICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBvcyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQoQXRrQ29t
cG9uZW50KiBjb21wb25lbnQsIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29yZFR5cGUgY29vcmRUeXBl
KQotewotICAgIEludFBvaW50IHBvcyA9IGF0a1RvQ29udGVudHMoY29yZShjb21wb25lbnQpLCBj
b29yZFR5cGUsIHgsIHkpOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHRhcmdldCA9
IGNvcmUoY29tcG9uZW50KS0+YWNjZXNzaWJpbGl0eUhpdFRlc3QocG9zKTsKLSAgICBpZiAoIXRh
cmdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZ19vYmplY3RfcmVmKHRhcmdldC0+d3JhcHBl
cigpKTsKLSAgICByZXR1cm4gdGFyZ2V0LT53cmFwcGVyKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9nZXRfZXh0ZW50cyhBdGtDb21wb25lbnQqIGNvbXBv
bmVudCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29v
cmRUeXBlIGNvb3JkVHlwZSkKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBjb3JlKGNvbXBvbmVudCkt
PmVsZW1lbnRSZWN0KCk7Ci0gICAgY29udGVudHNUb0F0ayhjb3JlKGNvbXBvbmVudCksIGNvb3Jk
VHlwZSwgcmVjdCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ3JhYl9mb2N1cyhBdGtDb21wb25lbnQqIGNvbXBv
bmVudCkKLXsKLSAgICBjb3JlKGNvbXBvbmVudCktPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgcmV0
dXJuIGNvcmUoY29tcG9uZW50KS0+aXNGb2N1c2VkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a19j
b21wb25lbnRfaW50ZXJmYWNlX2luaXQoQXRrQ29tcG9uZW50SWZhY2UqIGlmYWNlKQotewotICAg
IGlmYWNlLT5yZWZfYWNjZXNzaWJsZV9hdF9wb2ludCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBv
bmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludDsKLSAgICBpZmFjZS0+Z2V0X2V4dGVudHMgPSB3
ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ2V0X2V4dGVudHM7Ci0gICAgaWZhY2UtPmdyYWJf
Zm9jdXMgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ3JhYl9mb2N1czsKLX0KLQotLy8g
SW1hZ2UKLQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfaW1hZ2VfZ2V0X2ltYWdlX3Bv
c2l0aW9uKEF0a0ltYWdlKiBpbWFnZSwgZ2ludCogeCwgZ2ludCogeSwgQXRrQ29vcmRUeXBlIGNv
b3JkVHlwZSkKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBjb3JlKGltYWdlKS0+ZWxlbWVudFJlY3Qo
KTsKLSAgICBjb250ZW50c1RvQXRrKGNvcmUoaW1hZ2UpLCBjb29yZFR5cGUsIHJlY3QsIHgsIHkp
OwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9p
bWFnZV9kZXNjcmlwdGlvbihBdGtJbWFnZSogaW1hZ2UpCi17Ci0gICAgcmV0dXJuIHJldHVyblN0
cmluZyhjb3JlKGltYWdlKS0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkpOwotfQotCi1zdGF0
aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2Vfc2l6ZShBdGtJbWFnZSog
aW1hZ2UsIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQpCi17Ci0gICAgSW50U2l6ZSBzaXplID0g
Y29yZShpbWFnZSktPnNpemUoKTsKLQotICAgIGlmICh3aWR0aCkKLSAgICAgICAgKndpZHRoID0g
c2l6ZS53aWR0aCgpOwotICAgIGlmIChoZWlnaHQpCi0gICAgICAgICpoZWlnaHQgPSBzaXplLmhl
aWdodCgpOwotfQotCi1zdGF0aWMgdm9pZCBhdGtfaW1hZ2VfaW50ZXJmYWNlX2luaXQoQXRrSW1h
Z2VJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF9pbWFnZV9wb3NpdGlvbiA9IHdlYmtp
dF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9wb3NpdGlvbjsKLSAgICBpZmFjZS0+Z2V0X2lt
YWdlX2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfaW1hZ2VfZ2V0X2ltYWdlX2Rlc2Ny
aXB0aW9uOwotICAgIGlmYWNlLT5nZXRfaW1hZ2Vfc2l6ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2lt
YWdlX2dldF9pbWFnZV9zaXplOwotfQotCi0vLyBUYWJsZQotCi1zdGF0aWMgQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbCogY2VsbChBdGtUYWJsZSogdGFibGUsIGd1aW50IHJvdywgZ3VpbnQgY29sdW1u
KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7Ci0g
ICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KGFjY1RhYmxlKS0+Y2VsbEZv
ckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBn
aW50IGNlbGxJbmRleChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwsIEFjY2Vzc2liaWxp
dHlUYWJsZSogYXhUYWJsZSkKLXsKLSAgICAvLyBDYWxjdWxhdGUgdGhlIGNlbGwncyBpbmRleCBh
cyBpZiB3ZSBoYWQgYSB0cmFkaXRpb25hbCBHdGsrIHRhYmxlIGluCi0gICAgLy8gd2hpY2ggY2Vs
bHMgYXJlIGFsbCBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIHRhYmxlLCBhcnJhbmdlZCByb3ctZmly
c3QuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IGFsbENlbGxzOwotICAgIGF4VGFibGUtPmNlbGxzKGFsbENlbGxzKTsKLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I6Oml0ZXJhdG9yIHBvc2l0aW9u
OwotICAgIHBvc2l0aW9uID0gc3RkOjpmaW5kKGFsbENlbGxzLmJlZ2luKCksIGFsbENlbGxzLmVu
ZCgpLCBheENlbGwpOwotICAgIGlmIChwb3NpdGlvbiA9PSBhbGxDZWxscy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBwb3NpdGlvbiAtIGFsbENlbGxzLmJlZ2luKCk7Ci19
Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsQXRJbmRleChBdGtUYWJsZSog
dGFibGUsIGdpbnQgaW5kZXgpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUg
PSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBhbGxDZWxsczsKLSAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlKj4oYWNjVGFibGUpLT5jZWxscyhhbGxDZWxscyk7Ci0gICAgICAgIGlmICgwIDw9IGluZGV4
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCBhbGxDZWxscy5zaXplKCkpIHsKLSAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY0NlbGwgPSBhbGxDZWxscy5hdChpbmRl
eCkuZ2V0KCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbCo+KGFjY0NlbGwpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9yZWZfYXQoQXRrVGFi
bGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCi17Ci0gICAgQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbCogYXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4pOwotICAgIGlmICghYXhD
ZWxsKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYXhDZWxsLT53cmFwcGVyKCk7Ci19
Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9pbmRleF9hdChBdGtU
YWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50IGNvbHVtbikKLXsKLSAgICBBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsKiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNvbHVtbik7Ci0gICAgQWNjZXNz
aWJpbGl0eVRhYmxlKiBheFRhYmxlID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4o
Y29yZSh0YWJsZSkpOwotICAgIHJldHVybiBjZWxsSW5kZXgoYXhDZWxsLCBheFRhYmxlKTsKLX0K
LQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVtbl9hdF9pbmRl
eChBdGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCi17Ci0gICAgQWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbCogYXhDZWxsID0gY2VsbEF0SW5kZXgodGFibGUsIGluZGV4KTsKLSAgICBpZiAoYXhDZWxs
KXsKLSAgICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFuZ2U7Ci0gICAgICAgIGF4Q2VsbC0+
Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7Ci0gICAgICAgIHJldHVybiBjb2x1bW5SYW5n
ZS5maXJzdDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRf
YWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2F0X2luZGV4KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBp
bmRleCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsQXRJbmRl
eCh0YWJsZSwgaW5kZXgpOwotICAgIGlmIChheENlbGwpewotICAgICAgICBwYWlyPGludCwgaW50
PiByb3dSYW5nZTsKLSAgICAgICAgYXhDZWxsLT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsKLSAg
ICAgICAgcmV0dXJuIHJvd1JhbmdlLmZpcnN0OwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0K
LXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9uX2NvbHVtbnMoQXRrVGFi
bGUqIHRhYmxlKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0
YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KGFjY1RhYmxl
KS0+Y29sdW1uQ291bnQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0
X2FjY2Vzc2libGVfdGFibGVfZ2V0X25fcm93cyhBdGtUYWJsZSogdGFibGUpCi17Ci0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFi
bGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5yb3dDb3VudCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29s
dW1uX2V4dGVudF9hdChBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50IGNvbHVtbikKLXsK
LSAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNv
bHVtbik7Ci0gICAgaWYgKGF4Q2VsbCkgewotICAgICAgICBwYWlyPGludCwgaW50PiBjb2x1bW5S
YW5nZTsKLSAgICAgICAgYXhDZWxsLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKLSAg
ICAgICAgcmV0dXJuIGNvbHVtblJhbmdlLnNlY29uZDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0
KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQotewotICAgIEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsKLSAgICBp
ZiAoYXhDZWxsKSB7Ci0gICAgICAgIHBhaXI8aW50LCBpbnQ+IHJvd1JhbmdlOwotICAgICAgICBh
eENlbGwtPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOwotICAgICAgICByZXR1cm4gcm93UmFuZ2Uu
c2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIEF0a09iamVjdCogd2Vi
a2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQXRrVGFibGUqIHRhYmxlLCBn
aW50IGNvbHVtbikKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUo
dGFibGUpOwotICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
IHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIGFsbENvbHVtbkhlYWRlcnM7Ci0gICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZSo+KGFjY1RhYmxlKS0+Y29sdW1uSGVhZGVycyhhbGxDb2x1bW5IZWFkZXJzKTsKLSAgICAg
ICAgdW5zaWduZWQgY29sdW1uQ291bnQgPSBhbGxDb2x1bW5IZWFkZXJzLnNpemUoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGNvbHVtbkNvdW50OyArK2spIHsKLSAgICAgICAg
ICAgIHBhaXI8aW50LCBpbnQ+IGNvbHVtblJhbmdlOwotICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihh
bGxDb2x1bW5IZWFkZXJzLmF0KGspLmdldCgpKTsKLSAgICAgICAgICAgIGNlbGwtPmNvbHVtbklu
ZGV4UmFuZ2UoY29sdW1uUmFuZ2UpOwotICAgICAgICAgICAgaWYgKGNvbHVtblJhbmdlLmZpcnN0
IDw9IGNvbHVtbiAmJiBjb2x1bW4gPCBjb2x1bW5SYW5nZS5maXJzdCArIGNvbHVtblJhbmdlLnNl
Y29uZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWxsQ29sdW1uSGVhZGVyc1trXS0+d3JhcHBl
cigpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgQXRrT2Jq
ZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2hlYWRlcihBdGtUYWJsZSogdGFi
bGUsIGdpbnQgcm93KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29y
ZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qo
KSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgYWxsUm93SGVhZGVyczsKLSAgICAgICAgc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlKj4oYWNjVGFibGUpLT5yb3dIZWFkZXJzKGFsbFJvd0hlYWRlcnMpOwotICAgICAgICB1bnNp
Z25lZCByb3dDb3VudCA9IGFsbFJvd0hlYWRlcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGsgPSAwOyBrIDwgcm93Q291bnQ7ICsraykgewotICAgICAgICAgICAgcGFpcjxpbnQsIGlu
dD4gcm93UmFuZ2U7Ci0gICAgICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsID0g
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KGFsbFJvd0hlYWRlcnMuYXQoayku
Z2V0KCkpOwotICAgICAgICAgICAgY2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7Ci0gICAg
ICAgICAgICBpZiAocm93UmFuZ2UuZmlyc3QgPD0gcm93ICYmIHJvdyA8IHJvd1JhbmdlLmZpcnN0
ICsgcm93UmFuZ2Uuc2Vjb25kKQotICAgICAgICAgICAgICAgIHJldHVybiBhbGxSb3dIZWFkZXJz
W2tdLT53cmFwcGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0
YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jYXB0aW9uKEF0a1Rh
YmxlKiB0YWJsZSkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUo
dGFibGUpOwotICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
IHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGFjY1RhYmxlLT5ub2RlKCk7Ci0gICAgICAgIGlmIChu
b2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykpIHsKLSAgICAgICAg
ICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlRWxlbWVudCo+KG5vZGUpLT5jYXB0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoY2FwdGlvbikK
LSAgICAgICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Zmlyc3RBY2Nlc3Np
YmxlT2JqZWN0RnJvbU5vZGUoY2FwdGlvbi0+cmVuZGVyZXIoKS0+bm9kZSgpKS0+d3JhcHBlcigp
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgZ2No
YXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZGVzY3JpcHRpb24oQXRrVGFi
bGUqIHRhYmxlLCBnaW50IGNvbHVtbikKLXsKLSAgICBBdGtPYmplY3QqIGNvbHVtbkhlYWRlciA9
IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcih0YWJsZSwgY29sdW1uKTsKLSAgICBpZiAoY29s
dW1uSGVhZGVyICYmIEFUS19JU19URVhUKGNvbHVtbkhlYWRlcikpCi0gICAgICAgIHJldHVybiB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKGNvbHVtbkhlYWRlciksIDAs
IC0xKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9h
Y2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfZGVzY3JpcHRpb24oQXRrVGFibGUqIHRhYmxlLCBnaW50
IHJvdykKLXsKLSAgICBBdGtPYmplY3QqIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hl
YWRlcih0YWJsZSwgcm93KTsKLSAgICBpZiAocm93SGVhZGVyICYmIEFUS19JU19URVhUKHJvd0hl
YWRlcikpCi0gICAgICAgIHJldHVybiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFU
S19URVhUKHJvd0hlYWRlciksIDAsIC0xKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMg
dm9pZCBhdGtfdGFibGVfaW50ZXJmYWNlX2luaXQoQXRrVGFibGVJZmFjZSogaWZhY2UpCi17Ci0g
ICAgaWZhY2UtPnJlZl9hdCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX3JlZl9hdDsKLSAgICBp
ZmFjZS0+Z2V0X2luZGV4X2F0ID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2luZGV4X2F0
OwotICAgIGlmYWNlLT5nZXRfY29sdW1uX2F0X2luZGV4ID0gd2Via2l0X2FjY2Vzc2libGVfdGFi
bGVfZ2V0X2NvbHVtbl9hdF9pbmRleDsKLSAgICBpZmFjZS0+Z2V0X3Jvd19hdF9pbmRleCA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfYXRfaW5kZXg7Ci0gICAgaWZhY2UtPmdldF9u
X2NvbHVtbnMgPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfbl9jb2x1bW5zOwotICAgIGlm
YWNlLT5nZXRfbl9yb3dzID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X25fcm93czsKLSAg
ICBpZmFjZS0+Z2V0X2NvbHVtbl9leHRlbnRfYXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9n
ZXRfY29sdW1uX2V4dGVudF9hdDsKLSAgICBpZmFjZS0+Z2V0X3Jvd19leHRlbnRfYXQgPSB3ZWJr
aXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2V4dGVudF9hdDsKLSAgICBpZmFjZS0+Z2V0X2Nv
bHVtbl9oZWFkZXIgPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2hlYWRlcjsK
LSAgICBpZmFjZS0+Z2V0X3Jvd19oZWFkZXIgPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRf
cm93X2hlYWRlcjsKLSAgICBpZmFjZS0+Z2V0X2NhcHRpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV90
YWJsZV9nZXRfY2FwdGlvbjsKLSAgICBpZmFjZS0+Z2V0X2NvbHVtbl9kZXNjcmlwdGlvbiA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZGVzY3JpcHRpb247Ci0gICAgaWZhY2Ut
PmdldF9yb3dfZGVzY3JpcHRpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2Rl
c2NyaXB0aW9uOwotfQotCi1zdGF0aWMgQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlw
ZXJ0ZXh0R2V0TGluayhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCwgZ2ludCBpbmRleCkKLXsKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRy
ZW4gPSBjb3JlKGh5cGVydGV4dCktPmNoaWxkcmVuKCk7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID49IGNoaWxkcmVuLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBnaW50IGN1cnJlbnRMaW5rID0gLTE7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmVDaGlsZCA9IGNoaWxkcmVuLmF0KGkpLmdldCgpOwotICAgICAgICBpZiAo
IWNvcmVDaGlsZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAgICAgICBBdGtP
YmplY3QqIGF4T2JqZWN0ID0gY29yZUNoaWxkLT53cmFwcGVyKCk7Ci0gICAgICAgICAgICBpZiAo
IWF4T2JqZWN0IHx8ICFBVEtfSVNfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBjdXJyZW50TGluaysrOwotICAgICAgICAg
ICAgaWYgKGluZGV4ICE9IGN1cnJlbnRMaW5rKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICByZXR1cm4gYXRrX2h5cGVybGlua19pbXBsX2dldF9oeXBlcmxpbmsoQVRL
X0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldE5MaW5r
cyhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjb3JlKGh5cGVydGV4dCktPmNo
aWxkcmVuKCk7Ci0gICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgZ2ludCBsaW5rc0ZvdW5kID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNo
aWxkcmVuLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVD
aGlsZCA9IGNoaWxkcmVuLmF0KGkpLmdldCgpOwotICAgICAgICBpZiAoIWNvcmVDaGlsZC0+YWNj
ZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAgICAgICBBdGtPYmplY3QqIGF4T2JqZWN0
ID0gY29yZUNoaWxkLT53cmFwcGVyKCk7Ci0gICAgICAgICAgICBpZiAoYXhPYmplY3QgJiYgQVRL
X0lTX0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSkKLSAgICAgICAgICAgICAgICBsaW5rc0ZvdW5k
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGlua3NGb3VuZDsKLX0KLQotc3Rh
dGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRleChBdGtIeXBlcnRl
eHQqIGh5cGVydGV4dCwgZ2ludCBjaGFySW5kZXgpCi17Ci0gICAgc2l6ZV90IGxpbmtzQ291bnQg
PSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKGh5cGVydGV4dCk7Ci0gICAgaWYg
KCFsaW5rc0NvdW50KQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpbmtzQ291bnQ7IGkrKykgewotICAgICAgICBBdGtIeXBlcmxpbmsqIGh5cGVybGlu
ayA9IEFUS19IWVBFUkxJTksod2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmsoaHlwZXJ0
ZXh0LCBpKSk7Ci0gICAgICAgIGdpbnQgc3RhcnRJbmRleCA9IGF0a19oeXBlcmxpbmtfZ2V0X3N0
YXJ0X2luZGV4KGh5cGVybGluayk7Ci0gICAgICAgIGdpbnQgZW5kSW5kZXggPSBhdGtfaHlwZXJs
aW5rX2dldF9lbmRfaW5kZXgoaHlwZXJsaW5rKTsKLQotICAgICAgICAvLyBDaGVjayBpZiB0aGUg
Y2hhciBpbmRleCBpbiB0aGUgbGluaydzIG9mZnNldCByYW5nZQotICAgICAgICBpZiAoc3RhcnRJ
bmRleCA8PSBjaGFySW5kZXggJiYgY2hhckluZGV4IDwgZW5kSW5kZXgpCi0gICAgICAgICAgICBy
ZXR1cm4gaTsKLSAgICB9Ci0KLSAgICAvLyBOb3QgZm91bmQgaWYgcmVhY2hlZAotICAgIHJldHVy
biAtMTsKLX0KLQotc3RhdGljIHZvaWQgYXRrSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdChBdGtIeXBl
cnRleHRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF9saW5rID0gd2Via2l0QWNjZXNz
aWJsZUh5cGVydGV4dEdldExpbms7Ci0gICAgaWZhY2UtPmdldF9uX2xpbmtzID0gd2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEdldE5MaW5rczsKLSAgICBpZmFjZS0+Z2V0X2xpbmtfaW5kZXggPSB3
ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4OwotfQotCi1zdGF0aWMgQXRrSHlw
ZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluayhBdGtIeXBl
cmxpbmtJbXBsKiBoeXBlcmxpbmspCi17Ci0gICAgQXRrSHlwZXJsaW5rKiBoeXBlcmxpbmtPYmpl
Y3QgPSBBVEtfSFlQRVJMSU5LKGdfb2JqZWN0X2dldF9xZGF0YShHX09CSkVDVChoeXBlcmxpbmsp
LCBoeXBlcmxpbmtPYmplY3RRdWFyaykpOwotICAgIGlmICghaHlwZXJsaW5rT2JqZWN0KSB7Ci0g
ICAgICAgIGh5cGVybGlua09iamVjdCA9IEFUS19IWVBFUkxJTksod2Via2l0QWNjZXNzaWJsZUh5
cGVybGlua05ldyhoeXBlcmxpbmspKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JK
RUNUKGh5cGVybGluayksIGh5cGVybGlua09iamVjdFF1YXJrLCBoeXBlcmxpbmtPYmplY3QpOwot
ICAgIH0KLSAgICByZXR1cm4gaHlwZXJsaW5rT2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCBhdGtI
eXBlcmxpbmtJbXBsSW50ZXJmYWNlSW5pdChBdGtIeXBlcmxpbmtJbXBsSWZhY2UqIGlmYWNlKQot
ewotICAgIGlmYWNlLT5nZXRfaHlwZXJsaW5rID0gd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0lt
cGxHZXRIeXBlcmxpbms7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciogZG9jdW1lbnRBdHRyaWJ1
dGVWYWx1ZShBdGtEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGUpCi17
Ci0gICAgRG9jdW1lbnQqIGNvcmVEb2N1bWVudCA9IGNvcmUoZG9jdW1lbnQpLT5kb2N1bWVudCgp
OwotICAgIGlmICghY29yZURvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFN0cmlu
ZyB2YWx1ZSA9IFN0cmluZygpOwotICAgIGlmICghZ19hc2NpaV9zdHJjYXNlY21wKGF0dHJpYnV0
ZSwgIkRvY1R5cGUiKSAmJiBjb3JlRG9jdW1lbnQtPmRvY3R5cGUoKSkKLSAgICAgICAgdmFsdWUg
PSBjb3JlRG9jdW1lbnQtPmRvY3R5cGUoKS0+bmFtZSgpOwotICAgIGVsc2UgaWYgKCFnX2FzY2lp
X3N0cmNhc2VjbXAoYXR0cmlidXRlLCAiRW5jb2RpbmciKSkKLSAgICAgICAgdmFsdWUgPSBjb3Jl
RG9jdW1lbnQtPmNoYXJzZXQoKTsKLSAgICBlbHNlIGlmICghZ19hc2NpaV9zdHJjYXNlY21wKGF0
dHJpYnV0ZSwgIlVSSSIpKQotICAgICAgICB2YWx1ZSA9IGNvcmVEb2N1bWVudC0+ZG9jdW1lbnRV
UkkoKTsKLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHJldHVyblN0
cmluZyh2YWx1ZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyKiB3
ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVlKEF0a0RvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZSkKLXsKLSAgICByZXR1cm4gZG9jdW1l
bnRBdHRyaWJ1dGVWYWx1ZShkb2N1bWVudCwgYXR0cmlidXRlKTsKLX0KLQotc3RhdGljIEF0a0F0
dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZXMoQXRr
RG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
ID0gMDsKLSAgICBjb25zdCBnY2hhciogYXR0cmlidXRlcyBbXSA9IHsiRG9jVHlwZSIsICJFbmNv
ZGluZyIsICJVUkkifTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVO
VFMoYXR0cmlidXRlcyk7IGkrKykgewotICAgICAgICBjb25zdCBnY2hhciogdmFsdWUgPSBkb2N1
bWVudEF0dHJpYnV0ZVZhbHVlKGRvY3VtZW50LCBhdHRyaWJ1dGVzW2ldKTsKLSAgICAgICAgaWYg
KHZhbHVlKQotICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkQXR0cmlidXRlVG9TZXQoYXR0
cmlidXRlU2V0LCBhdHRyaWJ1dGVzW2ldLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGF0
dHJpYnV0ZVNldDsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9k
b2N1bWVudF9nZXRfbG9jYWxlKEF0a0RvY3VtZW50KiBkb2N1bWVudCkKLXsKLQotICAgIC8vIFRP
RE86IFNob3VsZCB3ZSBmYWxsIGJhY2sgb24gbGFuZyB4bWw6bGFuZyB3aGVuIHRoZSBmb2xsb3dp
bmcgY29tZXMgdXAgZW1wdHk/Ci0gICAgU3RyaW5nIGxhbmd1YWdlID0gY29yZShkb2N1bWVudCkt
Pmxhbmd1YWdlKCk7Ci0gICAgaWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biByZXR1cm5TdHJpbmcobGFuZ3VhZ2UpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2
b2lkIGF0a19kb2N1bWVudF9pbnRlcmZhY2VfaW5pdChBdGtEb2N1bWVudElmYWNlKiBpZmFjZSkK
LXsKLSAgICBpZmFjZS0+Z2V0X2RvY3VtZW50X2F0dHJpYnV0ZV92YWx1ZSA9IHdlYmtpdF9hY2Nl
c3NpYmxlX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWU7Ci0gICAgaWZhY2UtPmdldF9kb2N1
bWVudF9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0
ZXM7Ci0gICAgaWZhY2UtPmdldF9kb2N1bWVudF9sb2NhbGUgPSB3ZWJraXRfYWNjZXNzaWJsZV9k
b2N1bWVudF9nZXRfbG9jYWxlOwotfQotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2libGVW
YWx1ZUdldEN1cnJlbnRWYWx1ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQotewot
ICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVlKSk7Ci0gICAgZ192YWx1ZV9pbml0
KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7Ci0gICAgZ192YWx1ZV9zZXRfZG91YmxlKGdWYWx1ZSwg
Y29yZSh2YWx1ZSktPnZhbHVlRm9yUmFuZ2UoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEFj
Y2Vzc2libGVWYWx1ZUdldE1heGltdW1WYWx1ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1Zh
bHVlKQotewotICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVlKSk7Ci0gICAgZ192
YWx1ZV9pbml0KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7Ci0gICAgZ192YWx1ZV9zZXRfZG91Ymxl
KGdWYWx1ZSwgY29yZSh2YWx1ZSktPm1heFZhbHVlRm9yUmFuZ2UoKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1WYWx1ZShBdGtWYWx1ZSogdmFsdWUs
IEdWYWx1ZSogZ1ZhbHVlKQotewotICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVl
KSk7Ci0gICAgZ192YWx1ZV9pbml0KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7Ci0gICAgZ192YWx1
ZV9zZXRfZG91YmxlKGdWYWx1ZSwgY29yZSh2YWx1ZSktPm1pblZhbHVlRm9yUmFuZ2UoKSk7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVTZXRDdXJyZW50VmFsdWUo
QXRrVmFsdWUqIHZhbHVlLCBjb25zdCBHVmFsdWUqIGdWYWx1ZSkKLXsKLSAgICBpZiAoIUdfVkFM
VUVfSE9MRFNfRE9VQkxFKGdWYWx1ZSkgJiYgIUdfVkFMVUVfSE9MRFNfSU5UKGdWYWx1ZSkpCi0g
ICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QgPSBjb3JlKHZhbHVlKTsKLSAgICBpZiAoIWNvcmVPYmplY3QtPmNhblNldFZhbHVlQXR0cmli
dXRlKCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGlmIChHX1ZBTFVFX0hPTERTX0RP
VUJMRShnVmFsdWUpKQotICAgICAgICBjb3JlT2JqZWN0LT5zZXRWYWx1ZShTdHJpbmc6Om51bWJl
cihnX3ZhbHVlX2dldF9kb3VibGUoZ1ZhbHVlKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29yZU9i
amVjdC0+c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoZ192YWx1ZV9nZXRfaW50KGdWYWx1ZSkpKTsK
LQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFs
dWVHZXRNaW5pbXVtSW5jcmVtZW50KEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCi17
Ci0gICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihHVmFsdWUpKTsKLSAgICBnX3ZhbHVlX2lu
aXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsKLQotICAgIC8vIFRoZXJlJ3Mgbm90IHN1Y2ggYSB0
aGluZyBpbiB0aGUgV0FJLUFSSUEgc3BlY2lmaWNhdGlvbiwgdGh1cyByZXR1cm4gemVyby4KLSAg
ICBnX3ZhbHVlX3NldF9kb3VibGUoZ1ZhbHVlLCAwLjApOwotfQotCi1zdGF0aWMgdm9pZCBhdGtW
YWx1ZUludGVyZmFjZUluaXQoQXRrVmFsdWVJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdl
dF9jdXJyZW50X3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlOwot
ICAgIGlmYWNlLT5nZXRfbWF4aW11bV92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1h
eGltdW1WYWx1ZTsKLSAgICBpZmFjZS0+Z2V0X21pbmltdW1fdmFsdWUgPSB3ZWJraXRBY2Nlc3Np
YmxlVmFsdWVHZXRNaW5pbXVtVmFsdWU7Ci0gICAgaWZhY2UtPnNldF9jdXJyZW50X3ZhbHVlID0g
d2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVlOwotICAgIGlmYWNlLT5nZXRfbWlu
aW11bV9pbmNyZW1lbnQgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtSW5jcmVtZW50
OwotfQotCi1zdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gQXRrSW50ZXJmYWNlc0luaXRGdW5j
dGlvbnNbXSA9IHsKLSAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfYWN0aW9uX2ludGVyZmFj
ZV9pbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50
ZXJmYWNlSW5pdEZ1bmMpYXRrX3NlbGVjdGlvbl9pbnRlcmZhY2VfaW5pdCwKLSAgICAgKEdJbnRl
cmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAotICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a19l
ZGl0YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVu
YykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX3RleHRfaW50ZXJmYWNlX2lu
aXQsCi0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKLSAgICB7KEdJbnRlcmZh
Y2VJbml0RnVuYylhdGtfY29tcG9uZW50X2ludGVyZmFjZV9pbml0LAotICAgICAoR0ludGVyZmFj
ZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX2ltYWdl
X2ludGVyZmFjZV9pbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCi0g
ICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX3RhYmxlX2ludGVyZmFjZV9pbml0LAotICAgICAo
R0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMp
YXRrSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdCwKLSAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMp
IDAsIDB9LAotICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a0h5cGVybGlua0ltcGxJbnRlcmZh
Y2VJbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50
ZXJmYWNlSW5pdEZ1bmMpYXRrX2RvY3VtZW50X2ludGVyZmFjZV9pbml0LAotICAgICAoR0ludGVy
ZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrVmFs
dWVJbnRlcmZhY2VJbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0KLX07
Ci0KLWVudW0gV0FJVHlwZSB7Ci0gICAgV0FJX0FDVElPTiwKLSAgICBXQUlfU0VMRUNUSU9OLAot
ICAgIFdBSV9FRElUQUJMRV9URVhULAotICAgIFdBSV9URVhULAotICAgIFdBSV9DT01QT05FTlQs
Ci0gICAgV0FJX0lNQUdFLAotICAgIFdBSV9UQUJMRSwKLSAgICBXQUlfSFlQRVJURVhULAotICAg
IFdBSV9IWVBFUkxJTkssCi0gICAgV0FJX0RPQ1VNRU5ULAotICAgIFdBSV9WQUxVRSwKLX07Ci0K
LXN0YXRpYyBHVHlwZSBHZXRBdGtJbnRlcmZhY2VUeXBlRnJvbVdBSVR5cGUoV0FJVHlwZSB0eXBl
KQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgV0FJX0FDVElPTjoKLSAgICAgICAg
cmV0dXJuIEFUS19UWVBFX0FDVElPTjsKLSAgICBjYXNlIFdBSV9TRUxFQ1RJT046Ci0gICAgICAg
IHJldHVybiBBVEtfVFlQRV9TRUxFQ1RJT047Ci0gICAgY2FzZSBXQUlfRURJVEFCTEVfVEVYVDoK
LSAgICAgICAgcmV0dXJuIEFUS19UWVBFX0VESVRBQkxFX1RFWFQ7Ci0gICAgY2FzZSBXQUlfVEVY
VDoKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX1RFWFQ7Ci0gICAgY2FzZSBXQUlfQ09NUE9ORU5U
OgotICAgICAgICByZXR1cm4gQVRLX1RZUEVfQ09NUE9ORU5UOwotICAgIGNhc2UgV0FJX0lNQUdF
OgotICAgICAgICByZXR1cm4gQVRLX1RZUEVfSU1BR0U7Ci0gICAgY2FzZSBXQUlfVEFCTEU6Ci0g
ICAgICAgIHJldHVybiBBVEtfVFlQRV9UQUJMRTsKLSAgICBjYXNlIFdBSV9IWVBFUlRFWFQ6Ci0g
ICAgICAgIHJldHVybiBBVEtfVFlQRV9IWVBFUlRFWFQ7Ci0gICAgY2FzZSBXQUlfSFlQRVJMSU5L
OgotICAgICAgICByZXR1cm4gQVRLX1RZUEVfSFlQRVJMSU5LX0lNUEw7Ci0gICAgY2FzZSBXQUlf
RE9DVU1FTlQ6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9ET0NVTUVOVDsKLSAgICBjYXNlIFdB
SV9WQUxVRToKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX1ZBTFVFOwotICAgIH0KLQotICAgIHJl
dHVybiBHX1RZUEVfSU5WQUxJRDsKLX0KLQotc3RhdGljIGd1aW50MTYgZ2V0SW50ZXJmYWNlTWFz
a0Zyb21PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKLXsKLSAgICBndWlu
dDE2IGludGVyZmFjZU1hc2sgPSAwOwotCi0gICAgLy8gQ29tcG9uZW50IGludGVyZmFjZSBpcyBh
bHdheXMgc3VwcG9ydGVkCi0gICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9DT01QT05FTlQ7
Ci0KLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gY29yZU9iamVjdC0+cm9sZVZhbHVlKCk7
Ci0KLSAgICAvLyBBY3Rpb24KLSAgICAvLyBBcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0
a0FjdGlvbiBpbnRlcmZhY2UgaXMgYSB2ZXJ5Ci0gICAgLy8gYmFzaWMgb25lIChqdXN0IHJlbGF5
cyBpbiBleGVjdXRpbmcgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBlYWNoCi0gICAgLy8gb2JqZWN0
LCBhbmQgb25seSBzdXBwb3J0cyBoYXZpbmcgb25lIGFjdGlvbiBwZXIgb2JqZWN0KSwgaXQgaXMK
LSAgICAvLyBiZXR0ZXIganVzdCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgZm9yIGV2ZXJ5
IGluc3RhbmNlIG9mCi0gICAgLy8gdGhlIFdlYktpdEFjY2Vzc2libGUgY2xhc3MgYW5kIGxldCBX
ZWJDb3JlIGRlY2lkZSB3aGF0IHRvIGRvLgotICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlf
QUNUSU9OOwotCi0gICAgLy8gU2VsZWN0aW9uCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzTGlzdEJv
eCgpIHx8IGNvcmVPYmplY3QtPmlzTWVudUxpc3QoKSkKLSAgICAgICAgaW50ZXJmYWNlTWFzayB8
PSAxIDw8IFdBSV9TRUxFQ1RJT047Ci0KLSAgICAvLyBHZXQgcmVuZGVyZXIgaWYgYXZhaWxhYmxl
LgotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAwOwotICAgIGlmIChjb3JlT2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmVuZGVyZXIgPSBjb3JlT2Jq
ZWN0LT5yZW5kZXJlcigpOwotCi0gICAgLy8gSHlwZXJsaW5rIChsaW5rcyBhbmQgZW1iZWRkZWQg
b2JqZWN0cykuCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzTGluaygpIHx8IChyZW5kZXJlciAmJiBy
ZW5kZXJlci0+aXNSZXBsYWNlZCgpKSkKLSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdB
SV9IWVBFUkxJTks7Ci0KLSAgICAvLyBUZXh0ICYgRWRpdGFibGUgVGV4dAotICAgIGlmIChyb2xl
ID09IFN0YXRpY1RleHRSb2xlIHx8IGNvcmVPYmplY3QtPmlzTWVudUxpc3RPcHRpb24oKSkKLSAg
ICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgICAgICBpbnRlcmZh
Y2VNYXNrIHw9IDEgPDwgV0FJX1RFWFQ7Ci0gICAgICAgICAgICBpZiAoIWNvcmVPYmplY3QtPmlz
UmVhZE9ubHkoKSkKLSAgICAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0VE
SVRBQkxFX1RFWFQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocm9sZSAhPSBU
YWJsZVJvbGUpIHsKLSAgICAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0hZ
UEVSVEVYVDsKLSAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmNoaWxk
cmVuSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBX
QUlfVEVYVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIHRoZSBURVhUIGlu
dGVyZmFjZSBmb3IgbGlzdCBpdGVtcyB3aG9zZQotICAgICAgICAgICAgLy8gZmlyc3QgYWNjZXNz
aWJsZSBjaGlsZCBoYXMgYSB0ZXh0IHJlbmRlcmVyCi0gICAgICAgICAgICBpZiAocm9sZSA9PSBM
aXN0SXRlbVJvbGUpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjb3JlT2JqZWN0LT5jaGlsZHJlbigp
OwotICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhSZW5kZXJDaGlsZCA9IGNoaWxkcmVuLmF0KDAp
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IGdldEludGVyZmFj
ZU1hc2tGcm9tT2JqZWN0KGF4UmVuZGVyQ2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEltYWdlCi0gICAgaWYgKGNvcmVP
YmplY3QtPmlzSW1hZ2UoKSkKLSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9JTUFH
RTsKLQotICAgIC8vIFRhYmxlCi0gICAgaWYgKHJvbGUgPT0gVGFibGVSb2xlKQotICAgICAgICBp
bnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1RBQkxFOwotCi0gICAgLy8gRG9jdW1lbnQKLSAgICBp
ZiAocm9sZSA9PSBXZWJBcmVhUm9sZSkKLSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdB
SV9ET0NVTUVOVDsKLQotICAgIC8vIFZhbHVlCi0gICAgaWYgKHJvbGUgPT0gU2xpZGVyUm9sZSkK
LSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9WQUxVRTsKLQotICAgIHJldHVybiBp
bnRlcmZhY2VNYXNrOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogZ2V0VW5pcXVlQWNjZXNzaWJp
bGl0eVR5cGVOYW1lKGd1aW50MTYgaW50ZXJmYWNlTWFzaykKLXsKLSNkZWZpbmUgV0FJX1RZUEVf
TkFNRV9MRU4gKDMwKSAvKiBFbm91Z2ggZm9yIHByZWZpeCArIDUgaGV4IGNoYXJhY3RlcnMgKG1h
eCkgKi8KLSAgICBzdGF0aWMgY2hhciBuYW1lW1dBSV9UWVBFX05BTUVfTEVOICsgMV07Ci0KLSAg
ICBnX3NwcmludGYobmFtZSwgIldBSVR5cGUleCIsIGludGVyZmFjZU1hc2spOwotICAgIG5hbWVb
V0FJX1RZUEVfTkFNRV9MRU5dID0gJ1wwJzsKLQotICAgIHJldHVybiBuYW1lOwotfQotCi1zdGF0
aWMgR1R5cGUgZ2V0QWNjZXNzaWJpbGl0eVR5cGVGcm9tT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QpCi17Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyB0eXBlSW5mbyA9
IHsKLSAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGVDbGFzcyksCi0gICAgICAgIChHQmFz
ZUluaXRGdW5jKSAwLAotICAgICAgICAoR0Jhc2VGaW5hbGl6ZUZ1bmMpIDAsCi0gICAgICAgIChH
Q2xhc3NJbml0RnVuYykgMCwKLSAgICAgICAgKEdDbGFzc0ZpbmFsaXplRnVuYykgMCwKLSAgICAg
ICAgMCwgLyogY2xhc3MgZGF0YSAqLwotICAgICAgICBzaXplb2YoV2ViS2l0QWNjZXNzaWJsZSks
IC8qIGluc3RhbmNlIHNpemUgKi8KLSAgICAgICAgMCwgLyogbmIgcHJlYWxsb2NzICovCi0gICAg
ICAgIChHSW5zdGFuY2VJbml0RnVuYykgMCwKLSAgICAgICAgMCAvKiB2YWx1ZSB0YWJsZSAqLwot
ICAgIH07Ci0KLSAgICBndWludDE2IGludGVyZmFjZU1hc2sgPSBnZXRJbnRlcmZhY2VNYXNrRnJv
bU9iamVjdChjb3JlT2JqZWN0KTsKLSAgICBjb25zdCBjaGFyKiBhdGtUeXBlTmFtZSA9IGdldFVu
aXF1ZUFjY2Vzc2liaWxpdHlUeXBlTmFtZShpbnRlcmZhY2VNYXNrKTsKLSAgICBHVHlwZSB0eXBl
ID0gZ190eXBlX2Zyb21fbmFtZShhdGtUeXBlTmFtZSk7Ci0gICAgaWYgKHR5cGUpCi0gICAgICAg
IHJldHVybiB0eXBlOwotCi0gICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoV0VCS0lU
X1RZUEVfQUNDRVNTSUJMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdGtU
eXBlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZUluZm8sIEdU
eXBlRmxhZ3MoMCkpOwotICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoQXRr
SW50ZXJmYWNlc0luaXRGdW5jdGlvbnMpOyBpKyspIHsKLSAgICAgICAgaWYgKGludGVyZmFjZU1h
c2sgJiAoMSA8PCBpKSkKLSAgICAgICAgICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEF0a0ludGVy
ZmFjZVR5cGVGcm9tV0FJVHlwZShzdGF0aWNfY2FzdDxXQUlUeXBlPihpKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25z
W2ldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHlwZTsKLX0KLQotV2ViS2l0QWNjZXNzaWJsZSog
d2Via2l0X2FjY2Vzc2libGVfbmV3KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17
Ci0gICAgR1R5cGUgdHlwZSA9IGdldEFjY2Vzc2liaWxpdHlUeXBlRnJvbU9iamVjdChjb3JlT2Jq
ZWN0KTsKLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdf
b2JqZWN0X25ldyh0eXBlLCAwKSk7Ci0KLSAgICBhdGtfb2JqZWN0X2luaXRpYWxpemUob2JqZWN0
LCBjb3JlT2JqZWN0KTsKLQotICAgIHJldHVybiBXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpOwot
fQotCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYWNjZXNzaWJp
bGl0eV9vYmplY3QoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKLXsKLSAgICByZXR1cm4g
YWNjZXNzaWJsZS0+bV9vYmplY3Q7Ci19Ci0KLXZvaWQgd2Via2l0X2FjY2Vzc2libGVfZGV0YWNo
KFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCi17Ci0gICAgQVNTRVJUKGFjY2Vzc2libGUt
Pm1fb2JqZWN0KTsKLQotICAgIGlmIChjb3JlKGFjY2Vzc2libGUpLT5yb2xlVmFsdWUoKSA9PSBX
ZWJBcmVhUm9sZSkKLSAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGFjY2Vzc2libGUsICJz
dGF0ZS1jaGFuZ2UiLCAiZGVmdW5jdCIsIHRydWUpOwotCi0gICAgLy8gV2UgcmVwbGFjZSB0aGUg
V2ViQ29yZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdpdGggYSBmYWxsYmFjayBvYmplY3QgdGhhdAot
ICAgIC8vIHByb3ZpZGVzIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIHJlcGV0aXRp
dmUgbnVsbC1jaGVja2luZyBhZnRlcgotICAgIC8vIGRldGFjaG1lbnQuCi0gICAgYWNjZXNzaWJs
ZS0+bV9vYmplY3QgPSBmYWxsYmFja09iamVjdCgpOwotfQotCi1BdGtPYmplY3QqIHdlYmtpdF9h
Y2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJs
ZSkKLXsKLSAgICBpZiAoIWFjY2Vzc2libGUtPm1fb2JqZWN0KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBmb2N1c2VkT2JqID0gYWNjZXNzaWJs
ZS0+bV9vYmplY3QtPmZvY3VzZWRVSUVsZW1lbnQoKTsKLSAgICBpZiAoIWZvY3VzZWRPYmopCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGZvY3VzZWRPYmotPndyYXBwZXIoKTsKLX0K
LQotQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25v
cmVkKEFjY2Vzc2liaWxpdHlPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQpCi17
Ci0gICAgLy8gSW5kaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBib2d1cyBoYXMgdHJhbnNwaXJlZC4K
LSAgICBvZmZzZXQgPSAtMTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlZmVyZW5jZU9i
amVjdC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIE5vZGUqIGZvY3VzZWROb2RlID0gcmVmZXJlbmNlT2JqZWN0LT5zZWxlY3Rpb24oKS5l
bmQoKS5jb250YWluZXJOb2RlKCk7Ci0gICAgaWYgKCFmb2N1c2VkTm9kZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBSZW5kZXJPYmplY3QqIGZvY3VzZWRSZW5kZXJlciA9IGZvY3VzZWROb2Rl
LT5yZW5kZXJlcigpOwotICAgIGlmICghZm9jdXNlZFJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRPYmplY3QgPSBkb2N1bWVudC0+
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2VkUmVuZGVyZXIpOwotICAgIGlmICgh
Zm9jdXNlZE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBMb29rIGZvciB0aGUg
YWN0dWFsIChub3QgaWdub3JpbmcgYWNjZXNzaWJpbGl0eSkgc2VsZWN0ZWQgb2JqZWN0LgotICAg
IGlmIChmb2N1c2VkT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAgICAgIGZv
Y3VzZWRPYmplY3QgPSBmb2N1c2VkT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAg
ICBpZiAoIWZvY3VzZWRPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRG9uJ3Qg
aWdub3JlIGxpbmtzIGlmIHRoZSBvZmZzZXQgaXMgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGxpbmsu
Ci0gICAgaWYgKCFyZWZlcmVuY2VPYmplY3QtPmlzTGluaygpICYmIGZvY3VzZWRPYmplY3QtPmlz
TGluaygpKQotICAgICAgICBmb2N1c2VkT2JqZWN0ID0gZm9jdXNlZE9iamVjdC0+cGFyZW50T2Jq
ZWN0VW5pZ25vcmVkKCk7Ci0gICAgaWYgKCFmb2N1c2VkT2JqZWN0KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IDA7Ci0gICAgaWYgKGZvY3VzZWRPYmplY3QgIT0g
cmVmZXJlbmNlT2JqZWN0IHx8IGZvY3VzZWRPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewotICAg
ICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgZmlyc3QgY2hpbGQncyBub2RlIG9mIHRoZSByZWZl
cmVuY2UKLSAgICAgICAgLy8gb2JqZWN0IGFzIHRoZSBzdGFydCBwb2ludCB0byBjYWxjdWxhdGUg
dGhlIGNhcmV0IG9mZnNldAotICAgICAgICAvLyBiZWNhdXNlIHdlIHdhbnQgaXQgdG8gYmUgcmVs
YXRpdmUgdG8gdGhlIG9iamVjdCBvZgotICAgICAgICAvLyByZWZlcmVuY2UsIG5vdCBqdXN0IHRv
IHRoZSBmb2N1c2VkIG9iamVjdCAod2hpY2ggY291bGQgaGF2ZQotICAgICAgICAvLyBwcmV2aW91
cyBzaWJsaW5ncyB3aGljaCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IHRvbykuCi0gICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Rmlyc3RDaGlsZCA9IHJlZmVyZW5jZU9iamVjdC0+
Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAoYXhGaXJzdENoaWxkKQotICAgICAgICAgICAgc3Rh
cnROb2RlID0gYXhGaXJzdENoaWxkLT5ub2RlKCk7Ci0gICAgfQotICAgIGlmICghc3RhcnROb2Rl
KQotICAgICAgICBzdGFydE5vZGUgPSBmb2N1c2VkT2JqZWN0LT5ub2RlKCk7Ci0KLSAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9u
SW5Ob2RlKHN0YXJ0Tm9kZSksIERPV05TVFJFQU0pOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQ
b3NpdGlvbiA9IGZvY3VzZWRPYmplY3QtPnNlbGVjdGlvbigpLnZpc2libGVFbmQoKTsKLQotICAg
IGlmIChzdGFydFBvc2l0aW9uID09IGVuZFBvc2l0aW9uKQotICAgICAgICBvZmZzZXQgPSAwOwot
ICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSkgewotICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLnBy
ZXZpb3VzKCkpOwotICAgICAgICBvZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJh
bmdlLmdldCgpLCB0cnVlKSArIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IG1ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgICAg
IG9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOwot
ICAgIH0KLQotICAgIHJldHVybiBmb2N1c2VkT2JqZWN0OwotfQotCi0jZW5kaWYgLy8gSEFWRShB
Q0NFU1NJQklMSVRZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGM1NmYzMmZhOWNkZTM3MjE4YzlhNTA1MGI1MzE2ZDAxMDQwMmYx
OTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsu
aAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGtfaAotI2RlZmluZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckF0a19oCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OwotfQotCi1HX0JFR0lOX0RFQ0xT
Ci0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfQUNDRVNTSUJMRSAgICAgICAgICAgICAgICAgICh3ZWJr
aXRfYWNjZXNzaWJsZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgV0VCS0lUX0FDQ0VTU0lCTEUob2Jq
KSAgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdF
QktJVF9UWVBFX0FDQ0VTU0lCTEUsIFdlYktpdEFjY2Vzc2libGUpKQotI2RlZmluZSBXRUJLSVRf
QUNDRVNTSUJMRV9DTEFTUyhrbGFzcykgICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
ICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFLCBXZWJLaXRBY2Nlc3NpYmxlQ2xhc3Mp
KQotI2RlZmluZSBXRUJLSVRfSVNfQUNDRVNTSUJMRShvYmopICAgICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfQUNDRVNTSUJMRSkpCi0j
ZGVmaW5lIFdFQktJVF9JU19BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAgICAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUpKQotI2RlZmlu
ZSBXRUJLSVRfQUNDRVNTSUJMRV9HRVRfQ0xBU1Mob2JqKSAgICAgICAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFLCBXZWJLaXRBY2Nlc3Np
YmxlQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZSAgICAgICAgICAg
ICAgICBXZWJLaXRBY2Nlc3NpYmxlOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVD
bGFzcyAgICAgICAgICAgV2ViS2l0QWNjZXNzaWJsZUNsYXNzOwotCi1zdHJ1Y3QgX1dlYktpdEFj
Y2Vzc2libGUKLXsKLSAgICBBdGtPYmplY3QgcGFyZW50OwotICAgIFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3QqIG1fb2JqZWN0OwotfTsKLQotc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlQ2xh
c3MKLXsKLSAgICBBdGtPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSB3ZWJr
aXRfYWNjZXNzaWJsZV9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOwotCi1XZWJLaXRBY2Nl
c3NpYmxlKiB3ZWJraXRfYWNjZXNzaWJsZV9uZXcgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVfb2JqZWN0KTsKLQotV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogd2Via2l0
X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0IChXZWJLaXRBY2Nlc3NpYmxlKiBh
Y2Nlc3NpYmxlKTsKLQotdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2ggKFdlYktpdEFjY2Vz
c2libGUqIGFjY2Vzc2libGUpOwotCi1BdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9m
b2N1c2VkX2VsZW1lbnQoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSk7Ci0KLVdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3Jl
ZChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgaW50JiBvZmZzZXQpOwotCi1HX0VORF9E
RUNMUwotCi0jZW5kaWYgLy8gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGtfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5
cGVybGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmNwcAppbmRleCAyNmU3ZDRhM2M4YjE4ODY5YWVlY2VhMjRjMTdlMjg1
Y2E0NmU3NTljLi5lMDQ0ODIyNGY3MmRiYTI0ZmFhMjM1OWEzMjAyYmI3MzQ5NzIyNTc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SHlwZXJsaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcApAQCAtMjQsMTMgKzI0LDEzIEBACiAKICNpbmNsdWRl
ICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
I2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFw
cGVyQXRrLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIAogI2luY2x1ZGUgPGF0ay9hdGsu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVIeXBlcmxpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaAppbmRleCA5ZGY4MTlkYWVlMDBmMjA5ODgyZDhkMmUx
MWI4MTYwMTg5MTkxMWE3Li44MjA2MmY3OWU3NmY4YmMyN2VlMTAxMDY2Mjg3MTMyMzJjNzBhZmQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oCkBAIC0yMCw4ICsyMCw2IEBACiAjaWZuZGVmIFdl
YktpdEFjY2Vzc2libGVIeXBlcmxpbmtfaAogI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSHlwZXJs
aW5rX2gKIAotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCi0KICNp
bmNsdWRlIDxhdGsvYXRrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDRiYmJhMDQ5ODU2M2NkNjU2YzE3MjNhY2FkOWQ0
MmVkYjA5ZTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC0wLDAgKzEsMjc4MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQg
YXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2Rl
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKworI2lmIEhBVkUoQUNDRVNTSUJJTElU
WSkKKworI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
TGlzdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94LmgiCisjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUu
aCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgiCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVRhYmxlQ29sdW1uLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlUm93Lmgi
CisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR093blB0ci5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIklubGluZVRleHRCb3gu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgorI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNp
bmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgorI2luY2x1ZGUgPGxpYmdhaWwt
dXRpbC9nYWlsLXV0aWwuaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBHUXVhcmsgaHlwZXJsaW5rT2JqZWN0
UXVhcmsgPSAwOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogZmFsbGJhY2tPYmplY3Qo
KQoreworICAgIC8vIEZJWE1FOiBBbiBBWE9iamVjdENhY2hlIHdpdGggYSBEb2N1bWVudCBpcyBt
ZWFuaW5nbGVzcy4KKyAgICBzdGF0aWMgQVhPYmplY3RDYWNoZSogZmFsbGJhY2tDYWNoZSA9IG5l
dyBBWE9iamVjdENhY2hlKDApOworICAgIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QgPSAwOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIC8vIEZJWE1FOiB1c2luZyBmYWxs
YmFja0NhY2hlLT5nZXRPckNyZWF0ZShMaXN0Qm94T3B0aW9uUm9sZSkgaXMgYSBoYWNrCisgICAg
ICAgIG9iamVjdCA9IGZhbGxiYWNrQ2FjaGUtPmdldE9yQ3JlYXRlKExpc3RCb3hPcHRpb25Sb2xl
KTsKKyAgICAgICAgb2JqZWN0LT5yZWYoKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2JqZWN0Owor
fQorCisvLyBVc2VkIHRvIHByb3ZpZGUgY29uc3QgY2hhciogcmV0dXJucy4KK3N0YXRpYyBjb25z
dCBjaGFyKiByZXR1cm5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGljIENT
dHJpbmcgcmV0dXJuZWRTdHJpbmc7CisgICAgcmV0dXJuZWRTdHJpbmcgPSBzdHIudXRmOCgpOwor
ICAgIHJldHVybiByZXR1cm5lZFN0cmluZy5kYXRhKCk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCit7CisgICAgaWYg
KCFhY2Nlc3NpYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBhY2Nlc3NpYmxl
LT5tX29iamVjdDsKK30KKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRShvYmplY3QpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjb3JlKFdFQktJVF9BQ0NFU1NJQkxFKG9i
amVjdCkpOworfQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtBY3Rpb24q
IGFjdGlvbikKK3sKKyAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKGFjdGlvbikpOworfQorCitz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikK
K3sKKyAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHNlbGVjdGlvbikpOworfQorCitzdGF0aWMg
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0KQoreworICAgIHJldHVybiBj
b3JlKEFUS19PQkpFQ1QodGV4dCkpOworfQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZShBdGtFZGl0YWJsZVRleHQqIHRleHQpCit7CisgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVD
VCh0ZXh0KSk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0NvbXBv
bmVudCogY29tcG9uZW50KQoreworICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QoY29tcG9uZW50
KSk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0ltYWdlKiBpbWFn
ZSkKK3sKKyAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKGltYWdlKSk7Cit9CisKK3N0YXRpYyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RhYmxlKiB0YWJsZSkKK3sKKyAgICByZXR1cm4g
Y29yZShBVEtfT0JKRUNUKHRhYmxlKSk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0KQoreworICAgIHJldHVybiBjb3JlKEFUS19P
QkpFQ1QoaHlwZXJ0ZXh0KSk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
KEF0a0RvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKGRv
Y3VtZW50KSk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1ZhbHVl
KiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHZhbHVlKSk7Cit9CisKK3N0
YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChBdGtUZXh0KiwgZ2lu
dCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpOworCitzdGF0aWMgY29uc3QgZ2NoYXIqIHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF9uYW1lKEF0a09iamVjdCogb2JqZWN0KQoreworICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7CisgICAgaWYgKCFjb3Jl
T2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHJl
dHVyblN0cmluZyhjb3JlT2JqZWN0LT5zdHJpbmdWYWx1ZSgpKTsKKworICAgIGlmIChjb3JlT2Jq
ZWN0LT5pc0NvbnRyb2woKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYWJlbCA9
IGNvcmVPYmplY3QtPmNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KCk7CisgICAg
ICAgIGlmIChsYWJlbCkgeworICAgICAgICAgICAgQXRrT2JqZWN0KiBhdGtPYmplY3QgPSBsYWJl
bC0+d3JhcHBlcigpOworICAgICAgICAgICAgaWYgKEFUS19JU19URVhUKGF0a09iamVjdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQVRL
X1RFWFQoYXRrT2JqZWN0KSwgMCwgLTEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHJ5IHRl
eHQgdW5kZXIgdGhlIG5vZGUuCisgICAgICAgIFN0cmluZyB0ZXh0VW5kZXIgPSBjb3JlT2JqZWN0
LT50ZXh0VW5kZXJFbGVtZW50KCk7CisgICAgICAgIGlmICh0ZXh0VW5kZXIubGVuZ3RoKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKHRleHRVbmRlcik7CisgICAgfQorCisgICAg
aWYgKGNvcmVPYmplY3QtPmlzSW1hZ2UoKSB8fCBjb3JlT2JqZWN0LT5pc0lucHV0SW1hZ2UoKSkg
eworICAgICAgICBOb2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOworICAgICAgICBpZiAo
bm9kZSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIC8vIEdldCB0aGUg
YXR0cmlidXRlIHJhdGhlciB0aGFuIGFsdFRleHQgU3RyaW5nIHNvIGFzIG5vdCB0byBmYWxsIGJh
Y2sgb24gdGl0bGUuCisgICAgICAgICAgICBTdHJpbmcgYWx0ID0gdG9IVE1MRWxlbWVudChub2Rl
KS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0cik7CisgICAgICAgICAgICBpZiAoIWFs
dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyhhbHQpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgZm9yIHRoZSB3ZWJBcmVhIG9iamVj
dDoganVzdCByZXR1cm4gdGhlIGRvY3VtZW50J3MgdGl0bGUuCisgICAgaWYgKGNvcmVPYmplY3Qt
PmlzV2ViQXJlYSgpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3Qt
PmRvY3VtZW50KCk7CisgICAgICAgIGlmIChkb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBy
ZXR1cm5TdHJpbmcoZG9jdW1lbnQtPnRpdGxlKCkpOworICAgIH0KKworICAgIC8vIE5vdGhpbmcg
d29ya2VkIHNvIGZhciwgdHJ5IHdpdGggdGhlIEFjY2Vzc2liaWxpdHlPYmplY3QncworICAgIC8v
IHRpdGxlKCkgYmVmb3JlIGdvaW5nIGFoZWFkIHdpdGggc3RyaW5nVmFsdWUoKS4KKyAgICBTdHJp
bmcgYXhUaXRsZSA9IGNvcmVPYmplY3QtPnRpdGxlKCk7CisgICAgaWYgKCFheFRpdGxlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyhheFRpdGxlKTsKKworICAgIHJldHVy
biByZXR1cm5TdHJpbmcoY29yZU9iamVjdC0+c3RyaW5nVmFsdWUoKSk7Cit9CisKK3N0YXRpYyBj
b25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2Rlc2NyaXB0aW9uKEF0a09iamVjdCog
b2JqZWN0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9i
amVjdCk7CisgICAgTm9kZSogbm9kZSA9IDA7CisgICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICBub2RlID0gY29yZU9iamVjdC0+bm9kZSgp
OworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8IGNvcmVPYmplY3Qt
PmFyaWFSb2xlQXR0cmlidXRlKCkgIT0gVW5rbm93blJvbGUpCisgICAgICAgIHJldHVybiByZXR1
cm5TdHJpbmcoY29yZU9iamVjdC0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkpOworCisgICAg
Ly8gYXRrX3RhYmxlX2dldF9zdW1tYXJ5IHJldHVybnMgYW4gQXRrT2JqZWN0LiBXZSBoYXZlIG5v
IHN1bW1hcnkgb2JqZWN0LCBzbyBleHBvc2Ugc3VtbWFyeSBoZXJlLgorICAgIGlmIChjb3JlT2Jq
ZWN0LT5yb2xlVmFsdWUoKSA9PSBUYWJsZVJvbGUpIHsKKyAgICAgICAgU3RyaW5nIHN1bW1hcnkg
PSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4obm9kZSktPnN1bW1hcnkoKTsKKyAgICAg
ICAgaWYgKCFzdW1tYXJ5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5TdHJp
bmcoc3VtbWFyeSk7CisgICAgfQorCisgICAgLy8gVGhlIHRpdGxlIGF0dHJpYnV0ZSBzaG91bGQg
YmUgcmVsaWFibHkgYXZhaWxhYmxlIGFzIHRoZSBvYmplY3QncyBkZXNjcmlwdG9uLgorICAgIC8v
IFdlIGRvIG5vdCB3YW50IHRvIGZhbGwgYmFjayBvbiBvdGhlciBhdHRyaWJ1dGVzIGluIGl0cyBh
YnNlbmNlLiBTZWUgYnVnIDI1NTI0LgorICAgIFN0cmluZyB0aXRsZSA9IHRvSFRNTEVsZW1lbnQo
bm9kZSktPnRpdGxlKCk7CisgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biByZXR1cm5TdHJpbmcodGl0bGUpOworCisgICAgcmV0dXJuIHJldHVyblN0cmluZyhjb3JlT2Jq
ZWN0LT5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEF0
a1JlbGF0aW9uU2V0RnJvbUNvcmVPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCwgQXRrUmVsYXRpb25TZXQqIHJlbGF0aW9uU2V0KQoreworICAgIGlmIChjb3JlT2JqZWN0LT5p
c0NvbnRyb2woKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYWJlbCA9IGNvcmVP
YmplY3QtPmNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KCk7CisgICAgICAgIGlm
IChsYWJlbCkKKyAgICAgICAgICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5
cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElPTl9MQUJFTExFRF9CWSwgbGFiZWwtPndyYXBwZXIo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29udHJvbCA9
IGNvcmVPYmplY3QtPmNvcnJlc3BvbmRpbmdDb250cm9sRm9yTGFiZWxFbGVtZW50KCk7CisgICAg
ICAgIGlmIChjb250cm9sKQorICAgICAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9hZGRfcmVsYXRp
b25fYnlfdHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0xBQkVMX0ZPUiwgY29udHJvbC0+
d3JhcHBlcigpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBncG9pbnRlciB3ZWJraXRfYWNjZXNzaWJs
ZV9wYXJlbnRfY2xhc3MgPSAwOworCitzdGF0aWMgYm9vbCBpc1Jvb3RPYmplY3QoQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCkKK3sKKyAgICAvLyBUaGUgcm9vdCBhY2Nlc3NpYmxlIG9i
amVjdCBpbiBXZWJDb3JlIGlzIGFsd2F5cyBhbiBvYmplY3Qgd2l0aAorICAgIC8vIHRoZSBTY3Jv
bGxlZEFyZWEgcm9sZSB3aXRoIG9uZSBjaGlsZCB3aXRoIHRoZSBXZWJBcmVhIHJvbGUuCisgICAg
aWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCA9IGNv
cmVPYmplY3QtPmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgIWZpcnN0Q2hp
bGQtPmlzV2ViQXJlYSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIEF0a09iamVjdCogYXRrUGFyZW50T2ZSb290T2JqZWN0KEF0a09iamVj
dCogb2JqZWN0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KG9iamVjdCk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVBhcmVudCA9IGNvcmVPYmpl
Y3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworCisgICAgLy8gVGhlIHRvcCBsZXZlbCBvYmpl
Y3QgY2xhaW1zIHRvIG5vdCBoYXZlIGEgcGFyZW50LiBUaGlzIG1ha2VzIGl0CisgICAgLy8gaW1w
b3NzaWJsZSBmb3IgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyB0byBhc2NlbmQgdGhlIGFjY2Vzc2li
bGUKKyAgICAvLyBoaWVyYXJjaHkgYWxsIHRoZSB3YXkgdG8gdGhlIGFwcGxpY2F0aW9uLiAoQnVn
IDMwNDg5KQorICAgIGlmICghY29yZVBhcmVudCAmJiBpc1Jvb3RPYmplY3QoY29yZU9iamVjdCkp
IHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsK
KyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC0+dmlldygpLT5ob3N0V2luZG93KCk7
CisgICAgICAgIGlmIChob3N0V2luZG93KSB7CisgICAgICAgICAgICBQbGF0Zm9ybVBhZ2VDbGll
bnQgc2Nyb2xsVmlldyA9IGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgICAg
ICAgICAgaWYgKHNjcm9sbFZpZXcpIHsKKyAgICAgICAgICAgICAgICBHdGtXaWRnZXQqIHNjcm9s
bFZpZXdQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQoc2Nyb2xsVmlldyk7CisgICAgICAg
ICAgICAgICAgaWYgKHNjcm9sbFZpZXdQYXJlbnQpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKHNjcm9sbFZpZXdQYXJlbnQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjb3JlUGFyZW50KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBjb3JlUGFyZW50LT53cmFwcGVyKCk7Cit9CisKK3N0YXRp
YyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9wYXJlbnQoQXRrT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgLy8gQ2hlY2sgZmlyc3QgaWYgdGhlIHBhcmVudCBoYXMgYmVlbiBhbHJlYWR5
IHNldC4KKyAgICBBdGtPYmplY3QqIGFjY2Vzc2libGVQYXJlbnQgPSBBVEtfT0JKRUNUX0NMQVNT
KHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcyktPmdldF9wYXJlbnQob2JqZWN0KTsKKyAg
ICBpZiAoYWNjZXNzaWJsZVBhcmVudCkKKyAgICAgICAgcmV0dXJuIGFjY2Vzc2libGVQYXJlbnQ7
CisKKyAgICAvLyBQYXJlbnQgbm90IHNldCB5ZXQsIHNvIHRyeSB0byBmaW5kIGl0IGluIHRoZSBo
aWVyYXJjaHkuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2Jq
ZWN0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZVBhcmVudCA9IGNvcmVPYmplY3QtPnBhcmVudE9iamVjdFVu
aWdub3JlZCgpOworCisgICAgaWYgKCFjb3JlUGFyZW50ICYmIGlzUm9vdE9iamVjdChjb3JlT2Jq
ZWN0KSkKKyAgICAgICAgcmV0dXJuIGF0a1BhcmVudE9mUm9vdE9iamVjdChvYmplY3QpOworCisg
ICAgaWYgKCFjb3JlUGFyZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEdUSyBkb2Vz
bid0IGV4cG9zZSB0YWJsZSByb3dzIHRvIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsIGJ1dCB3ZQor
ICAgIC8vIG5lZWQgdG8gaGF2ZSB0aGVtIGFueXdheSBpbiB0aGUgaGllcmFyY2h5IGZyb20gV2Vi
Q29yZSB0bworICAgIC8vIHByb3Blcmx5IHBlcmZvcm0gY29vcmRpbmF0ZXMgY2FsY3VsYXRpb25z
IHdoZW4gcmVxdWVzdGVkLgorICAgIGlmIChjb3JlUGFyZW50LT5pc1RhYmxlUm93KCkgJiYgY29y
ZU9iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgY29yZVBhcmVudCA9IGNvcmVQYXJlbnQt
PnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworCisgICAgcmV0dXJuIGNvcmVQYXJlbnQtPndyYXBw
ZXIoKTsKK30KKworc3RhdGljIGdpbnQgZ2V0TkNoaWxkcmVuRm9yVGFibGUoQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFibGVDaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVu
KCk7CisgICAgc2l6ZV90IHRhYmxlQ2hpbGRyZW5Db3VudCA9IHRhYmxlQ2hpbGRyZW4uc2l6ZSgp
OworICAgIHNpemVfdCBjZWxsc0NvdW50ID0gMDsKKworICAgIC8vIExvb2sgZm9yIHRoZSBhY3R1
YWwgaW5kZXggb2YgdGhlIGNlbGwgaW5zaWRlIHRoZSB0YWJsZS4KKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGFibGVDaGlsZHJlbkNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKHRhYmxl
Q2hpbGRyZW5baV0tPmlzVGFibGVSb3coKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHJvd0NoaWxkcmVuID0gdGFibGVDaGls
ZHJlbltpXS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGNlbGxzQ291bnQgKz0gcm93Q2hpbGRy
ZW4uc2l6ZSgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNlbGxzQ291bnQrKzsKKyAg
ICB9CisKKyAgICByZXR1cm4gY2VsbHNDb3VudDsKK30KKworc3RhdGljIGdpbnQgd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X25fY2hpbGRyZW4oQXRrT2JqZWN0KiBvYmplY3QpCit7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKKworICAgIC8vIFRhYmxl
cyBzaG91bGQgYmUgdHJlYXRlZCBpbiBhIGRpZmZlcmVudCB3YXkgYmVjYXVzZSByb3dzIHNob3Vs
ZAorICAgIC8vIGJlIGJ5cGFzc2VkIGZvciBHVEsgd2hlbiBleHBvc2luZyB0aGUgYWNjZXNzaWJs
ZSBoaWVyYXJjaHkuCisgICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkp
CisgICAgICAgIHJldHVybiBnZXROQ2hpbGRyZW5Gb3JUYWJsZShjb3JlT2JqZWN0KTsKKworICAg
IHJldHVybiBjb3JlT2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKTsKK30KKworc3RhdGljIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGdldENoaWxkRm9yVGFibGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFibGVDaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVu
KCk7CisgICAgc2l6ZV90IHRhYmxlQ2hpbGRyZW5Db3VudCA9IHRhYmxlQ2hpbGRyZW4uc2l6ZSgp
OworICAgIHNpemVfdCBjZWxsc0NvdW50ID0gMDsKKworICAgIC8vIExvb2sgZm9yIHRoZSBhY3R1
YWwgaW5kZXggb2YgdGhlIGNlbGwgaW5zaWRlIHRoZSB0YWJsZS4KKyAgICBzaXplX3QgY3VycmVu
dCA9IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0YWJsZUNoaWxkcmVuQ291bnQ7ICsraSkgeworICAgICAgICBpZiAodGFibGVDaGlsZHJl
bltpXS0+aXNUYWJsZVJvdygpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93Q2hpbGRyZW4gPSB0YWJsZUNoaWxkcmVuW2ld
LT5jaGlsZHJlbigpOworICAgICAgICAgICAgc2l6ZV90IHJvd0NoaWxkcmVuQ291bnQgPSByb3dD
aGlsZHJlbi5zaXplKCk7CisgICAgICAgICAgICBpZiAoY3VycmVudCA8IGNlbGxzQ291bnQgKyBy
b3dDaGlsZHJlbkNvdW50KQorICAgICAgICAgICAgICAgIHJldHVybiByb3dDaGlsZHJlbi5hdChj
dXJyZW50IC0gY2VsbHNDb3VudCkuZ2V0KCk7CisgICAgICAgICAgICBjZWxsc0NvdW50ICs9IHJv
d0NoaWxkcmVuQ291bnQ7CisgICAgICAgIH0gZWxzZSBpZiAoY2VsbHNDb3VudCA9PSBjdXJyZW50
KQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ2hpbGRyZW5baV0uZ2V0KCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNlbGxzQ291bnQrKzsKKyAgICB9CisKKyAgICAvLyBTaG91bGRuJ3Qg
cmVhY2ggaWYgdGhlIGNoaWxkIHdhcyBmb3VuZC4KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfcmVmX2NoaWxkKEF0a09iamVjdCogb2JqZWN0
LCBnaW50IGluZGV4KQoreworICAgIGlmIChpbmRleCA8IDApCisgICAgICAgIHJldHVybiAwOwor
CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSAwOworCisgICAgLy8gVGFibGVzIGFy
ZSBzcGVjaWFsIGNhc2VzIGluIEdUSyBiZWNhdXNlIHJvd3Mgc2hvdWxkIGJlCisgICAgLy8gYnlw
YXNzZWQsIGJ1dCBzdGlsbCB0YWtpbmcgdGhlaXIgY2VsbHMgaW50byBhY2NvdW50LgorICAgIGlm
IChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlUYWJsZSgpKQorICAgICAgICBjb3JlQ2hpbGQg
PSBnZXRDaGlsZEZvclRhYmxlKGNvcmVPYmplY3QsIGluZGV4KTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxk
cmVuID0gY29yZU9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbmRleCkgPj0gY2hpbGRyZW4uc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGNvcmVDaGlsZCA9IGNoaWxkcmVuLmF0KGluZGV4KS5nZXQoKTsKKyAgICB9CisK
KyAgICBpZiAoIWNvcmVDaGlsZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdGtPYmplY3Qq
IGNoaWxkID0gY29yZUNoaWxkLT53cmFwcGVyKCk7CisgICAgYXRrX29iamVjdF9zZXRfcGFyZW50
KGNoaWxkLCBvYmplY3QpOworICAgIGdfb2JqZWN0X3JlZihjaGlsZCk7CisKKyAgICByZXR1cm4g
Y2hpbGQ7Cit9CisKK3N0YXRpYyBnaW50IGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3coQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBpZiAo
IXBhcmVudCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Z3JhbmRQYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIGlmICgh
Z3JhbmRQYXJlbnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dzID0gZ3JhbmRQYXJlbnQtPmNoaWxk
cmVuKCk7CisgICAgc2l6ZV90IHJvd3NDb3VudCA9IHJvd3Muc2l6ZSgpOworICAgIHNpemVfdCBw
cmV2aW91c0NlbGxzQ291bnQgPSAwOworCisgICAgLy8gTG9vayBmb3IgdGhlIGFjdHVhbCBpbmRl
eCBvZiB0aGUgY2VsbCBpbnNpZGUgdGhlIHRhYmxlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByb3dzQ291bnQ7ICsraSkgeworICAgICAgICBpZiAoIXJvd3NbaV0tPmlzVGFibGVSb3co
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjZWxscyA9IHJvd3NbaV0tPmNoaWxkcmVuKCk7
CisgICAgICAgIHNpemVfdCBjZWxsc0NvdW50ID0gY2VsbHMuc2l6ZSgpOworCisgICAgICAgIGlm
IChyb3dzW2ldID09IHBhcmVudCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IGNlbGxzQ291bnQ7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChjZWxsc1tqXSA9PSBj
b3JlT2JqZWN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDZWxsc0NvdW50
ICsgajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzQ2VsbHND
b3VudCArPSBjZWxsc0NvdW50OworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworCitzdGF0
aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50KEF0a09iamVjdCog
b2JqZWN0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9i
amVjdCk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gY29yZU9iamVjdC0+cGFy
ZW50T2JqZWN0VW5pZ25vcmVkKCk7CisKKyAgICBpZiAoIXBhcmVudCAmJiBpc1Jvb3RPYmplY3Qo
Y29yZU9iamVjdCkpIHsKKyAgICAgICAgQXRrT2JqZWN0KiBhdGtQYXJlbnQgPSBhdGtQYXJlbnRP
ZlJvb3RPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgaWYgKCFhdGtQYXJlbnQpCisgICAgICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBhdGtfb2JqZWN0X2dldF9u
X2FjY2Vzc2libGVfY2hpbGRyZW4oYXRrUGFyZW50KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGF0a1BhcmVudCwgaSk7CisgICAgICAgICAg
ICBib29sIGNoaWxkSXNPYmplY3QgPSBjaGlsZCA9PSBvYmplY3Q7CisgICAgICAgICAgICBnX29i
amVjdF91bnJlZihjaGlsZCk7CisgICAgICAgICAgICBpZiAoY2hpbGRJc09iamVjdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5lZWQgdG8g
Y2FsY3VsYXRlIHRoZSBpbmRleCBvZiB0aGUgY2VsbCBpbiB0aGUgdGFibGUsIGFzCisgICAgLy8g
cm93cyB3b24ndCBiZSBleHBvc2VkIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgaW4gR1RLLgor
ICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc1RhYmxlUm93KCkgJiYgY29yZU9iamVjdC0+aXNU
YWJsZUNlbGwoKSkKKyAgICAgICAgcmV0dXJuIGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3co
Y29yZU9iamVjdCk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBwYXJlbnQtPmNoaWxkcmVuKCk7CisgICAgdW5zaWduZWQg
Y291bnQgPSBjaGlsZHJlbi5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldID09IGNvcmVPYmplY3QpCisgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBB
dGtBdHRyaWJ1dGVTZXQqIGFkZEF0dHJpYnV0ZVRvU2V0KEF0a0F0dHJpYnV0ZVNldCogYXR0cmli
dXRlU2V0LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBBdGtB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGdfbWFsbG9j
KHNpemVvZihBdGtBdHRyaWJ1dGUpKSk7CisgICAgYXR0cmlidXRlLT5uYW1lID0gZ19zdHJkdXAo
bmFtZSk7CisgICAgYXR0cmlidXRlLT52YWx1ZSA9IGdfc3RyZHVwKHZhbHVlKTsKKyAgICBhdHRy
aWJ1dGVTZXQgPSBnX3NsaXN0X3ByZXBlbmQoYXR0cmlidXRlU2V0LCBhdHRyaWJ1dGUpOworCisg
ICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsKK30KKworc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Vi
a2l0X2FjY2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCit7CisgICAg
QXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSAwOworICAgIGF0dHJpYnV0ZVNldCA9IGFk
ZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgInRvb2xraXQiLCAiV2ViS2l0R3RrIik7CisK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOworICAg
IGlmICghY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsKKworICAgIGlu
dCBoZWFkaW5nTGV2ZWwgPSBjb3JlT2JqZWN0LT5oZWFkaW5nTGV2ZWwoKTsKKyAgICBpZiAoaGVh
ZGluZ0xldmVsKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IFN0cmluZzo6bnVtYmVyKGhlYWRp
bmdMZXZlbCk7CisgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJp
YnV0ZVNldCwgImxldmVsIiwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgLy8g
U2V0IHRoZSAnbGF5b3V0LWd1ZXNzJyBhdHRyaWJ1dGUgdG8gaGVscCBBc3Npc3RpdmUKKyAgICAv
LyBUZWNobm9sb2dpZXMga25vdyB3aGVuIGFuIGV4cG9zZWQgdGFibGUgaXMgbm90IGRhdGEgdGFi
bGUuCisgICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgJiYgIWNvcmVP
YmplY3QtPmlzRGF0YVRhYmxlKCkpCisgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZEF0dHJpYnV0
ZVRvU2V0KGF0dHJpYnV0ZVNldCwgImxheW91dC1ndWVzcyIsICJ0cnVlIik7CisKKyAgICByZXR1
cm4gYXR0cmlidXRlU2V0OworfQorCitzdGF0aWMgQXRrUm9sZSBhdGtSb2xlKEFjY2Vzc2liaWxp
dHlSb2xlIHJvbGUpCit7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBVbmtub3duUm9s
ZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1VOS05PV047CisgICAgY2FzZSBCdXR0b25Sb2xl
OgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfUFVTSF9CVVRUT047CisgICAgY2FzZSBSYWRpb0J1
dHRvblJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9SQURJT19CVVRUT047CisgICAgY2Fz
ZSBDaGVja0JveFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9DSEVDS19CT1g7CisgICAg
Y2FzZSBTbGlkZXJSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0xJREVSOworICAgIGNh
c2UgVGFiR3JvdXBSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfUEFHRV9UQUJfTElTVDsK
KyAgICBjYXNlIFRleHRGaWVsZFJvbGU6CisgICAgY2FzZSBUZXh0QXJlYVJvbGU6CisgICAgICAg
IHJldHVybiBBVEtfUk9MRV9FTlRSWTsKKyAgICBjYXNlIFN0YXRpY1RleHRSb2xlOgorICAgICAg
ICByZXR1cm4gQVRLX1JPTEVfVEVYVDsKKyAgICBjYXNlIE91dGxpbmVSb2xlOgorICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfVFJFRTsKKyAgICBjYXNlIE1lbnVCYXJSb2xlOgorICAgICAgICByZXR1
cm4gQVRLX1JPTEVfTUVOVV9CQVI7CisgICAgY2FzZSBNZW51TGlzdFBvcHVwUm9sZToKKyAgICBj
YXNlIE1lbnVSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUVOVTsKKyAgICBjYXNlIE1l
bnVMaXN0T3B0aW9uUm9sZToKKyAgICBjYXNlIE1lbnVJdGVtUm9sZToKKyAgICAgICAgcmV0dXJu
IEFUS19ST0xFX01FTlVfSVRFTTsKKyAgICBjYXNlIENvbHVtblJvbGU6CisgICAgICAgIC8vIHJl
dHVybiBBVEtfUk9MRV9UQUJMRV9DT0xVTU5fSEVBREVSOyAvLyBJcyB0aGlzIHJpZ2h0PworICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfVU5LTk9XTjsgLy8gTWF0Y2hlcyBNb3ppbGxhCisgICAgY2Fz
ZSBSb3dSb2xlOgorICAgICAgICAvLyByZXR1cm4gQVRLX1JPTEVfVEFCTEVfUk9XX0hFQURFUjsg
Ly8gSXMgdGhpcyByaWdodD8KKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1RfSVRFTTsgLy8g
TWF0Y2hlcyBNb3ppbGxhCisgICAgY2FzZSBUb29sYmFyUm9sZToKKyAgICAgICAgcmV0dXJuIEFU
S19ST0xFX1RPT0xfQkFSOworICAgIGNhc2UgQnVzeUluZGljYXRvclJvbGU6CisgICAgICAgIHJl
dHVybiBBVEtfUk9MRV9QUk9HUkVTU19CQVI7IC8vIElzIHRoaXMgcmlnaHQ/CisgICAgY2FzZSBQ
cm9ncmVzc0luZGljYXRvclJvbGU6CisgICAgICAgIC8vIHJldHVybiBBVEtfUk9MRV9TUElOX0JV
VFRPTjsgLy8gU29tZSBjb25mdXNpb24gYWJvdXQgdGhpcyByb2xlIGluIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisgICAgICAgIHJldHVybiBBVEtfUk9MRV9QUk9HUkVTU19CQVI7Cisg
ICAgY2FzZSBXaW5kb3dSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfV0lORE9XOworICAg
IGNhc2UgUG9wVXBCdXR0b25Sb2xlOgorICAgIGNhc2UgQ29tYm9Cb3hSb2xlOgorICAgICAgICBy
ZXR1cm4gQVRLX1JPTEVfQ09NQk9fQk9YOworICAgIGNhc2UgU3BsaXRHcm91cFJvbGU6CisgICAg
ICAgIHJldHVybiBBVEtfUk9MRV9TUExJVF9QQU5FOworICAgIGNhc2UgU3BsaXR0ZXJSb2xlOgor
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0VQQVJBVE9SOworICAgIGNhc2UgQ29sb3JXZWxsUm9s
ZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NPTE9SX0NIT09TRVI7CisgICAgY2FzZSBMaXN0
Um9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1Q7CisgICAgY2FzZSBTY3JvbGxCYXJS
b2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0NST0xMX0JBUjsKKyAgICBjYXNlIFNjcm9s
bEFyZWFSb2xlOgorICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0NST0xMX1BBTkU7CisgICAgY2Fz
ZSBHcmlkUm9sZTogLy8gSXMgdGhpcyByaWdodD8KKyAgICBjYXNlIFRhYmxlUm9sZToKKyAgICAg
ICAgcmV0dXJuIEFUS19ST0xFX1RBQkxFOworICAgIGNhc2UgQXBwbGljYXRpb25Sb2xlOgorICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfQVBQTElDQVRJT047CisgICAgY2FzZSBHcm91cFJvbGU6Cisg
ICAgY2FzZSBSYWRpb0dyb3VwUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBTkVMOwor
ICAgIGNhc2UgUm93SGVhZGVyUm9sZTogLy8gUm93IGhlYWRlcnMgYXJlIGNlbGxzIGFmdGVyIGFs
bC4KKyAgICBjYXNlIENvbHVtbkhlYWRlclJvbGU6IC8vIENvbHVtbiBoZWFkZXJzIGFyZSBjZWxs
cyBhZnRlciBhbGwuCisgICAgY2FzZSBDZWxsUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xF
X1RBQkxFX0NFTEw7CisgICAgY2FzZSBMaW5rUm9sZToKKyAgICBjYXNlIFdlYkNvcmVMaW5rUm9s
ZToKKyAgICBjYXNlIEltYWdlTWFwTGlua1JvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9M
SU5LOworICAgIGNhc2UgSW1hZ2VNYXBSb2xlOgorICAgIGNhc2UgSW1hZ2VSb2xlOgorICAgICAg
ICByZXR1cm4gQVRLX1JPTEVfSU1BR0U7CisgICAgY2FzZSBMaXN0TWFya2VyUm9sZToKKyAgICAg
ICAgcmV0dXJuIEFUS19ST0xFX1RFWFQ7CisgICAgY2FzZSBXZWJBcmVhUm9sZToKKyAgICAgICAg
Ly8gcmV0dXJuIEFUS19ST0xFX0hUTUxfQ09OVEFJTkVSOyAvLyBJcyB0aGlzIHJpZ2h0PworICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUU7CisgICAgY2FzZSBIZWFkaW5nUm9s
ZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0hFQURJTkc7CisgICAgY2FzZSBMaXN0Qm94Um9s
ZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJU1Q7CisgICAgY2FzZSBMaXN0SXRlbVJvbGU6
CisgICAgY2FzZSBMaXN0Qm94T3B0aW9uUm9sZToKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJ
U1RfSVRFTTsKKyAgICBjYXNlIFBhcmFncmFwaFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9M
RV9QQVJBR1JBUEg7CisgICAgY2FzZSBMYWJlbFJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9M
RV9MQUJFTDsKKyAgICBjYXNlIERpdlJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9TRUNU
SU9OOworICAgIGNhc2UgRm9ybVJvbGU6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9GT1JNOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBVEtfUk9MRV9VTktOT1dOOworICAgIH0KK30K
Kworc3RhdGljIEF0a1JvbGUgd2Via2l0X2FjY2Vzc2libGVfZ2V0X3JvbGUoQXRrT2JqZWN0KiBv
YmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2Jq
ZWN0KTsKKworICAgIGlmICghY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1VO
S05PV047CisKKyAgICAvLyBOb3RlOiBXaHkgZG9lc24ndCBXZWJDb3JlIGhhdmUgYSBwYXNzd29y
ZCBmaWVsZCBmb3IgdGhpcworICAgIGlmIChjb3JlT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkK
KyAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBU1NXT1JEX1RFWFQ7CisKKyAgICByZXR1cm4gYXRr
Um9sZShjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSk7Cit9CisKK3N0YXRpYyBib29sIHNlbGVjdGlv
bkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7CisgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2Jq
ZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIHdh
bnQgdG8gY2hlY2sgdGhhdCBib3RoIHRoZSBzZWxlY3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQor
ICAgIC8vIEFORCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUg
b2YgdGhlCisgICAgLy8gYm91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQg
dG8gY2hlY2sgd2hldGhlciB0aGUKKyAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUg
cmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHkuCisgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3Qt
Pm5vZGUoKTsKKyAgICBOb2RlKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50
KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmV0dXJuIChyYW5nZS0+aW50ZXJz
ZWN0c05vZGUobm9kZSwgZWMpCisgICAgICAgICAgICAmJiAocmFuZ2UtPmVuZENvbnRhaW5lcigp
ICE9IG5vZGUgfHwgcmFuZ2UtPmVuZE9mZnNldCgpKQorICAgICAgICAgICAgJiYgKHJhbmdlLT5z
dGFydENvbnRhaW5lcigpICE9IGxhc3REZXNjZW5kYW50IHx8IHJhbmdlLT5zdGFydE9mZnNldCgp
ICE9IGxhc3RPZmZzZXRJbk5vZGUobGFzdERlc2NlbmRhbnQpKSk7Cit9CisKK3N0YXRpYyBib29s
IGlzVGV4dFdpdGhDYXJldChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQoreworICAg
IGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3Mt
PmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IENoZWNrIHRleHQgb2JqZWN0cyBhbmQgcGFyYWdyYXBocyBvbmx5LgorICAgIEF0a09iamVjdCog
YXhPYmplY3QgPSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgQXRrUm9sZSByb2xlID0gYXhP
YmplY3QgPyBhdGtfb2JqZWN0X2dldF9yb2xlKGF4T2JqZWN0KSA6IEFUS19ST0xFX0lOVkFMSUQ7
CisgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfVEVYVCAmJiByb2xlICE9IEFUS19ST0xFX1BBUkFH
UkFQSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmluYWxseSwgY2hlY2sgd2hl
dGhlciB0aGUgY2FyZXQgaXMgc2V0IGluIHRoZSBjdXJyZW50IG9iamVjdC4KKyAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworICAgIGlmICgh
c2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24pOworfQorCitz
dGF0aWMgdm9pZCBzZXRBdGtTdGF0ZVNldEZyb21Db3JlT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QsIEF0a1N0YXRlU2V0KiBzdGF0ZVNldCkKK3sKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnQgPSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICBib29s
IGlzTGlzdEJveE9wdGlvbiA9IHBhcmVudCAmJiBwYXJlbnQtPmlzTGlzdEJveCgpOworCisgICAg
Ly8gUGxlYXNlIGtlZXAgdGhlIHN0YXRlIGxpc3QgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCisgICAg
aWYgKGNvcmVPYmplY3QtPmlzQ2hlY2tlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9z
dGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0NIRUNLRUQpOworCisgICAgLy8gRklYTUU6IGlzUmVh
ZE9ubHkgZG9lcyBub3Qgc2VlbSB0byBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yCisgICAgLy8gY29u
dHJvbHMsIHNvIGNoZWNrIGV4cGxpY2l0bHkgZm9yIHRoZW0uIEluIGFkZGl0aW9uLCBiZWNhdXNl
CisgICAgLy8gaXNSZWFkT25seSBpcyBmYWxzZSBmb3IgbGlzdEJveE9wdGlvbnMsIHdlIG5lZWQg
dG8gYWRkIG9uZQorICAgIC8vIG1vcmUgY2hlY2sgc28gdGhhdCB3ZSBkbyBub3QgcHJlc2VudCB0
aGVtIGFzIGJlaW5nICJlZGl0YWJsZSIuCisgICAgaWYgKCghY29yZU9iamVjdC0+aXNSZWFkT25s
eSgpCisgICAgICAgICB8fCAoY29yZU9iamVjdC0+aXNDb250cm9sKCkgJiYgY29yZU9iamVjdC0+
Y2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSkpCisgICAgICAgICYmICFpc0xpc3RCb3hPcHRpb24pCisg
ICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRURJVEFC
TEUpOworCisgICAgLy8gRklYTUU6IFB1dCBib3RoIEVOQUJMRUQgYW5kIFNFTlNJVElWRSB0b2dl
dGhlciBoZXJlIGZvciBub3cKKyAgICBpZiAoY29yZU9iamVjdC0+aXNFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9FTkFCTEVE
KTsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9T
RU5TSVRJVkUpOworICAgIH0KKworICAgIGlmIChjb3JlT2JqZWN0LT5jYW5TZXRFeHBhbmRlZEF0
dHJpYnV0ZSgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRL
X1NUQVRFX0VYUEFOREFCTEUpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzRXhwYW5kZWQoKSkK
KyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9FWFBB
TkRFRCk7CisKKyAgICBpZiAoY29yZU9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkKKyAg
ICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NVU0FC
TEUpOworCisgICAgaWYgKGNvcmVPYmplY3QtPmlzRm9jdXNlZCgpIHx8IGlzVGV4dFdpdGhDYXJl
dChjb3JlT2JqZWN0KSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQs
IEFUS19TVEFURV9GT0NVU0VEKTsKKworICAgIC8vIFRPRE86IEFUS19TVEFURV9IT1JJWk9OVEFM
CisKKyAgICBpZiAoY29yZU9iamVjdC0+aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgIGF0a19z
dGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfSU5ERVRFUk1JTkFURSk7CisK
KyAgICBpZiAoY29yZU9iamVjdC0+aXNNdWx0aVNlbGVjdGFibGUoKSkKKyAgICAgICAgYXRrX3N0
YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9NVUxUSVNFTEVDVEFCTEUpOwor
CisgICAgLy8gVE9ETzogQVRLX1NUQVRFX09QQVFVRQorCisgICAgaWYgKGNvcmVPYmplY3QtPmlz
UHJlc3NlZCgpKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRL
X1NUQVRFX1BSRVNTRUQpOworCisgICAgLy8gVE9ETzogQVRLX1NUQVRFX1NFTEVDVEFCTEVfVEVY
VAorCisgICAgaWYgKGNvcmVPYmplY3QtPmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpIHsKKyAg
ICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9TRUxFQ1RB
QkxFKTsKKyAgICAgICAgLy8gSXRlbXMgaW4gZm9jdXNhYmxlIGxpc3RzIGluIEd0ayBoYXZlIGJv
dGggU1RBVEVfU0VMRUNUe0FCTEUsRUR9CisgICAgICAgIC8vIGFuZCBTVEFURV9GT0NVU3tBQkxF
LEVEfS4gV2UnbGwgZmFrZSB0aGUgbGF0dGVyIGJhc2VkIG9uIHRoZQorICAgICAgICAvLyBmb3Jt
ZXIuCisgICAgICAgIGlmIChpc0xpc3RCb3hPcHRpb24pCisgICAgICAgICAgICBhdGtfc3RhdGVf
c2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSk7CisgICAgfQorCisg
ICAgaWYgKGNvcmVPYmplY3QtPmlzU2VsZWN0ZWQoKSkgeworICAgICAgICBhdGtfc3RhdGVfc2V0
X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKKyAgICAgICAgLy8gSXRl
bXMgaW4gZm9jdXNhYmxlIGxpc3RzIGluIEd0ayBoYXZlIGJvdGggU1RBVEVfU0VMRUNUe0FCTEUs
RUR9CisgICAgICAgIC8vIGFuZCBTVEFURV9GT0NVU3tBQkxFLEVEfS4gV2UnbGwgZmFrZSB0aGUg
bGF0dGVyIGJhc2VkIG9uIHRoZQorICAgICAgICAvLyBmb3JtZXIuCisgICAgICAgIGlmIChpc0xp
c3RCb3hPcHRpb24pCisgICAgICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNl
dCwgQVRLX1NUQVRFX0ZPQ1VTRUQpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBHcm91cCBib3Ro
IFNIT1dJTkcgYW5kIFZJU0lCTEUgaGVyZSBmb3Igbm93CisgICAgLy8gTm90IHN1cmUgaG93IHRv
IGhhbmRsZSB0aGlzIGluIFdlYktpdCwgc2VlIGJ1ZworICAgIC8vIGh0dHA6Ly9idWd6aWxsYS5n
bm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUwOTY1MCBmb3Igb3RoZXIKKyAgICAvLyBpc3N1ZXMg
d2l0aCBTSE9XSU5HIHZzIFZJU0lCTEUgd2l0aGluIEdUSysKKyAgICBpZiAoIWNvcmVPYmplY3Qt
PmlzT2ZmU2NyZWVuKCkpIHsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9TSE9XSU5HKTsKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUo
c3RhdGVTZXQsIEFUS19TVEFURV9WSVNJQkxFKTsKKyAgICB9CisKKyAgICAvLyBNdXR1YWxseSBl
eGNsdXNpdmUsIHNvIHdlIGdyb3VwIHRoZXNlIHR3bworICAgIGlmIChjb3JlT2JqZWN0LT5yb2xl
VmFsdWUoKSA9PSBUZXh0RmllbGRSb2xlKQorICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0
ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NJTkdMRV9MSU5FKTsKKyAgICBlbHNlIGlmIChjb3JlT2Jq
ZWN0LT5yb2xlVmFsdWUoKSA9PSBUZXh0QXJlYVJvbGUpCisgICAgICAgIGF0a19zdGF0ZV9zZXRf
YWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfTVVMVElfTElORSk7CisKKyAgICAvLyBUT0RP
OiBBVEtfU1RBVEVfU0VOU0lUSVZFCisKKyAgICAvLyBUT0RPOiBBVEtfU1RBVEVfVkVSVElDQUwK
KworICAgIGlmIChjb3JlT2JqZWN0LT5pc1Zpc2l0ZWQoKSkKKyAgICAgICAgYXRrX3N0YXRlX3Nl
dF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9WSVNJVEVEKTsKK30KKworc3RhdGljIEF0
a1N0YXRlU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfc3RhdGVfc2V0KEF0a09iamVjdCogb2Jq
ZWN0KQoreworICAgIEF0a1N0YXRlU2V0KiBzdGF0ZVNldCA9IEFUS19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+cmVmX3N0YXRlX3NldChvYmplY3QpOworICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7CisKKyAgICBp
ZiAoY29yZU9iamVjdCA9PSBmYWxsYmFja09iamVjdCgpKSB7CisgICAgICAgIGF0a19zdGF0ZV9z
ZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfREVGVU5DVCk7CisgICAgICAgIHJldHVy
biBzdGF0ZVNldDsKKyAgICB9CisKKyAgICAvLyBUZXh0IG9iamVjdHMgbXVzdCBiZSBmb2N1c2Fi
bGUuCisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShvYmplY3QpOworICAg
IGlmIChyb2xlID09IEFUS19ST0xFX1RFWFQgfHwgcm9sZSA9PSBBVEtfUk9MRV9QQVJBR1JBUEgp
CisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfRk9D
VVNBQkxFKTsKKworICAgIHNldEF0a1N0YXRlU2V0RnJvbUNvcmVPYmplY3QoY29yZU9iamVjdCwg
c3RhdGVTZXQpOworICAgIHJldHVybiBzdGF0ZVNldDsKK30KKworc3RhdGljIEF0a1JlbGF0aW9u
U2V0KiB3ZWJraXRfYWNjZXNzaWJsZV9yZWZfcmVsYXRpb25fc2V0KEF0a09iamVjdCogb2JqZWN0
KQoreworICAgIEF0a1JlbGF0aW9uU2V0KiByZWxhdGlvblNldCA9IEFUS19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+cmVmX3JlbGF0aW9uX3NldChvYmplY3Qp
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7CisK
KyAgICBzZXRBdGtSZWxhdGlvblNldEZyb21Db3JlT2JqZWN0KGNvcmVPYmplY3QsIHJlbGF0aW9u
U2V0KTsKKworICAgIHJldHVybiByZWxhdGlvblNldDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2FjY2Vzc2libGVfaW5pdChBdGtPYmplY3QqIG9iamVjdCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICBpZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5p
bml0aWFsaXplKQorICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3Bh
cmVudF9jbGFzcyktPmluaXRpYWxpemUob2JqZWN0LCBkYXRhKTsKKworICAgIFdFQktJVF9BQ0NF
U1NJQkxFKG9iamVjdCktPm1fb2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxBY2Nlc3NpYmlsaXR5
T2JqZWN0Kj4oZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICAvLyBUaGlzIGlzIGEgZ29vZCB0aW1lIHRvIGNs
ZWFyIHRoZSByZXR1cm4gYnVmZmVyLgorICAgIHJldHVyblN0cmluZyhTdHJpbmcoKSk7CisKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0
KEF0a09iamVjdENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVu
dF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudChrbGFzcyk7CisKKyAgICBnb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2FjY2Vzc2libGVfZmluYWxpemU7CisKKyAgICBrbGFz
cy0+aW5pdGlhbGl6ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2luaXQ7CisgICAga2xhc3MtPmdldF9u
YW1lID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWU7CisgICAga2xhc3MtPmdldF9kZXNjcmlw
dGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9kZXNjcmlwdGlvbjsKKyAgICBrbGFzcy0+Z2V0
X3BhcmVudCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9wYXJlbnQ7CisgICAga2xhc3MtPmdldF9u
X2NoaWxkcmVuID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X25fY2hpbGRyZW47CisgICAga2xhc3Mt
PnJlZl9jaGlsZCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9jaGlsZDsKKyAgICBrbGFzcy0+Z2V0
X3JvbGUgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcm9sZTsKKyAgICBrbGFzcy0+cmVmX3N0YXRl
X3NldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9zdGF0ZV9zZXQ7CisgICAga2xhc3MtPmdldF9p
bmRleF9pbl9wYXJlbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfaW5kZXhfaW5fcGFyZW50Owor
ICAgIGtsYXNzLT5nZXRfYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1
dGVzOworICAgIGtsYXNzLT5yZWZfcmVsYXRpb25fc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfcmVm
X3JlbGF0aW9uX3NldDsKKworICAgIGh5cGVybGlua09iamVjdFF1YXJrID0gZ19xdWFya19mcm9t
X3N0YXRpY19zdHJpbmcoIndlYmtpdC1hY2Nlc3NpYmxlLWh5cGVybGluay1vYmplY3QiKTsKK30K
KworR1R5cGUKK3dlYmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKHZvaWQpCit7CisgICAgc3RhdGlj
IHZvbGF0aWxlIGdzaXplIHR5cGVfdm9sYXRpbGUgPSAwOworCisgICAgaWYgKGdfb25jZV9pbml0
X2VudGVyKCZ0eXBlX3ZvbGF0aWxlKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZv
IHRpbmZvID0geworICAgICAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGVDbGFzcyksCisg
ICAgICAgICAgICAoR0Jhc2VJbml0RnVuYykgMCwKKyAgICAgICAgICAgIChHQmFzZUZpbmFsaXpl
RnVuYykgMCwKKyAgICAgICAgICAgIChHQ2xhc3NJbml0RnVuYykgd2Via2l0X2FjY2Vzc2libGVf
Y2xhc3NfaW5pdCwKKyAgICAgICAgICAgIChHQ2xhc3NGaW5hbGl6ZUZ1bmMpIDAsCisgICAgICAg
ICAgICAwLCAvKiBjbGFzcyBkYXRhICovCisgICAgICAgICAgICBzaXplb2YoV2ViS2l0QWNjZXNz
aWJsZSksIC8qIGluc3RhbmNlIHNpemUgKi8KKyAgICAgICAgICAgIDAsIC8qIG5iIHByZWFsbG9j
cyAqLworICAgICAgICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKSAwLAorICAgICAgICAgICAgMCAv
KiB2YWx1ZSB0YWJsZSAqLworICAgICAgICB9OworCisgICAgICAgIEdUeXBlIHR5cGUgPSBnX3R5
cGVfcmVnaXN0ZXJfc3RhdGljKEFUS19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIldlYktpdEFjY2Vzc2libGUiLCAmdGluZm8sIEdUeXBl
RmxhZ3MoMCkpOworICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmdHlwZV92b2xhdGlsZSwgdHlw
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVfdm9sYXRpbGU7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZG9fYWN0aW9uKEF0a0FjdGlvbiogYWN0aW9u
LCBnaW50IGkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWksIEZBTFNFKTsKKyAgICBy
ZXR1cm4gY29yZShhY3Rpb24pLT5wZXJmb3JtRGVmYXVsdEFjdGlvbigpOworfQorCitzdGF0aWMg
Z2ludCB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X25fYWN0aW9ucyhBdGtBY3Rpb24qIGFj
dGlvbikKK3sKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRf
YWNjZXNzaWJsZV9hY3Rpb25fZ2V0X2Rlc2NyaXB0aW9uKEF0a0FjdGlvbiogYWN0aW9uLCBnaW50
IGkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWksIDApOworICAgIC8vIFRPRE86IE5l
ZWQgYSB3YXkgdG8gcHJvdmlkZS9sb2NhbGl6ZSBhY3Rpb24gZGVzY3JpcHRpb25zLgorICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICIiOworfQorCitzdGF0aWMgY29uc3QgZ2NoYXIq
IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfa2V5YmluZGluZyhBdGtBY3Rpb24qIGFjdGlv
biwgZ2ludCBpKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFpLCAwKTsKKyAgICAvLyBG
SVhNRTogQ29uc3RydWN0IGEgcHJvcGVyIGtleWJpbmRpbmcgc3RyaW5nLgorICAgIHJldHVybiBy
ZXR1cm5TdHJpbmcoY29yZShhY3Rpb24pLT5hY2Nlc3NLZXkoKS5zdHJpbmcoKSk7Cit9CisKK3N0
YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9uYW1lKEF0a0Fj
dGlvbiogYWN0aW9uLCBnaW50IGkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWksIDAp
OworICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZShhY3Rpb24pLT5hY3Rpb25WZXJiKCkpOwor
fQorCitzdGF0aWMgdm9pZCBhdGtfYWN0aW9uX2ludGVyZmFjZV9pbml0KEF0a0FjdGlvbklmYWNl
KiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZG9fYWN0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfYWN0
aW9uX2RvX2FjdGlvbjsKKyAgICBpZmFjZS0+Z2V0X25fYWN0aW9ucyA9IHdlYmtpdF9hY2Nlc3Np
YmxlX2FjdGlvbl9nZXRfbl9hY3Rpb25zOworICAgIGlmYWNlLT5nZXRfZGVzY3JpcHRpb24gPSB3
ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X2Rlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRf
a2V5YmluZGluZyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfa2V5YmluZGluZzsKKyAg
ICBpZmFjZS0+Z2V0X25hbWUgPSB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X25hbWU7Cit9
CisKKy8vIFNlbGVjdGlvbiAoZm9yIGNvbnRyb2xzKQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdCogbGlzdE9iamVjdEZvclNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24p
OworCisgICAgLy8gT25seSBsaXN0IGJveGVzIGFuZCBtZW51IGxpc3RzIHN1cHBvcnRlZCBzbyBm
YXIuCisgICAgaWYgKCFjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSAmJiAhY29yZVNlbGVjdGlv
bi0+aXNNZW51TGlzdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZvciBsaXN0IGJv
eGVzIHRoZSBsaXN0IG9iamVjdCBpcyBqdXN0IGl0c2VsZi4KKyAgICBpZiAoY29yZVNlbGVjdGlv
bi0+aXNMaXN0Qm94KCkpCisgICAgICAgIHJldHVybiBjb3JlU2VsZWN0aW9uOworCisgICAgLy8g
Rm9yIG1lbnUgbGlzdHMgd2UgbmVlZCB0byByZXR1cm4gdGhlIGZpcnN0IGFjY2Vzc2libGUgY2hp
bGQsCisgICAgLy8gd2l0aCByb2xlIE1lbnVMaXN0UG9wdXBSb2xlLCBzaW5jZSB0aGF0J3MgdGhl
IG9uZSBob2xkaW5nIHRoZSBsaXN0CisgICAgLy8gb2YgaXRlbXMgd2l0aCByb2xlIE1lbnVMaXN0
T3B0aW9uUm9sZS4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgY2hpbGRyZW4gPSBjb3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOworICAgIGlmICgh
Y2hpbGRyZW4uc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGxpc3RPYmplY3QgPSBjaGlsZHJlbi5hdCgwKS5nZXQoKTsKKyAgICBpZiAoIWxpc3RP
YmplY3QtPmlzTWVudUxpc3RQb3B1cCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBsaXN0T2JqZWN0OworfQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJv
bUxpc3QoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKK3sKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworICAgIGlmICghY29y
ZVNlbGVjdGlvbiB8fCBpIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBOZWVkIHRv
IHNlbGVjdCB0aGUgcHJvcGVyIGxpc3Qgb2JqZWN0IGRlcGVuZGluZyBvbiB0aGUgdHlwZS4KKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T2JqZWN0ID0gbGlzdE9iamVjdEZvclNlbGVjdGlv
bihzZWxlY3Rpb24pOworICAgIGlmICghbGlzdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igb3B0
aW9ucyA9IGxpc3RPYmplY3QtPmNoaWxkcmVuKCk7CisgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxn
aW50PihvcHRpb25zLnNpemUoKSkpCisgICAgICAgIHJldHVybiBvcHRpb25zLmF0KGkpLmdldCgp
OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRp
b25Gcm9tU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50IGkpCit7CisgICAg
Ly8gaSBpcyB0aGUgaXRoIHNlbGVjdGlvbiBhcyBvcHBvc2VkIHRvIHRoZSBpdGggY2hpbGQuCisK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24p
OworICAgIGlmICghY29yZVNlbGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KCkgfHwgaSA8IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRl
bXM7CisgICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKQorICAgICAgICBjb3JlU2Vs
ZWN0aW9uLT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkSXRlbXMpOworICAgIGVsc2UgaWYgKGNv
cmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gY29yZVNlbGVjdGlvbi0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxl
Y3ROb2RlID0gdG9IVE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKKyAgICAgICAg
aW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3ROb2RlLT5zZWxlY3RlZEluZGV4KCk7CisgICAgICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IHNlbGVjdE5vZGUtPmxpc3RJ
dGVtcygpOworCisgICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgMCB8fCBzZWxlY3RlZEluZGV4
ID49IHN0YXRpY19jYXN0PGludD4obGlzdEl0ZW1zLnNpemUoKSkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICByZXR1cm4gb3B0aW9uRnJvbUxpc3Qoc2VsZWN0aW9uLCBzZWxlY3Rl
ZEluZGV4KTsKKyAgICB9CisKKyAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KHNlbGVjdGVk
SXRlbXMuc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuYXQoaSkuZ2V0KCk7
CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxl
X3NlbGVjdGlvbl9hZGRfc2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50IGkp
Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0
aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZyb21MaXN0KHNlbGVjdGlv
biwgaSk7CisgICAgaWYgKG9wdGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwg
Y29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKSkgeworICAgICAgICBvcHRpb24tPnNldFNlbGVj
dGVkKHRydWUpOworICAgICAgICByZXR1cm4gb3B0aW9uLT5pc1NlbGVjdGVkKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2li
bGVfc2VsZWN0aW9uX2NsZWFyX3NlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24p
OworICAgIGlmICghY29yZVNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVk
SXRlbXM7CisgICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rp
b24tPmlzTWVudUxpc3QoKSkgeworICAgICAgICAvLyBTZXQgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQg
aXRlbXMgdG8gYW4gZW1wdHkgbGlzdDsgdGhlbiB2ZXJpZnkgdGhhdCBpdCB3b3JrZWQuCisgICAg
ICAgIEFjY2Vzc2liaWxpdHlMaXN0Qm94KiBsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eUxpc3RCb3gqPihjb3JlU2VsZWN0aW9uKTsKKyAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0
ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgbGlzdEJveC0+c2VsZWN0ZWRDaGls
ZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgcmV0dXJuICFzZWxlY3RlZEl0ZW1zLnNpemUo
KTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJr
aXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVj
dGlvbiwgZ2ludCBpKQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlv
bkZyb21TZWxlY3Rpb24oc2VsZWN0aW9uLCBpKTsKKyAgICBpZiAob3B0aW9uKSB7CisgICAgICAg
IEF0a09iamVjdCogY2hpbGQgPSBvcHRpb24tPndyYXBwZXIoKTsKKyAgICAgICAgZ19vYmplY3Rf
cmVmKGNoaWxkKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fZ2V0X3NlbGVj
dGlvbl9jb3VudChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworICAgIGlmICghY29yZVNl
bGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgp
KSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBzZWxlY3RlZEl0ZW1zOworICAgICAgICBjb3JlU2VsZWN0aW9uLT5zZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkSXRlbXMpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2ludD4oc2Vs
ZWN0ZWRJdGVtcy5zaXplKCkpOworICAgIH0KKworICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc01l
bnVMaXN0KCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVTZWxlY3Rp
b24tPnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQo
cmVuZGVyZXItPm5vZGUoKSktPnNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIHNlbGVj
dGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwgc3RhdGljX2Nhc3Q8aW50Pih0b0hUTUxT
ZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5saXN0SXRlbXMoKS5zaXplKCkpOworICAg
IH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2li
bGVfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBn
aW50IGkpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUo
c2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCisgICAgICAgIHJldHVybiAwOwor
CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbUxpc3Qoc2VsZWN0
aW9uLCBpKTsKKyAgICBpZiAob3B0aW9uICYmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8
fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpKQorICAgICAgICByZXR1cm4gb3B0aW9uLT5p
c1NlbGVjdGVkKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fcmVtb3ZlX3NlbGVjdGlvbihBdGtTZWxlY3Rpb24q
IHNlbGVjdGlvbiwgZ2ludCBpKQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxl
Y3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7CisgICAgaWYgKCFjb3JlU2VsZWN0aW9uKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIFRPRE86IFRoaXMgaXMgb25seSBnZXR0aW5nIGNhbGxlZCBp
ZiBpID09IDAuIFdoYXQgaXMgcHJldmVudGluZyB0aGUgcmVzdD8KKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvcHRpb24gPSBvcHRpb25Gcm9tU2VsZWN0aW9uKHNlbGVjdGlvbiwgaSk7CisgICAg
aWYgKG9wdGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlv
bi0+aXNNZW51TGlzdCgpKSkgeworICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuICFvcHRpb24tPmlzU2VsZWN0ZWQoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rp
b25fc2VsZWN0X2FsbF9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKKyAg
ICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwgIWNvcmVTZWxlY3Rpb24tPmlzTXVsdGlTZWxlY3RhYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxk
cmVuKCk7CisgICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7CisgICAgICAgIEFj
Y2Vzc2liaWxpdHlMaXN0Qm94KiBsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxp
c3RCb3gqPihjb3JlU2VsZWN0aW9uKTsKKyAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGls
ZHJlbihjaGlsZHJlbik7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOworICAgICAgICBsaXN0Qm94LT5zZWxlY3Rl
ZENoaWxkcmVuKHNlbGVjdGVkSXRlbXMpOworICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5z
aXplKCkgPT0gY2hpbGRyZW4uc2l6ZSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
Kworc3RhdGljIHZvaWQgYXRrX3NlbGVjdGlvbl9pbnRlcmZhY2VfaW5pdChBdGtTZWxlY3Rpb25J
ZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRfYWNjZXNz
aWJsZV9zZWxlY3Rpb25fYWRkX3NlbGVjdGlvbjsKKyAgICBpZmFjZS0+Y2xlYXJfc2VsZWN0aW9u
ID0gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2NsZWFyX3NlbGVjdGlvbjsKKyAgICBpZmFj
ZS0+cmVmX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZWZfc2VsZWN0
aW9uOworICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uX2NvdW50ID0gd2Via2l0X2FjY2Vzc2libGVf
c2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQ7CisgICAgaWZhY2UtPmlzX2NoaWxkX3NlbGVj
dGVkID0gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkOworICAg
IGlmYWNlLT5yZW1vdmVfc2VsZWN0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX3Jl
bW92ZV9zZWxlY3Rpb247CisgICAgaWZhY2UtPnNlbGVjdF9hbGxfc2VsZWN0aW9uID0gd2Via2l0
X2FjY2Vzc2libGVfc2VsZWN0aW9uX3NlbGVjdF9hbGxfc2VsZWN0aW9uOworfQorCisvLyBUZXh0
CisKK3N0YXRpYyBnY2hhciogdXRmOFN1YnN0cihjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IHN0
YXJ0LCBnaW50IGVuZCkKK3sKKyAgICBBU1NFUlQoc3RyaW5nKTsKKyAgICBnbG9uZyBzdHJMZW4g
PSBnX3V0Zjhfc3RybGVuKHN0cmluZywgLTEpOworICAgIGlmIChzdGFydCA+IHN0ckxlbiB8fCBl
bmQgPiBzdHJMZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGdjaGFyKiBzdGFydFB0ciA9IGdf
dXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIHN0YXJ0KTsKKyAgICBnc2l6ZSBsZW5JbkJ5
dGVzID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgZW5kICsgMSkgLSAgc3RhcnRQ
dHI7CisgICAgZ2NoYXIqIG91dHB1dCA9IHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MwKGxl
bkluQnl0ZXMgKyAxKSk7CisgICAgcmV0dXJuIGdfdXRmOF9zdHJuY3B5KG91dHB1dCwgc3RhcnRQ
dHIsIGVuZCAtIHN0YXJ0ICsgMSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbXBs
ZXRlbHkgZ2VuZXJhbCwgaXMgaXQncyB0aWVkIHRvIHRoZQorLy8gaW50ZXJuYWxzIG9mIFdlYkNv
cmUncyB0ZXh0IHByZXNlbnRhdGlvbi4KK3N0YXRpYyBnY2hhciogY29udmVydFVuaUNoYXJUb1VU
RjgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGdpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50IHRv
KQoreworICAgIENTdHJpbmcgc3RyaW5nVVRGOCA9IFVURjhFbmNvZGluZygpLmVuY29kZShjaGFy
YWN0ZXJzLCBsZW5ndGgsIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOworICAgIGdjaGFy
KiB1dGY4U3RyaW5nID0gdXRmOFN1YnN0cihzdHJpbmdVVEY4LmRhdGEoKSwgZnJvbSwgdG8pOwor
ICAgIGlmICghZ191dGY4X3ZhbGlkYXRlKHV0ZjhTdHJpbmcsIC0xLCAwKSkgeworICAgICAgICBn
X2ZyZWUodXRmOFN0cmluZyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBnc2l6ZSBs
ZW4gPSBzdHJsZW4odXRmOFN0cmluZyk7CisgICAgR1N0cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3
X2xlbigwLCBsZW4pOworICAgIGdjaGFyKiBwdHIgPSB1dGY4U3RyaW5nOworCisgICAgLy8gV2Vi
Q29yZSBpbnRyb2R1Y2VzIGxpbmUgYnJlYWtzIGluIHRoZSB0ZXh0IHRoYXQgZG8gbm90IHJlZmxl
Y3QKKyAgICAvLyB0aGUgbGF5b3V0IHlvdSBzZWUgb24gdGhlIHNjcmVlbiwgcmVwbGFjZSB0aGVt
IHdpdGggc3BhY2VzCisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgZ2ludCBpbmRleCwg
c3RhcnQ7CisgICAgICAgIHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHB0ciwgbGVuLCAm
aW5kZXgsICZzdGFydCk7CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwdHIsIGlu
ZGV4KTsKKyAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZF9jKHJldCwgJyAnKTsKKyAgICAgICAgcHRyICs9IHN0YXJ0
OworICAgICAgICBsZW4gLT0gc3RhcnQ7CisgICAgfQorCisgICAgZ19mcmVlKHV0ZjhTdHJpbmcp
OworICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOworfQorCitnY2hhciogdGV4
dEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgR1N0cmluZyogcmVz
dWx0VGV4dCA9IGdfc3RyaW5nX25ldygwKTsKKworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
IHJldHVybiBnX3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNFKTsKKworICAgIC8vIEZvciBS
ZW5kZXJCbG9ja3MsIHBpZWNlIHRvZ2V0aGVyIHRoZSB0ZXh0IGZyb20gdGhlIFJlbmRlclRleHQg
b2JqZWN0cyB0aGV5IGNvbnRhaW4uCisgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJl
bmRlcmVyLT5maXJzdENoaWxkKCk7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgIGlmIChvYmplY3QtPmlzQlIoKSkgeworICAgICAgICAgICAgZ19zdHJp
bmdfYXBwZW5kKHJlc3VsdFRleHQsICJcbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0OworICAgICAgICBpZiAob2Jq
ZWN0LT5pc1RleHQoKSkKKyAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2Jq
ZWN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5pc1JlcGxhY2Vk
KCkpCisgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3VuaWNoYXIocmVzdWx0VGV4dCwg
b2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IGNoZWNrIGNoaWxkcmVuLCBpZiBhbnksIHRvIGNvbnNpZGVyIHdoZW4KKyAgICAgICAgICAgIC8v
IGN1cnJlbnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lIG9mIGl0cworICAg
ICAgICAgICAgLy8gY2hpbGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlzcyB0aG9zZSBwb3J0
aW9ucyBvZgorICAgICAgICAgICAgLy8gdGV4dCBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhv
c2Ugc2l0dWF0aW9ucworICAgICAgICAgICAgaWYgKG9iamVjdC0+Zmlyc3RDaGlsZCgpKQorICAg
ICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0Rm9yUmVuZGVyZXIo
b2JqZWN0KSk7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
SW5saW5lVGV4dEJveCogYm94ID0gcmVuZGVyVGV4dCA/IHJlbmRlclRleHQtPmZpcnN0VGV4dEJv
eCgpIDogMDsKKyAgICAgICAgd2hpbGUgKGJveCkgeworICAgICAgICAgICAgZ2NoYXIqIHRleHQg
PSBjb252ZXJ0VW5pQ2hhclRvVVRGOChyZW5kZXJUZXh0LT5jaGFyYWN0ZXJzKCksIHJlbmRlclRl
eHQtPnRleHRMZW5ndGgoKSwgYm94LT5zdGFydCgpLCBib3gtPmVuZCgpKTsKKyAgICAgICAgICAg
IGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0KTsKKyAgICAgICAgICAgIC8vIE5ld2xp
bmUgY2hhcnMgaW4gdGhlIHNvdXJjZSByZXN1bHQgaW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28g
Y2hlY2sKKyAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlv
dXQuIFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzguCisgICAgICAgICAgICAvLyBJZiB0aGUgbmV4
dCBzaWJsaW5nIGlzIGEgQlIsIHdlJ2xsIGFkZCB0aGUgbmV3bGluZSB3aGVuIHdlIGV4YW1pbmUg
dGhhdCBjaGlsZC4KKyAgICAgICAgICAgIGlmICghYm94LT5uZXh0T25MaW5lRXhpc3RzKCkgJiYg
KCFvYmplY3QtPm5leHRTaWJsaW5nKCkgfHwgIW9iamVjdC0+bmV4dFNpYmxpbmcoKS0+aXNCUigp
KSkKKyAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgIlxuIik7Cisg
ICAgICAgICAgICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBJbnNlcnQgdGhlIHRleHQgb2YgdGhlIG1hcmtlciBmb3IgbGlzdCBpdGVtIGluIHRo
ZSByaWdodCBwbGFjZSwgaWYgcHJlc2VudAorICAgIGlmIChyZW5kZXJlci0+aXNMaXN0SXRlbSgp
KSB7CisgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJl
ciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7CisgICAgICAgIGlmIChyZW5kZXJlci0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICAgICAgZ19zdHJpbmdfcHJlcGVuZChyZXN1
bHRUZXh0LCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgbWFya2VyVGV4dC51dGY4KCkuZGF0YSgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXN1bHRUZXh0LCBGQUxTRSk7
Cit9CisKK2djaGFyKiB0ZXh0Rm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QpCit7CisgICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOworCisgICAgLy8gRm9y
IHRleHQgY29udHJvbHMsIHdlIGNhbiBnZXQgdGhlIHRleHQgbGluZSBieSBsaW5lLgorICAgIGlm
IChjb3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKKyAgICAgICAgdW5zaWduZWQgdGV4dExl
bmd0aCA9IGNvcmVPYmplY3QtPnRleHRMZW5ndGgoKTsKKyAgICAgICAgaW50IGxpbmVOdW1iZXIg
PSAwOworICAgICAgICBQbGFpblRleHRSYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPmRvQVhSYW5n
ZUZvckxpbmUobGluZU51bWJlcik7CisgICAgICAgIHdoaWxlIChyYW5nZS5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIC8vIFdoZW4gYSBsaW5lIG9mIHRleHQgd3JhcHMgaW4gYSB0ZXh0IGFyZWEsIHRo
ZSBmaW5hbCBzcGFjZSBpcyByZW1vdmVkLgorICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ICsg
cmFuZ2UubGVuZ3RoIDwgdGV4dExlbmd0aCkKKyAgICAgICAgICAgICAgICByYW5nZS5sZW5ndGgg
LT0gMTsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lVGV4dCA9IGNvcmVPYmplY3QtPmRvQVhTdHJp
bmdGb3JSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBsaW5l
VGV4dC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJc
biIpOworICAgICAgICAgICAgcmFuZ2UgPSBjb3JlT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsr
bGluZU51bWJlcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNvcmVPYmplY3QtPmlzQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHJlbmRl
cmVyVGV4dCh0ZXh0Rm9yUmVuZGVyZXIoY29yZU9iamVjdC0+cmVuZGVyZXIoKSkpOworICAgICAg
ICBnX3N0cmluZ19hcHBlbmQoc3RyLCByZW5kZXJlclRleHQuZ2V0KCkpOworICAgIH0KKworICAg
IHJldHVybiBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0UpOworfQorCitzdGF0aWMgZ2NoYXIqIHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9m
ZnNldCwgZ2ludCBlbmRPZmZzZXQpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCA9IGNvcmUodGV4dCk7CisKKyAgICBpbnQgZW5kID0gZW5kT2Zmc2V0OworICAgIGlmIChl
bmRPZmZzZXQgPT0gLTEpIHsKKyAgICAgICAgZW5kID0gY29yZU9iamVjdC0+c3RyaW5nVmFsdWUo
KS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICBlbmQgPSBjb3JlT2Jq
ZWN0LT50ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7CisgICAgfQorCisgICAgU3RyaW5nIHJl
dDsKKyAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQorICAgICAgICByZXQgPSBj
b3JlT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UoMCwgZW5kT2Zmc2V0
KSk7CisgICAgZWxzZSB7CisgICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCk7
CisgICAgICAgIGlmICghcmV0KQorICAgICAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+dGV4dFVu
ZGVyRWxlbWVudCgpOworICAgIH0KKworICAgIGlmICghcmV0Lmxlbmd0aCgpKSB7CisgICAgICAg
IC8vIFRoaXMgY2FuIGhhcHBlbiBhdCBsZWFzdCB3aXRoIGFub255bW91cyBSZW5kZXJCbG9ja3Mg
KGUuZy4gYm9keSB0ZXh0IGFtb25nc3QgcGFyYWdyYXBocykKKyAgICAgICAgcmV0ID0gU3RyaW5n
KHRleHRGb3JPYmplY3QoY29yZU9iamVjdCkpOworICAgICAgICBpZiAoIWVuZCkKKyAgICAgICAg
ICAgIGVuZCA9IHJldC5sZW5ndGgoKTsKKyAgICB9CisKKyAgICAvLyBQcmVmaXggYSBpdGVtIG51
bWJlci9idWxsZXQgaWYgbmVlZGVkCisgICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09
IExpc3RJdGVtUm9sZSkgeworICAgICAgICBSZW5kZXJPYmplY3QqIG9ialJlbmRlcmVyID0gY29y
ZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKG9ialJlbmRlcmVyICYmIG9ialJlbmRl
cmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9S
ZW5kZXJMaXN0SXRlbShvYmpSZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7CisgICAg
ICAgICAgICByZXQgPSBvYmpSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8g
bWFya2VyVGV4dCArIHJldCA6IHJldCArIG1hcmtlclRleHQ7CisgICAgICAgICAgICBpZiAoZW5k
T2Zmc2V0ID09IC0xKQorICAgICAgICAgICAgICAgIGVuZCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0ID0gcmV0LnN1YnN0cmluZyhzdGFydE9mZnNl
dCwgZW5kIC0gc3RhcnRPZmZzZXQpOworICAgIHJldHVybiBnX3N0cmR1cChyZXQudXRmOCgpLmRh
dGEoKSk7Cit9CisKK3N0YXRpYyBHYWlsVGV4dFV0aWwqIGdldEdhaWxUZXh0VXRpbEZvckF0ayhB
dGtUZXh0KiB0ZXh0T2JqZWN0KQoreworICAgIEdhaWxUZXh0VXRpbCogZ2FpbFRleHRVdGlsID0g
Z2FpbF90ZXh0X3V0aWxfbmV3KCk7CisgICAgZ2FpbF90ZXh0X3V0aWxfdGV4dF9zZXR1cChnYWls
VGV4dFV0aWwsIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQodGV4dE9iamVjdCwgMCwg
LTEpKTsKKyAgICByZXR1cm4gZ2FpbFRleHRVdGlsOworfQorCitzdGF0aWMgUGFuZ29MYXlvdXQq
IGdldFBhbmdvTGF5b3V0Rm9yQXRrKEF0a1RleHQqIHRleHRPYmplY3QpCit7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dE9iamVjdCk7CisKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1l
bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRv
Y3VtZW50LT52aWV3KCktPmhvc3RXaW5kb3coKTsKKyAgICBpZiAoIWhvc3RXaW5kb3cpCisgICAg
ICAgIHJldHVybiAwOworICAgIFBsYXRmb3JtUGFnZUNsaWVudCB3ZWJWaWV3ID0gaG9zdFdpbmRv
dy0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CisgICAgaWYgKCF3ZWJWaWV3KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8vIENyZWF0ZSBhIHN0cmluZyB3aXRoIHRoZSBsYXlvdXQgYXMgaXQgYXBw
ZWFycyBvbiB0aGUgc2NyZWVuCisgICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IGd0a193aWRnZXRf
Y3JlYXRlX3BhbmdvX2xheW91dChzdGF0aWNfY2FzdDxHdGtXaWRnZXQqPih3ZWJWaWV3KSwgdGV4
dEZvck9iamVjdChjb3JlT2JqZWN0KSk7CisgICAgcmV0dXJuIGxheW91dDsKK30KKworc3RhdGlj
IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldChBdGtU
ZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2lu
dCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3sKKyAgICByZXR1cm4gZ2FpbF90ZXh0
X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91
dEZvckF0ayh0ZXh0KSwgR0FJTF9BRlRFUl9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKworc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF90ZXh0X2F0X29mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwg
QXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVu
ZE9mZnNldCkKK3sKKyAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRl
eHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BVF9P
RkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30K
Kworc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9v
ZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFy
eVR5cGUsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCit7CisgICAgcmV0dXJu
IGdhaWxfdGV4dF91dGlsX2dldF90ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0ZXh0KSwgZ2V0
UGFuZ29MYXlvdXRGb3JBdGsodGV4dCksIEdBSUxfQkVGT1JFX09GRlNFVCwgYm91bmRhcnlUeXBl
LCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworfQorCitzdGF0aWMgZ3VuaWNoYXIg
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2F0X29mZnNldChBdGtUZXh0KiB0
ZXh0LCBnaW50IG9mZnNldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZz
ZXQoQXRrVGV4dCogdGV4dCkKK3sKKyAgICAvLyBjb3JlT2JqZWN0IGlzIHRoZSB1bmlnbm9yZWQg
b2JqZWN0IHdob3NlIG9mZnNldCB0aGUgY2FsbGVyIGlzIHJlcXVlc3RpbmcuCisgICAgLy8gZm9j
dXNlZE9iamVjdCBpcyB0aGUgb2JqZWN0IHdpdGggdGhlIGNhcmV0LiBJdCBpcyBsaWtlbHkgaWdu
b3JlZCAtLSB1bmxlc3MgaXQncyBhIGxpbmsuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgb2Zmc2V0Owor
ICAgIGlmICghb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3Qs
IG9mZnNldCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVy
LT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxp
c3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKworICAgICAgICAvLyBX
ZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAg
ICAgICAgb2Zmc2V0ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gVE9E
TzogVmVyaWZ5IHRoaXMgZm9yIFJUTCB0ZXh0LgorICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3N0
YXRpYyBpbnQgYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBiYXNl
bGluZVBvc2l0aW9uIG9yaWdpbmF0ZXMgZnJvbSBSZW5kZXJPYmplY3QuY3BwIGFuZCB3YXMKKyAg
ICAvLyByZW1vdmVkIGluIHI3MDA3Mi4gVGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGluY29ycmVj
dCB0aG91Z2gsIGJlY2F1c2UgdGhpcyBpcyBub3QgdGhlCisgICAgLy8gYmFzZWxpbmUgb2YgdGhl
IHVuZGVybHlpbmcgUmVuZGVyT2JqZWN0LCBidXQgb2YgdGhlIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuCisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyT2JqZWN0
LT5maXJzdExpbmVTdHlsZSgpLT5mb250TWV0cmljcygpOworICAgIHJldHVybiBmb250TWV0cmlj
cy5hc2NlbnQoKSArIChyZW5kZXJPYmplY3QtPmZpcnN0TGluZVN0eWxlKCktPmNvbXB1dGVkTGlu
ZUhlaWdodCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsKK30KKworc3RhdGljIEF0a0F0
dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9
IDA7CisgICAgR093blB0cjxnY2hhcj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHls
ZS0+Zm9udFNpemUoKSkpOworICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwg
YXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU0laRSksIGJ1ZmZlci5n
ZXQoKSk7CisKKyAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgp
KSB7CisgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnQ29sb3IucmVkKCksIGJnQ29sb3IuZ3Jl
ZW4oKSwgYmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9T
ZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9CR19D
T0xPUiksIGJ1ZmZlci5nZXQoKSk7CisgICAgfQorCisgICAgQ29sb3IgZmdDb2xvciA9IHN0eWxl
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CisgICAgaWYgKGZnQ29s
b3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwl
aSwlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnQ29sb3IucmVkKCks
IGZnQ29sb3IuZ3JlZW4oKSwgZmdDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRk
QXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CisgICAgfQorCisgICAgaW50IGJhc2Vs
aW5lUG9zaXRpb247CisgICAgYm9vbCBpbmNsdWRlUmlzZSA9IHRydWU7CisgICAgc3dpdGNoIChz
dHlsZS0+dmVydGljYWxBbGlnbigpKSB7CisgICAgY2FzZSBTVUI6CisgICAgICAgIGJhc2VsaW5l
UG9zaXRpb24gPSAtMSAqIGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QocmVuZGVyZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNVUEVSOgorICAgICAgICBiYXNlbGluZVBvc2l0
aW9uID0gYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChyZW5kZXJlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQkFTRUxJTkU6CisgICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAw
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBpbmNsdWRlUmlzZSA9IGZh
bHNlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaW5jbHVkZVJpc2UpIHsKKyAg
ICAgICAgYnVmZmVyLnNldChnX3N0cmR1cF9wcmludGYoIiVpIiwgYmFzZWxpbmVQb3NpdGlvbikp
OworICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0
dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1JJU0UpLCBidWZmZXIuZ2V0KCkpOworICAg
IH0KKworICAgIGlmICghc3R5bGUtPnRleHRJbmRlbnQoKS5pc1VuZGVmaW5lZCgpKSB7CisgICAg
ICAgIGludCBpbmRlbnRhdGlvbiA9IHN0eWxlLT50ZXh0SW5kZW50KCkuY2FsY1ZhbHVlKG9iamVj
dC0+c2l6ZSgpLndpZHRoKCkpOworICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50Zigi
JWkiLCBpbmRlbnRhdGlvbikpOworICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCks
IGJ1ZmZlci5nZXQoKSk7CisgICAgfQorCisgICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5
bGUtPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKTsKKyAgICBpZiAoZm9udEZhbWls
eU5hbWUubGVmdCg4KSA9PSAiLXdlYmtpdC0iKQorICAgICAgICBmb250RmFtaWx5TmFtZSA9IGZv
bnRGYW1pbHlOYW1lLnN1YnN0cmluZyg4KTsKKworICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRv
U2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkFN
SUxZX05BTUUpLCBmb250RmFtaWx5TmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGludCBmb250
V2VpZ2h0ID0gLTE7CisgICAgc3dpdGNoIChzdHlsZS0+Zm9udCgpLndlaWdodCgpKSB7CisgICAg
Y2FzZSBGb250V2VpZ2h0MTAwOgorICAgICAgICBmb250V2VpZ2h0ID0gMTAwOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQyMDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSAyMDA7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFdlaWdodDMwMDoKKyAgICAgICAgZm9udFdl
aWdodCA9IDMwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250V2VpZ2h0NDAwOgorICAg
ICAgICBmb250V2VpZ2h0ID0gNDAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWln
aHQ1MDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSA1MDA7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRm9udFdlaWdodDYwMDoKKyAgICAgICAgZm9udFdlaWdodCA9IDYwMDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGb250V2VpZ2h0NzAwOgorICAgICAgICBmb250V2VpZ2h0ID0gNzAwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6CisgICAgICAgIGZvbnRXZWln
aHQgPSA4MDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFdlaWdodDkwMDoKKyAgICAg
ICAgZm9udFdlaWdodCA9IDkwMDsKKyAgICB9CisgICAgaWYgKGZvbnRXZWlnaHQgPiAwKSB7Cisg
ICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGZvbnRXZWlnaHQpKTsKKyAg
ICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1
dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9XRUlHSFQpLCBidWZmZXIuZ2V0KCkpOworICAgIH0K
KworICAgIHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUQUFVVE86Cisg
ICAgY2FzZSBUQVNUQVJUOgorICAgIGNhc2UgVEFFTkQ6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTEVGVDoKKyAgICBjYXNlIFdFQktJVF9MRUZUOgorICAgICAgICByZXN1bHQgPSBhZGRBdHRy
aWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9B
VFRSX0pVU1RJRklDQVRJT04pLCAibGVmdCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJJ
R0hUOgorICAgIGNhc2UgV0VCS0lUX1JJR0hUOgorICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1
dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRS
X0pVU1RJRklDQVRJT04pLCAicmlnaHQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDRU5U
RVI6CisgICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgorICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1
dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRS
X0pVU1RJRklDQVRJT04pLCAiY2VudGVyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlVT
VElGWToKKyAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4
dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgImZpbGwi
KTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1VOREVSTElORSksIChzdHlsZS0+
dGV4dERlY29yYXRpb24oKSAmIFVOREVSTElORSkgPyAic2luZ2xlIiA6ICJub25lIik7CisKKyAg
ICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwgc3R5bGUtPmZvbnQoKS5pdGFsaWMoKSA/ICJp
dGFsaWMiIDogIm5vcm1hbCIpOworCisgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVz
dWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJP
VUdIKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpICYgTElORV9USFJPVUdIKSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOworCisgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtf
dGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9JTlZJU0lCTEUpLCAoc3R5bGUt
PnZpc2liaWxpdHkoKSA9PSBISURERU4pID8gInRydWUiIDogImZhbHNlIik7CisKKyAgICByZXN1
bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShBVEtfVEVYVF9BVFRSX0VESVRBQkxFKSwgb2JqZWN0LT5pc1JlYWRPbmx5KCkgPyAiZmFsc2Ui
IDogInRydWUiKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnaW50IGNvbXBh
cmVBdHRyaWJ1dGUoY29uc3QgQXRrQXR0cmlidXRlKiBhLCBjb25zdCBBdGtBdHRyaWJ1dGUqIGIp
Cit7CisgICAgcmV0dXJuIGdfc3RyY21wMChhLT5uYW1lLCBiLT5uYW1lKSB8fCBnX3N0cmNtcDAo
YS0+dmFsdWUsIGItPnZhbHVlKTsKK30KKworLy8gUmV0dXJucyBhbiBBdGtBdHRyaWJ1dGVTZXQg
d2l0aCB0aGUgZWxlbWVudHMgb2YgYTEgd2hpY2ggYXJlIGVpdGhlcgorLy8gbm90IHByZXNlbnQg
b3IgZGlmZmVyZW50IGluIGEyLiBOZWl0aGVyIGExIG5vciBhMiBzaG91bGQgYmUgdXNlZAorLy8g
YWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogYXR0
cmlidXRlU2V0RGlmZmVyZW5jZShBdGtBdHRyaWJ1dGVTZXQqIGExLCBBdGtBdHRyaWJ1dGVTZXQq
IGEyKQoreworICAgIGlmICghYTIpCisgICAgICAgIHJldHVybiBhMTsKKworICAgIEF0a0F0dHJp
YnV0ZVNldCogaSA9IGExOworICAgIEF0a0F0dHJpYnV0ZVNldCogZm91bmQ7CisgICAgQXRrQXR0
cmlidXRlU2V0KiB0b0RlbGV0ZSA9IDA7CisKKyAgICB3aGlsZSAoaSkgeworICAgICAgICBmb3Vu
ZCA9IGdfc2xpc3RfZmluZF9jdXN0b20oYTIsIGktPmRhdGEsIChHQ29tcGFyZUZ1bmMpY29tcGFy
ZUF0dHJpYnV0ZSk7CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgQXRrQXR0cmli
dXRlU2V0KiB0ID0gaS0+bmV4dDsKKyAgICAgICAgICAgIHRvRGVsZXRlID0gZ19zbGlzdF9wcmVw
ZW5kKHRvRGVsZXRlLCBpLT5kYXRhKTsKKyAgICAgICAgICAgIGExID0gZ19zbGlzdF9kZWxldGVf
bGluayhhMSwgaSk7CisgICAgICAgICAgICBpID0gdDsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBpID0gaS0+bmV4dDsKKyAgICB9CisKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKGEy
KTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHRvRGVsZXRlKTsKKyAgICByZXR1cm4gYTE7
Cit9CisKK3N0YXRpYyBndWludCBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCkKK3sKKyAgICAvLyBOb24gcmVuZGVyIG9iamVjdHMgYXJl
IG5vdCB0YWtlbiBpbnRvIGFjY291bnQKKyAgICBpZiAoIW9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRm9yIHRob3NlIG9i
amVjdHMgaW1wbGVtZW50aW5nIHRoZSBBdGtUZXh0IGludGVyZmFjZSB3ZSB1c2UgdGhlCisgICAg
Ly8gd2VsbCBrbm93biBBUEkgdG8gYWx3YXlzIGdldCB0aGUgdGV4dCBpbiBhIGNvbnNpc3RlbnQg
d2F5CisgICAgQXRrT2JqZWN0KiBhdGtPYmogPSBBVEtfT0JKRUNUKG9iamVjdC0+d3JhcHBlcigp
KTsKKyAgICBpZiAoQVRLX0lTX1RFWFQoYXRrT2JqKSkgeworICAgICAgICBHT3duUHRyPGdjaGFy
PiB0ZXh0KHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQoYXRrT2JqKSwg
MCwgLTEpKTsKKyAgICAgICAgcmV0dXJuIGdfdXRmOF9zdHJsZW4odGV4dC5nZXQoKSwgLTEpOwor
ICAgIH0KKworICAgIC8vIEV2ZW4gaWYgd2UgZG9uJ3QgZXhwb3NlIGxpc3QgbWFya2VycyB0byBB
c3Npc3RpdmUKKyAgICAvLyBUZWNobm9sb2dpZXMsIHdlIG5lZWQgdG8gaGF2ZSBhIHdheSB0byBt
ZWFzdXJlIHRoZWlyIGxlbmd0aAorICAgIC8vIGZvciB0aG9zZSBjYXNlcyB3aGVuIGl0J3MgbmVl
ZGVkIHRvIHRha2UgaXQgaW50byBhY2NvdW50CisgICAgLy8gc2VwYXJhdGVseSAoYXMgaW4gZ2V0
QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldCkKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gb2JqZWN0LT5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNM
aXN0TWFya2VyKCkpIHsKKyAgICAgICAgUmVuZGVyTGlzdE1hcmtlciogbWFya2VyID0gdG9SZW5k
ZXJMaXN0TWFya2VyKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIG1hcmtlci0+dGV4dCgpLmxl
bmd0aCgpICsgbWFya2VyLT5zdWZmaXgoKS5sZW5ndGgoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldEFjY2Vzc2liaWxp
dHlPYmplY3RGb3JPZmZzZXQoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBndWlu
dCBvZmZzZXQsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCit7CisgICAgY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcmVzdWx0OworICAgIGd1aW50IGxlbmd0aCA9IGFjY2Vz
c2liaWxpdHlPYmplY3RMZW5ndGgob2JqZWN0KTsKKyAgICBpZiAobGVuZ3RoID4gb2Zmc2V0KSB7
CisgICAgICAgICpzdGFydE9mZnNldCA9IDA7CisgICAgICAgICplbmRPZmZzZXQgPSBsZW5ndGg7
CisgICAgICAgIHJlc3VsdCA9IG9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICAqc3RhcnRP
ZmZzZXQgPSAtMTsKKyAgICAgICAgKmVuZE9mZnNldCA9IC0xOworICAgICAgICByZXN1bHQgPSAw
OworICAgIH0KKworICAgIGlmICghb2JqZWN0LT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmly
c3RDaGlsZCgpOworICAgIGd1aW50IGN1cnJlbnRPZmZzZXQgPSAwOworICAgIGd1aW50IGNoaWxk
UG9zaXRpb24gPSAwOworICAgIHdoaWxlIChjaGlsZCAmJiBjdXJyZW50T2Zmc2V0IDw9IG9mZnNl
dCkgeworICAgICAgICBndWludCBjaGlsZExlbmd0aCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5n
dGgoY2hpbGQpOworICAgICAgICBjdXJyZW50T2Zmc2V0ID0gY2hpbGRMZW5ndGggKyBjaGlsZFBv
c2l0aW9uOworICAgICAgICBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkgeworICAgICAgICAg
ICAgZ2ludCBjaGlsZFN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgZ2ludCBjaGlsZEVuZE9mZnNl
dDsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGdyYW5kQ2hpbGQgPSBn
ZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KGNoaWxkLCBvZmZzZXQtY2hpbGRQb3NpdGlv
biwgICZjaGlsZFN0YXJ0T2Zmc2V0LCAmY2hpbGRFbmRPZmZzZXQpOworICAgICAgICAgICAgaWYg
KGNoaWxkU3RhcnRPZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgICAgICpzdGFydE9mZnNldCA9
IGNoaWxkU3RhcnRPZmZzZXQgKyBjaGlsZFBvc2l0aW9uOworICAgICAgICAgICAgICAgICplbmRP
ZmZzZXQgPSBjaGlsZEVuZE9mZnNldCArIGNoaWxkUG9zaXRpb247CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gZ3JhbmRDaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGNoaWxkUG9zaXRpb24gKz0gY2hpbGRMZW5ndGg7CisgICAgICAgICAgICBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldFJ1bkF0dHJpYnV0ZXNGcm9t
QWNjZXNpYmlsaXR5T2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGVsZW1lbnQsIGdp
bnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QgKmNoaWxkID0gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZv
ck9mZnNldChlbGVtZW50LCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIGlm
ICghY2hpbGQpIHsKKyAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gLTE7CisgICAgICAgICplbmRPZmZz
ZXQgPSAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXRrQXR0cmlidXRlU2V0
KiBkZWZhdWx0QXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmpl
Y3QoZWxlbWVudCk7CisgICAgQXRrQXR0cmlidXRlU2V0KiBjaGlsZEF0dHJpYnV0ZXMgPSBnZXRB
dHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNoaWxkKTsKKworICAgIHJldHVybiBh
dHRyaWJ1dGVTZXREaWZmZXJlbmNlKGNoaWxkQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMp
OworfQorCitzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dl
dF9ydW5fYXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRP
ZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdDsKKworICAg
IGlmICghY29yZU9iamVjdCkgeworICAgICAgICAqc3RhcnRPZmZzZXQgPSAwOworICAgICAgICAq
ZW5kT2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudCh0ZXh0KTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKG9mZnNldCA9PSAtMSkKKyAgICAgICAgb2Zmc2V0
ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0KTsKKworICAgIHJlc3VsdCA9IGdldFJ1
bkF0dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QsIG9mZnNldCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBpZiAoKnN0YXJ0T2Zmc2V0IDwgMCkgeworICAg
ICAgICAqc3RhcnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICplbmRPZmZzZXQgPSBvZmZzZXQ7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEF0a0F0dHJpYnV0ZVNl
dCogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEF0a1RleHQq
IHRleHQpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4
dCk7CisgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ2V0QXR0cmli
dXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb3JlT2JqZWN0KTsKK30KKworc3RhdGljIElu
dFJlY3QgdGV4dEV4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBs
ZW5ndGgsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCit7CisgICAgZ2NoYXIqIHRleHRDb250ZW50ID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCh0ZXh0LCBzdGFydE9mZnNldCwgLTEpOwor
ICAgIGdpbnQgdGV4dExlbmd0aCA9IGdfdXRmOF9zdHJsZW4odGV4dENvbnRlbnQsIC0xKTsKKwor
ICAgIC8vIFRoZSBmaXJzdCBjYXNlIChlbmRPZmZzZXQgb2YgLTEpIHNob3VsZCB3b3JrLCBidXQg
c2VlbXMgYnJva2VuIGZvciBhbGwgR3RrKyBhcHBzLgorICAgIGdpbnQgcmFuZ2VMZW5ndGggPSBs
ZW5ndGg7CisgICAgaWYgKHJhbmdlTGVuZ3RoIDwgMCB8fCByYW5nZUxlbmd0aCA+IHRleHRMZW5n
dGgpCisgICAgICAgIHJhbmdlTGVuZ3RoID0gdGV4dExlbmd0aDsKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKworICAgIEludFJlY3QgZXh0ZW50cyA9
IGNvcmVPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFydE9mZnNl
dCwgcmFuZ2VMZW5ndGgpKTsKKyAgICBzd2l0Y2ggKGNvb3JkcykgeworICAgIGNhc2UgQVRLX1hZ
X1NDUkVFTjoKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRv
Y3VtZW50KCkpCisgICAgICAgICAgICBleHRlbnRzID0gZG9jdW1lbnQtPnZpZXcoKS0+Y29udGVu
dHNUb1NjcmVlbihleHRlbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBVEtfWFlfV0lO
RE9XOgorICAgICAgICAvLyBOby1vcAorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gZXh0ZW50czsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
Y2hhcmFjdGVyX2V4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHgsIGdp
bnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCit7
CisgICAgSW50UmVjdCBleHRlbnRzID0gdGV4dEV4dGVudHModGV4dCwgb2Zmc2V0LCAxLCBjb29y
ZHMpOworICAgICp4ID0gZXh0ZW50cy54KCk7CisgICAgKnkgPSBleHRlbnRzLnkoKTsKKyAgICAq
d2lkdGggPSBleHRlbnRzLndpZHRoKCk7CisgICAgKmhlaWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVu
dHMoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nv
b3JkVHlwZSBjb29yZHMsIEF0a1RleHRSZWN0YW5nbGUqIHJlY3QpCit7CisgICAgSW50UmVjdCBl
eHRlbnRzID0gdGV4dEV4dGVudHModGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0
T2Zmc2V0LCBjb29yZHMpOworICAgIHJlY3QtPnggPSBleHRlbnRzLngoKTsKKyAgICByZWN0LT55
ID0gZXh0ZW50cy55KCk7CisgICAgcmVjdC0+d2lkdGggPSBleHRlbnRzLndpZHRoKCk7CisgICAg
cmVjdC0+aGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsKK30KKworc3RhdGljIGdpbnQgd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KEF0a1RleHQqIHRleHQpCit7Cisg
ICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY29yZSh0ZXh0KSk7Cit9CisKK3N0
YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludChBdGtU
ZXh0KiB0ZXh0LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlIGNvb3JkcykKK3sKKyAgICAv
LyBGSVhNRTogVXNlIHRoZSBBdGtDb29yZFR5cGUKKyAgICAvLyBUT0RPOiBJcyBpdCBjb3JyZWN0
IHRvIGlnbm9yZSByYW5nZS5sZW5ndGg/CisgICAgSW50UG9pbnQgcG9zKHgsIHkpOworICAgIFBs
YWluVGV4dFJhbmdlIHJhbmdlID0gY29yZSh0ZXh0KS0+ZG9BWFJhbmdlRm9yUG9zaXRpb24ocG9z
KTsKKyAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7Cit9CisKK3N0YXRpYyB2b2lkIGdldFNlbGVjdGlv
bk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBnaW50JiBzdGFydE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0
KQoreworICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgc2VsZWN0aW9u
IGRvZXNuJ3QgYWZmZWN0IHRoZSBzZWxlY3RlZCBub2RlLgorICAgIGlmICghc2VsZWN0aW9uQmVs
b25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgZXhhY3Qgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMg
aW4gdGhlCisgICAgLy8gc2VsZWN0ZWQgbm9kZSB0aGF0IGludGVyc2VjdHMgdGhlIHNlbGVjdGlv
biwgdG8gbGF0ZXIgb24gZ2V0CisgICAgLy8gdGhlIHJpZ2h0IHZhbHVlcyBmb3IgdGhlIGVmZmVj
dGl2ZSBzdGFydCBhbmQgZW5kIG9mZnNldHMuCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgUG9zaXRpb24gbm9kZVJhbmdlU3RhcnQ7CisgICAgUG9zaXRpb24gbm9kZVJhbmdlRW5kOwor
ICAgIE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0LT5ub2RlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBz
ZWxSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworCisgICAgLy8gSWYgdGhl
IHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgZmlyc3QKKyAgICAv
LyBwb3NzaWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0
CisgICAgLy8gbm9kZVJhbmdlU3RhcnQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRo
ZSBzZWxlY3Rpb24ncworICAgIC8vIHN0YXJ0IHBvc2l0aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8g
dGhlIG5vZGUgYW55d2F5KS4KKyAgICBOb2RlKiBmaXJzdExlYWZOb2RlID0gbm9kZS0+Zmlyc3RE
ZXNjZW5kYW50KCk7CisgICAgaWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShmaXJzdExlYWZO
b2RlLCAwLCBlYykpCisgICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKGZpcnN0TGVhZk5vZGUpOworICAgIGVsc2UKKyAgICAgICAgbm9kZVJhbmdlU3Rh
cnQgPSBzZWxSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworCisgICAgLy8gSWYgdGhlIHNlbGVjdGlv
biBhZmZlY3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgbGFzdAorICAgIC8vIHBvc3NpYmxl
IHBvc2l0aW9uIGlzIGFsc28gaW4gdGhlIHNlbGVjdGlvbiwgd2UgbXVzdCBzZXQKKyAgICAvLyBu
b2RlUmFuZ2VFbmQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24n
cworICAgIC8vIGVuZCBwb3NpdGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdh
eSkuCisgICAgTm9kZSogbGFzdExlYWZOb2RlID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKKyAg
ICBpZiAoc2VsUmFuZ2UtPmlzUG9pbnRJblJhbmdlKGxhc3RMZWFmTm9kZSwgbGFzdE9mZnNldElu
Tm9kZShsYXN0TGVhZk5vZGUpLCBlYykpCisgICAgICAgIG5vZGVSYW5nZUVuZCA9IGxhc3RQb3Np
dGlvbkluT3JBZnRlck5vZGUobGFzdExlYWZOb2RlKTsKKyAgICBlbHNlCisgICAgICAgIG5vZGVS
YW5nZUVuZCA9IHNlbFJhbmdlLT5lbmRQb3NpdGlvbigpOworCisgICAgLy8gQ2FsY3VsYXRlIHBv
c2l0aW9uIG9mIHRoZSBzZWxlY3RlZCByYW5nZSBpbnNpZGUgdGhlIG9iamVjdC4KKyAgICBQb3Np
dGlvbiBwYXJlbnRGaXJzdFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5v
ZGUpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VJblBhcmVudCA9IFJhbmdlOjpjcmVhdGUobm9k
ZS0+ZG9jdW1lbnQoKSwgcGFyZW50Rmlyc3RQb3NpdGlvbiwgbm9kZVJhbmdlU3RhcnQpOworCisg
ICAgLy8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgorICAgIHN0YXJ0T2Zm
c2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZUluUGFyZW50LmdldCgpLCB0cnVl
KTsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBp
dGVtIG1hcmtlci4KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVu
ZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewor
ICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5t
YXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBzdGFydE9mZnNldCArPSBtYXJrZXJUZXh0
Lmxlbmd0aCgpOworICAgIH0KKworICAgIFJlZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFuZ2VTdGFydCwgbm9kZVJhbmdlRW5kKTsK
KyAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bm9kZVJhbmdlLmdldCgpLCB0cnVlKTsKK30KKworc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKEF0a1RleHQqIHRleHQpCit7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24gPSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKTsKKworICAgIC8vIE9ubHkgcmFu
Z2Ugc2VsZWN0aW9ucyBhcmUgbmVlZGVkIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZAor
ICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAv
LyBXZSBkb24ndCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMgZm9yIG5vdywgc28gdGhlcmUn
cyBvbmx5CisgICAgLy8gdHdvIHBvc3NpYmlsaXRpZXMKKyAgICAvLyBBbHNvLCB3ZSBkb24ndCB3
YW50IHRvIGRvIGFueXRoaW5nIGlmIHRoZSBzZWxlY3Rpb24gZG9lcyBub3QKKyAgICAvLyBiZWxv
bmcgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvYmplY3QuIFdlIGhhdmUgdG8gY2hlY2sgc2lu
Y2UKKyAgICAvLyB0aGVyZSdzIG5vIHdheSB0byBnZXQgdGhlIHNlbGVjdGlvbiBmb3IgYSBnaXZl
biBvYmplY3QsIG9ubHkKKyAgICAvLyB0aGUgZ2xvYmFsIG9uZSAodGhlIEFQSSBpcyBhIGJpdCBj
b25mdXNpbmcpCisgICAgcmV0dXJuIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2JqZWN0
LCBzZWxlY3Rpb24pID8gMSA6IDA7Cit9CisKK3N0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBn
aW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIC8vIERlZmF1bHQgdmFs
dWVzLCB1bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZAorICAgICpzdGFydE9mZnNldCA9ICpl
bmRPZmZzZXQgPSAwOworCisgICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxl
IHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93
LgorICAgIGlmIChzZWxlY3Rpb25OdW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR2V0
IHRoZSBvZmZzZXRzIG9mIHRoZSBzZWxlY3Rpb24gZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworICAgIGdl
dFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uLCAqc3RhcnRP
ZmZzZXQsICplbmRPZmZzZXQpOworCisgICAgLy8gUmV0dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMg
dGhhdCdzIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yCisgICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhv
ZCB3aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uCisgICAgaWYgKCpzdGFydE9mZnNldCA9PSAqZW5k
T2Zmc2V0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF90ZXh0KHRleHQsICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rpb24oQXRrVGV4
dCogdGV4dCwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNldCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNl
bGVjdGlvbk51bSwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpCit7CisgICAgLy8g
V2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcg
YnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgorICAgIGlmIChzZWxlY3Rpb25OdW0p
CisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QgPSBjb3JlKHRleHQpOworICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8vIENvbnNpZGVy
IC0xIGFuZCBvdXQtb2YtYm91bmQgdmFsdWVzIGFuZCBjb3JyZWN0IHRoZW0gdG8gbGVuZ3RoCisg
ICAgZ2ludCB0ZXh0Q291bnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJf
Y291bnQodGV4dCk7CisgICAgaWYgKHN0YXJ0T2Zmc2V0IDwgMCB8fCBzdGFydE9mZnNldCA+IHRl
eHRDb3VudCkKKyAgICAgICAgc3RhcnRPZmZzZXQgPSB0ZXh0Q291bnQ7CisgICAgaWYgKGVuZE9m
ZnNldCA8IDAgfHwgZW5kT2Zmc2V0ID4gdGV4dENvdW50KQorICAgICAgICBlbmRPZmZzZXQgPSB0
ZXh0Q291bnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0cyBmb3IgdGhl
IGxpc3QgaXRlbSBtYXJrZXIuCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmpl
Y3QtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVt
KCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRl
cmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKyAgICAgICAgaW50IG1hcmtlckxlbmd0aCA9
IG1hcmtlclRleHQubGVuZ3RoKCk7CisgICAgICAgIGlmIChzdGFydE9mZnNldCA8IG1hcmtlckxl
bmd0aCB8fCBlbmRPZmZzZXQgPCBtYXJrZXJMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICAgICAgc3RhcnRPZmZzZXQgLT0gbWFya2VyTGVuZ3RoOworICAgICAgICBlbmRP
ZmZzZXQgLT0gbWFya2VyTGVuZ3RoOworICAgIH0KKworICAgIFBsYWluVGV4dFJhbmdlIHRleHRS
YW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOworICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JS
YW5nZSh0ZXh0UmFuZ2UpOworICAgIGlmIChyYW5nZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5n
ZShyYW5nZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxl
Y3Rpb25OdW0pCit7CisgICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNl
bGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93Lgor
ICAgIGlmIChzZWxlY3Rpb25OdW0pCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8vIERv
IG5vdGhpbmcgaWYgY3VycmVudCBzZWxlY3Rpb24gZG9lc24ndCBiZWxvbmcgdG8gdGhlIG9iamVj
dAorICAgIGlmICghd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHRleHQp
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBTZXQgYSBuZXcgMC1zaXplZCBzZWxl
Y3Rpb24gdG8gdGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBvcmRlcgorICAgIC8vIHRvIHNpbXVsYXRl
IHNlbGVjdGlvbiByZW1vdmFsIChHQUlMIHN0eWxlKQorICAgIGdpbnQgY2FyZXRPZmZzZXQgPSB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dCk7CisgICAgcmV0dXJu
IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbih0ZXh0LCBzZWxlY3Rpb25OdW0s
IGNhcmV0T2Zmc2V0LCBjYXJldE9mZnNldCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZz
ZXQpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7
CisKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29y
ZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlz
dEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0o
cmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBpbnQgbWFya2VyTGVu
Z3RoID0gbWFya2VyVGV4dC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKG9mZnNldCA8IG1hcmtlckxl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICAvLyBXZSBuZWVkIHRv
IGFkanVzdCB0aGUgb2Zmc2V0IGZvciBsaXN0IGl0ZW1zLgorICAgICAgICBvZmZzZXQgLT0gbWFy
a2VyTGVuZ3RoOworICAgIH0KKworICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZShvZmZzZXQs
IDApOworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJs
ZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOworICAgIGlmIChyYW5nZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRW
aXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyB2b2lkIGF0a190ZXh0X2ludGVyZmFjZV9pbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPmdldF90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dDsKKyAg
ICBpZmFjZS0+Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfdGV4dF9hZnRlcl9vZmZzZXQ7CisgICAgaWZhY2UtPmdldF90ZXh0X2F0X29mZnNldCA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0OworICAgIGlmYWNlLT5nZXRf
Y2hhcmFjdGVyX2F0X29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rl
cl9hdF9vZmZzZXQ7CisgICAgaWZhY2UtPmdldF90ZXh0X2JlZm9yZV9vZmZzZXQgPSB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQ7CisgICAgaWZhY2UtPmdldF9j
YXJldF9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQ7Cisg
ICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X3J1bl9hdHRyaWJ1dGVzOworICAgIGlmYWNlLT5nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzOworICAgIGlmYWNlLT5n
ZXRfY2hhcmFjdGVyX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0
ZXJfZXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzOworICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2Nv
dW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50OworICAgIGlm
YWNlLT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfb2Zm
c2V0X2F0X3BvaW50OworICAgIGlmYWNlLT5nZXRfbl9zZWxlY3Rpb25zID0gd2Via2l0X2FjY2Vz
c2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zOworICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfc2VsZWN0aW9uOworCisgICAgLy8gc2V0IG1ldGhv
ZHMKKyAgICBpZmFjZS0+YWRkX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfYWRk
X3NlbGVjdGlvbjsKKyAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfcmVtb3ZlX3NlbGVjdGlvbjsKKyAgICBpZmFjZS0+c2V0X3NlbGVjdGlvbiA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbjsKKyAgICBpZmFjZS0+c2V0X2NhcmV0
X29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNldDsKK30KKwor
Ly8gRWRpdGFibGVUZXh0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0
YWJsZV90ZXh0X3NldF9ydW5fYXR0cmlidXRlcyhBdGtFZGl0YWJsZVRleHQqIHRleHQsIEF0a0F0
dHJpYnV0ZVNldCogYXR0cmliX3NldCwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNl
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9zZXRfdGV4dF9jb250ZW50
cyhBdGtFZGl0YWJsZVRleHQqIHRleHQsIGNvbnN0IGdjaGFyKiBzdHJpbmcpCit7CisgICAgLy8g
RklYTUU6IHN0cmluZyBudWxsY2hlY2s/CisgICAgY29yZSh0ZXh0KS0+c2V0VmFsdWUoU3RyaW5n
Ojpmcm9tVVRGOChzdHJpbmcpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVf
ZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGNvbnN0IGdj
aGFyKiBzdHJpbmcsIGdpbnQgbGVuZ3RoLCBnaW50KiBwb3NpdGlvbikKK3sKKyAgICAvLyBGSVhN
RTogc3RyaW5nIG51bGxjaGVjaz8KKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QgPSBjb3JlKHRleHQpOworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViQ29y
ZQorICAgIC8vIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdl
KCpwb3NpdGlvbiwgMCkpOworICAgIC8vIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVGV4dChTdHJp
bmc6OmZyb21VVEY4KHN0cmluZykpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9i
amVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxl
UG9zaXRpb25SYW5nZShjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBs
YWluVGV4dFJhbmdlKCpwb3NpdGlvbiwgMCkpKTsKKyAgICBjb3JlT2JqZWN0LT5zZXRGb2N1c2Vk
KHRydWUpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc2V0IHBvc2l0aW9uIHRvIHRoZSBhY3R1
YWwgaW5zZXJ0ZWQgdGV4dCBsZW5ndGgsIHdoaWNoIG1heSBiZSBsZXNzIHRoYW4gdGhhdCByZXF1
ZXN0ZWQuCisgICAgaWYgKGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dFdp
dGhvdXRTZW5kaW5nVGV4dEV2ZW50KFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgZmFsc2UsIDAp
KQorICAgICAgICAqcG9zaXRpb24gKz0gbGVuZ3RoOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
YWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2NvcHlfdGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQs
IGdpbnQgc3RhcnRfcG9zLCBnaW50IGVuZF9wb3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9jdXRfdGV4
dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGdpbnQgc3RhcnRfcG9zLCBnaW50IGVuZF9wb3MpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2li
bGVfZWRpdGFibGVfdGV4dF9kZWxldGVfdGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGdpbnQg
c3RhcnRfcG9zLCBnaW50IGVuZF9wb3MpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCBpbiBX
ZWJDb3JlCisgICAgLy8gY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0
UmFuZ2Uoc3RhcnRfcG9zLCBlbmRfcG9zIC0gc3RhcnRfcG9zKSk7CisgICAgLy8gY29yZU9iamVj
dC0+c2V0U2VsZWN0ZWRUZXh0KFN0cmluZygpKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVk
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JS
YW5nZShQbGFpblRleHRSYW5nZShzdGFydF9wb3MsIGVuZF9wb3MgLSBzdGFydF9wb3MpKSk7Cisg
ICAgY29yZU9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICBkb2N1bWVudC0+ZnJhbWUoKS0+
ZWRpdG9yKCktPnBlcmZvcm1EZWxldGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vz
c2libGVfZWRpdGFibGVfdGV4dF9wYXN0ZV90ZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgZ2lu
dCBwb3NpdGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGF0aWMgdm9pZCBh
dGtfZWRpdGFibGVfdGV4dF9pbnRlcmZhY2VfaW5pdChBdGtFZGl0YWJsZVRleHRJZmFjZSogaWZh
Y2UpCit7CisgICAgaWZhY2UtPnNldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxl
X2VkaXRhYmxlX3RleHRfc2V0X3J1bl9hdHRyaWJ1dGVzOworICAgIGlmYWNlLT5zZXRfdGV4dF9j
b250ZW50cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfc2V0X3RleHRfY29udGVu
dHM7CisgICAgaWZhY2UtPmluc2VydF90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVf
dGV4dF9pbnNlcnRfdGV4dDsKKyAgICBpZmFjZS0+Y29weV90ZXh0ID0gd2Via2l0X2FjY2Vzc2li
bGVfZWRpdGFibGVfdGV4dF9jb3B5X3RleHQ7CisgICAgaWZhY2UtPmN1dF90ZXh0ID0gd2Via2l0
X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9jdXRfdGV4dDsKKyAgICBpZmFjZS0+ZGVsZXRlX3Rl
eHQgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X2RlbGV0ZV90ZXh0OworICAgIGlm
YWNlLT5wYXN0ZV90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9wYXN0ZV90
ZXh0OworfQorCitzdGF0aWMgdm9pZCBjb250ZW50c1RvQXRrKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUsIEludFJlY3QgcmVjdCwgZ2ludCog
eCwgZ2ludCogeSwgZ2ludCogd2lkdGggPSAwLCBnaW50KiBoZWlnaHQgPSAwKQoreworICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKKwor
ICAgIGlmIChmcmFtZVZpZXcpIHsKKyAgICAgICAgc3dpdGNoIChjb29yZFR5cGUpIHsKKyAgICAg
ICAgY2FzZSBBVEtfWFlfV0lORE9XOgorICAgICAgICAgICAgcmVjdCA9IGZyYW1lVmlldy0+Y29u
dGVudHNUb1dpbmRvdyhyZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFU
S19YWV9TQ1JFRU46CisgICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvU2Ny
ZWVuKHJlY3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoeCkKKyAgICAgICAgKnggPSByZWN0LngoKTsKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBy
ZWN0LnkoKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHJlY3Qud2lkdGgoKTsK
KyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKK30KKwor
c3RhdGljIEludFBvaW50IGF0a1RvQ29udGVudHMoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgZ2ludCB4LCBnaW50IHkpCit7CisgICAgSW50
UG9pbnQgcG9zKHgsIHkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBjb3JlT2JqZWN0
LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIGlmIChmcmFtZVZpZXcpIHsKKyAgICAgICAgc3dp
dGNoIChjb29yZFR5cGUpIHsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICAg
ICAgcmV0dXJuIGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhwb3MpOworICAgICAgICBjYXNl
IEFUS19YWV9XSU5ET1c6CisgICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT53aW5kb3dUb0Nv
bnRlbnRzKHBvcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcG9zOworfQorCitz
dGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfcmVmX2FjY2Vzc2li
bGVfYXRfcG9pbnQoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQgeCwgZ2ludCB5LCBBdGtD
b29yZFR5cGUgY29vcmRUeXBlKQoreworICAgIEludFBvaW50IHBvcyA9IGF0a1RvQ29udGVudHMo
Y29yZShjb21wb25lbnQpLCBjb29yZFR5cGUsIHgsIHkpOworICAgIAorICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIHRhcmdldCA9IGNvcmUoY29tcG9uZW50KS0+YWNjZXNzaWJpbGl0eUhpdFRlc3Qo
cG9zKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZ19vYmplY3Rf
cmVmKHRhcmdldC0+d3JhcHBlcigpKTsKKyAgICByZXR1cm4gdGFyZ2V0LT53cmFwcGVyKCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9nZXRfZXh0ZW50cyhB
dGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdp
bnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKK3sKKyAgICBJbnRSZWN0IHJlY3Qg
PSBjb3JlKGNvbXBvbmVudCktPmVsZW1lbnRSZWN0KCk7CisgICAgY29udGVudHNUb0F0ayhjb3Jl
KGNvbXBvbmVudCksIGNvb3JkVHlwZSwgcmVjdCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ3JhYl9mb2N1cyhB
dGtDb21wb25lbnQqIGNvbXBvbmVudCkKK3sKKyAgICBjb3JlKGNvbXBvbmVudCktPnNldEZvY3Vz
ZWQodHJ1ZSk7CisgICAgcmV0dXJuIGNvcmUoY29tcG9uZW50KS0+aXNGb2N1c2VkKCk7Cit9CisK
K3N0YXRpYyB2b2lkIGF0a19jb21wb25lbnRfaW50ZXJmYWNlX2luaXQoQXRrQ29tcG9uZW50SWZh
Y2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5yZWZfYWNjZXNzaWJsZV9hdF9wb2ludCA9IHdlYmtp
dF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludDsKKyAgICBpZmFj
ZS0+Z2V0X2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ2V0X2V4dGVudHM7
CisgICAgaWZhY2UtPmdyYWJfZm9jdXMgPSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ3Jh
Yl9mb2N1czsKK30KKworLy8gSW1hZ2UKKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVf
aW1hZ2VfZ2V0X2ltYWdlX3Bvc2l0aW9uKEF0a0ltYWdlKiBpbWFnZSwgZ2ludCogeCwgZ2ludCog
eSwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBjb3JlKGlt
YWdlKS0+ZWxlbWVudFJlY3QoKTsKKyAgICBjb250ZW50c1RvQXRrKGNvcmUoaW1hZ2UpLCBjb29y
ZFR5cGUsIHJlY3QsIHgsIHkpOworfQorCitzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nl
c3NpYmxlX2ltYWdlX2dldF9pbWFnZV9kZXNjcmlwdGlvbihBdGtJbWFnZSogaW1hZ2UpCit7Cisg
ICAgcmV0dXJuIHJldHVyblN0cmluZyhjb3JlKGltYWdlKS0+YWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uKCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1h
Z2Vfc2l6ZShBdGtJbWFnZSogaW1hZ2UsIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQpCit7Cisg
ICAgSW50U2l6ZSBzaXplID0gY29yZShpbWFnZSktPnNpemUoKTsKKworICAgIGlmICh3aWR0aCkK
KyAgICAgICAgKndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAg
ICpoZWlnaHQgPSBzaXplLmhlaWdodCgpOworfQorCitzdGF0aWMgdm9pZCBhdGtfaW1hZ2VfaW50
ZXJmYWNlX2luaXQoQXRrSW1hZ2VJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmdldF9pbWFn
ZV9wb3NpdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9wb3NpdGlvbjsK
KyAgICBpZmFjZS0+Z2V0X2ltYWdlX2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfaW1h
Z2VfZ2V0X2ltYWdlX2Rlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRfaW1hZ2Vfc2l6ZSA9IHdl
YmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9zaXplOworfQorCisvLyBUYWJsZQorCitz
dGF0aWMgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbChBdGtUYWJsZSogdGFibGUsIGd1aW50
IHJvdywgZ3VpbnQgY29sdW1uKQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxl
ID0gY29yZSh0YWJsZSk7CisgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+
KGFjY1RhYmxlKS0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdyk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBnaW50IGNlbGxJbmRleChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBh
eENlbGwsIEFjY2Vzc2liaWxpdHlUYWJsZSogYXhUYWJsZSkKK3sKKyAgICAvLyBDYWxjdWxhdGUg
dGhlIGNlbGwncyBpbmRleCBhcyBpZiB3ZSBoYWQgYSB0cmFkaXRpb25hbCBHdGsrIHRhYmxlIGlu
CisgICAgLy8gd2hpY2ggY2VsbHMgYXJlIGFsbCBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIHRhYmxl
LCBhcnJhbmdlZCByb3ctZmlyc3QuCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIGFsbENlbGxzOworICAgIGF4VGFibGUtPmNlbGxzKGFsbENlbGxz
KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I6
Oml0ZXJhdG9yIHBvc2l0aW9uOworICAgIHBvc2l0aW9uID0gc3RkOjpmaW5kKGFsbENlbGxzLmJl
Z2luKCksIGFsbENlbGxzLmVuZCgpLCBheENlbGwpOworICAgIGlmIChwb3NpdGlvbiA9PSBhbGxD
ZWxscy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBwb3NpdGlvbiAtIGFs
bENlbGxzLmJlZ2luKCk7Cit9CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxs
QXRJbmRleChBdGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCit7CisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKKyAgICBpZiAoYWNjVGFibGUtPmlzQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhbGxDZWxsczsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5jZWxscyhhbGxDZWxscyk7CisgICAg
ICAgIGlmICgwIDw9IGluZGV4ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCBhbGxD
ZWxscy5zaXplKCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY0NlbGwg
PSBhbGxDZWxscy5hdChpbmRleCkuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KGFjY0NlbGwpOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV90
YWJsZV9yZWZfYXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCit7Cisg
ICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1
bW4pOworICAgIGlmICghYXhDZWxsKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYXhD
ZWxsLT53cmFwcGVyKCk7Cit9CisKK3N0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxl
X2dldF9pbmRleF9hdChBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50IGNvbHVtbikKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNv
bHVtbik7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxlID0gc3RhdGljX2Nhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlKj4oY29yZSh0YWJsZSkpOworICAgIHJldHVybiBjZWxsSW5kZXgoYXhD
ZWxsLCBheFRhYmxlKTsKK30KKworc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVf
Z2V0X2NvbHVtbl9hdF9pbmRleChBdGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCit7CisgICAg
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbEF0SW5kZXgodGFibGUsIGluZGV4
KTsKKyAgICBpZiAoYXhDZWxsKSB7CisgICAgICAgIHBhaXI8aW50LCBpbnQ+IGNvbHVtblJhbmdl
OworICAgICAgICBheENlbGwtPmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUmFuZ2UpOworICAgICAg
ICByZXR1cm4gY29sdW1uUmFuZ2UuZmlyc3Q7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwor
c3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19hdF9pbmRleChBdGtU
YWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCit7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCog
YXhDZWxsID0gY2VsbEF0SW5kZXgodGFibGUsIGluZGV4KTsKKyAgICBpZiAoYXhDZWxsKSB7Cisg
ICAgICAgIHBhaXI8aW50LCBpbnQ+IHJvd1JhbmdlOworICAgICAgICBheENlbGwtPnJvd0luZGV4
UmFuZ2Uocm93UmFuZ2UpOworICAgICAgICByZXR1cm4gcm93UmFuZ2UuZmlyc3Q7CisgICAgfQor
ICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVf
Z2V0X25fY29sdW1ucyhBdGtUYWJsZSogdGFibGUpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKKyAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlKj4oYWNjVGFibGUpLT5jb2x1bW5Db3VudCgpOworICAgIHJldHVybiAwOworfQor
CitzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfbl9yb3dzKEF0a1RhYmxl
KiB0YWJsZSkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFi
bGUpOworICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSkt
PnJvd0NvdW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnaW50IHdlYmtpdF9hY2Nl
c3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBy
b3csIGdpbnQgY29sdW1uKQoreworICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9
IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsKKyAgICBpZiAoYXhDZWxsKSB7CisgICAgICAgIHBh
aXI8aW50LCBpbnQ+IGNvbHVtblJhbmdlOworICAgICAgICBheENlbGwtPmNvbHVtbkluZGV4UmFu
Z2UoY29sdW1uUmFuZ2UpOworICAgICAgICByZXR1cm4gY29sdW1uUmFuZ2Uuc2Vjb25kOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFi
bGVfZ2V0X3Jvd19leHRlbnRfYXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1
bW4pCit7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbCh0YWJsZSwg
cm93LCBjb2x1bW4pOworICAgIGlmIChheENlbGwpIHsKKyAgICAgICAgcGFpcjxpbnQsIGludD4g
cm93UmFuZ2U7CisgICAgICAgIGF4Q2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7CisgICAg
ICAgIHJldHVybiByb3dSYW5nZS5zZWNvbmQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2hlYWRl
cihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQoreworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CisgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYWxsQ29sdW1uSGVhZGVyczsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5jb2x1bW5IZWFkZXJzKGFsbENv
bHVtbkhlYWRlcnMpOworICAgICAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCA9IGFsbENvbHVtbkhl
YWRlcnMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY29sdW1uQ291
bnQ7ICsraykgeworICAgICAgICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFuZ2U7CisgICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbCo+KGFsbENvbHVtbkhlYWRlcnMuYXQoaykuZ2V0KCkpOworICAgICAg
ICAgICAgY2VsbC0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7CisgICAgICAgICAgICBp
ZiAoY29sdW1uUmFuZ2UuZmlyc3QgPD0gY29sdW1uICYmIGNvbHVtbiA8IGNvbHVtblJhbmdlLmZp
cnN0ICsgY29sdW1uUmFuZ2Uuc2Vjb25kKQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxDb2x1
bW5IZWFkZXJzW2tdLT53cmFwcGVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3df
aGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3cpCit7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKKyAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhbGxSb3dIZWFkZXJzOworICAgICAgICBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSktPnJvd0hlYWRlcnMoYWxsUm93SGVh
ZGVycyk7CisgICAgICAgIHVuc2lnbmVkIHJvd0NvdW50ID0gYWxsUm93SGVhZGVycy5zaXplKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCByb3dDb3VudDsgKytrKSB7CisgICAg
ICAgICAgICBwYWlyPGludCwgaW50PiByb3dSYW5nZTsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4o
YWxsUm93SGVhZGVycy5hdChrKS5nZXQoKSk7CisgICAgICAgICAgICBjZWxsLT5yb3dJbmRleFJh
bmdlKHJvd1JhbmdlKTsKKyAgICAgICAgICAgIGlmIChyb3dSYW5nZS5maXJzdCA8PSByb3cgJiYg
cm93IDwgcm93UmFuZ2UuZmlyc3QgKyByb3dSYW5nZS5zZWNvbmQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGFsbFJvd0hlYWRlcnNba10tPndyYXBwZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKworc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfdGFi
bGVfZ2V0X2NhcHRpb24oQXRrVGFibGUqIHRhYmxlKQoreworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CisgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICBOb2RlKiBub2RlID0gYWNjVGFibGUtPm5v
ZGUoKTsKKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRh
YmxlVGFnKSkgeworICAgICAgICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNhcHRpb24g
PSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4obm9kZSktPmNhcHRpb24oKTsKKyAgICAg
ICAgICAgIGlmIChjYXB0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpmaXJzdEFjY2Vzc2libGVPYmplY3RGcm9tTm9kZShjYXB0aW9uLT5yZW5kZXJlcigp
LT5ub2RlKCkpLT53cmFwcGVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVt
bl9kZXNjcmlwdGlvbihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQoreworICAgIEF0a09i
amVjdCogY29sdW1uSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKHRhYmxlLCBj
b2x1bW4pOworICAgIGlmIChjb2x1bW5IZWFkZXIgJiYgQVRLX0lTX1RFWFQoY29sdW1uSGVhZGVy
KSkKKyAgICAgICAgcmV0dXJuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQVRLX1RF
WFQoY29sdW1uSGVhZGVyKSwgMCwgLTEpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBj
b25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlwdGlvbihB
dGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQoreworICAgIEF0a09iamVjdCogcm93SGVhZGVyID0g
YXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKHRhYmxlLCByb3cpOworICAgIGlmIChyb3dIZWFkZXIg
JiYgQVRLX0lTX1RFWFQocm93SGVhZGVyKSkKKyAgICAgICAgcmV0dXJuIHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocm93SGVhZGVyKSwgMCwgLTEpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0a190YWJsZV9pbnRlcmZhY2VfaW5pdChBdGtUYWJs
ZUlmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+cmVmX2F0ID0gd2Via2l0X2FjY2Vzc2libGVf
dGFibGVfcmVmX2F0OworICAgIGlmYWNlLT5nZXRfaW5kZXhfYXQgPSB3ZWJraXRfYWNjZXNzaWJs
ZV90YWJsZV9nZXRfaW5kZXhfYXQ7CisgICAgaWZhY2UtPmdldF9jb2x1bW5fYXRfaW5kZXggPSB3
ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4OworICAgIGlmYWNlLT5n
ZXRfcm93X2F0X2luZGV4ID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19hdF9pbmRl
eDsKKyAgICBpZmFjZS0+Z2V0X25fY29sdW1ucyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dl
dF9uX2NvbHVtbnM7CisgICAgaWZhY2UtPmdldF9uX3Jvd3MgPSB3ZWJraXRfYWNjZXNzaWJsZV90
YWJsZV9nZXRfbl9yb3dzOworICAgIGlmYWNlLT5nZXRfY29sdW1uX2V4dGVudF9hdCA9IHdlYmtp
dF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0OworICAgIGlmYWNlLT5nZXRf
cm93X2V4dGVudF9hdCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfZXh0ZW50X2F0
OworICAgIGlmYWNlLT5nZXRfY29sdW1uX2hlYWRlciA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxl
X2dldF9jb2x1bW5faGVhZGVyOworICAgIGlmYWNlLT5nZXRfcm93X2hlYWRlciA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfaGVhZGVyOworICAgIGlmYWNlLT5nZXRfY2FwdGlvbiA9
IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jYXB0aW9uOworICAgIGlmYWNlLT5nZXRfY29s
dW1uX2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVtbl9kZXNj
cmlwdGlvbjsKKyAgICBpZmFjZS0+Z2V0X3Jvd19kZXNjcmlwdGlvbiA9IHdlYmtpdF9hY2Nlc3Np
YmxlX3RhYmxlX2dldF9yb3dfZGVzY3JpcHRpb247Cit9CisKK3N0YXRpYyBBdGtIeXBlcmxpbmsq
IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0
LCBnaW50IGluZGV4KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmUoaHlwZXJ0ZXh0KS0+Y2hpbGRyZW4oKTsKKyAg
ICBpZiAoaW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gY2hpbGRy
ZW4uc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGdpbnQgY3VycmVudExpbmsgPSAt
MTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZUNoaWxkID0gY2hpbGRyZW4uYXQoaSku
Z2V0KCk7CisgICAgICAgIGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkp
IHsKKyAgICAgICAgICAgIEF0a09iamVjdCogYXhPYmplY3QgPSBjb3JlQ2hpbGQtPndyYXBwZXIo
KTsKKyAgICAgICAgICAgIGlmICghYXhPYmplY3QgfHwgIUFUS19JU19IWVBFUkxJTktfSU1QTChh
eE9iamVjdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGN1cnJl
bnRMaW5rKys7CisgICAgICAgICAgICBpZiAoaW5kZXggIT0gY3VycmVudExpbmspCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJldHVybiBhdGtfaHlwZXJsaW5rX2lt
cGxfZ2V0X2h5cGVybGluayhBVEtfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3Np
YmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0KQoreworICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9
IGNvcmUoaHlwZXJ0ZXh0KS0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBnaW50IGxpbmtzRm91bmQgPSAwOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZUNoaWxkID0gY2hpbGRyZW4uYXQoaSkuZ2V0KCk7CisgICAgICAg
IGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKKyAgICAgICAgICAg
IEF0a09iamVjdCogYXhPYmplY3QgPSBjb3JlQ2hpbGQtPndyYXBwZXIoKTsKKyAgICAgICAgICAg
IGlmIChheE9iamVjdCAmJiBBVEtfSVNfSFlQRVJMSU5LX0lNUEwoYXhPYmplY3QpKQorICAgICAg
ICAgICAgICAgIGxpbmtzRm91bmQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBs
aW5rc0ZvdW5kOworfQorCitzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0
TGlua0luZGV4KEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGNoYXJJbmRleCkKK3sKKyAg
ICBzaXplX3QgbGlua3NDb3VudCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3Mo
aHlwZXJ0ZXh0KTsKKyAgICBpZiAoIWxpbmtzQ291bnQpCisgICAgICAgIHJldHVybiAtMTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlua3NDb3VudDsgaSsrKSB7CisgICAgICAgIEF0
a0h5cGVybGluayogaHlwZXJsaW5rID0gQVRLX0hZUEVSTElOSyh3ZWJraXRBY2Nlc3NpYmxlSHlw
ZXJ0ZXh0R2V0TGluayhoeXBlcnRleHQsIGkpKTsKKyAgICAgICAgZ2ludCBzdGFydEluZGV4ID0g
YXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaHlwZXJsaW5rKTsKKyAgICAgICAgZ2ludCBl
bmRJbmRleCA9IGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoeXBlcmxpbmspOworCisgICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBjaGFyIGluZGV4IGluIHRoZSBsaW5rJ3Mgb2Zmc2V0IHJhbmdl
CisgICAgICAgIGlmIChzdGFydEluZGV4IDw9IGNoYXJJbmRleCAmJiBjaGFySW5kZXggPCBlbmRJ
bmRleCkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIC8vIE5vdCBmb3VuZCBp
ZiByZWFjaGVkCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBhdGtIeXBlcnRleHRJ
bnRlcmZhY2VJbml0KEF0a0h5cGVydGV4dElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0
X2xpbmsgPSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluazsKKyAgICBpZmFjZS0+Z2V0
X25fbGlua3MgPSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzOworICAgIGlmYWNl
LT5nZXRfbGlua19pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rSW5kZXg7
Cit9CisKK3N0YXRpYyBBdGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBs
R2V0SHlwZXJsaW5rKEF0a0h5cGVybGlua0ltcGwqIGh5cGVybGluaykKK3sKKyAgICBBdGtIeXBl
cmxpbmsqIGh5cGVybGlua09iamVjdCA9IEFUS19IWVBFUkxJTksoZ19vYmplY3RfZ2V0X3FkYXRh
KEdfT0JKRUNUKGh5cGVybGluayksIGh5cGVybGlua09iamVjdFF1YXJrKSk7CisgICAgaWYgKCFo
eXBlcmxpbmtPYmplY3QpIHsKKyAgICAgICAgaHlwZXJsaW5rT2JqZWN0ID0gQVRLX0hZUEVSTElO
Syh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rTmV3KGh5cGVybGluaykpOworICAgICAgICBnX29i
amVjdF9zZXRfcWRhdGEoR19PQkpFQ1QoaHlwZXJsaW5rKSwgaHlwZXJsaW5rT2JqZWN0UXVhcmss
IGh5cGVybGlua09iamVjdCk7CisgICAgfQorICAgIHJldHVybiBoeXBlcmxpbmtPYmplY3Q7Cit9
CisKK3N0YXRpYyB2b2lkIGF0a0h5cGVybGlua0ltcGxJbnRlcmZhY2VJbml0KEF0a0h5cGVybGlu
a0ltcGxJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmdldF9oeXBlcmxpbmsgPSB3ZWJraXRB
Y2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluazsKK30KKworc3RhdGljIGNvbnN0IGdj
aGFyKiBkb2N1bWVudEF0dHJpYnV0ZVZhbHVlKEF0a0RvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
Z2NoYXIqIGF0dHJpYnV0ZSkKK3sKKyAgICBEb2N1bWVudCogY29yZURvY3VtZW50ID0gY29yZShk
b2N1bWVudCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFjb3JlRG9jdW1lbnQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgU3RyaW5nIHZhbHVlID0gU3RyaW5nKCk7CisgICAgaWYgKCFnX2FzY2lp
X3N0cmNhc2VjbXAoYXR0cmlidXRlLCAiRG9jVHlwZSIpICYmIGNvcmVEb2N1bWVudC0+ZG9jdHlw
ZSgpKQorICAgICAgICB2YWx1ZSA9IGNvcmVEb2N1bWVudC0+ZG9jdHlwZSgpLT5uYW1lKCk7Cisg
ICAgZWxzZSBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcChhdHRyaWJ1dGUsICJFbmNvZGluZyIpKQor
ICAgICAgICB2YWx1ZSA9IGNvcmVEb2N1bWVudC0+Y2hhcnNldCgpOworICAgIGVsc2UgaWYgKCFn
X2FzY2lpX3N0cmNhc2VjbXAoYXR0cmlidXRlLCAiVVJJIikpCisgICAgICAgIHZhbHVlID0gY29y
ZURvY3VtZW50LT5kb2N1bWVudFVSSSgpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKHZhbHVlKTsKKworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50X2dldF9hdHRyaWJ1
dGVfdmFsdWUoQXRrRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBnY2hhciogYXR0cmlidXRlKQor
eworICAgIHJldHVybiBkb2N1bWVudEF0dHJpYnV0ZVZhbHVlKGRvY3VtZW50LCBhdHRyaWJ1dGUp
OworfQorCitzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVu
dF9nZXRfYXR0cmlidXRlcyhBdGtEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQXRrQXR0cmli
dXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSAwOworICAgIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGVzW10g
PSB7ICJEb2NUeXBlIiwgIkVuY29kaW5nIiwgIlVSSSIgfTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoYXR0cmlidXRlcyk7IGkrKykgeworICAgICAgICBjb25z
dCBnY2hhciogdmFsdWUgPSBkb2N1bWVudEF0dHJpYnV0ZVZhbHVlKGRvY3VtZW50LCBhdHRyaWJ1
dGVzW2ldKTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0g
YWRkQXR0cmlidXRlVG9TZXQoYXR0cmlidXRlU2V0LCBhdHRyaWJ1dGVzW2ldLCB2YWx1ZSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsKK30KKworc3RhdGljIGNvbnN0IGdjaGFy
KiB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfbG9jYWxlKEF0a0RvY3VtZW50KiBkb2N1
bWVudCkKK3sKKworICAgIC8vIFRPRE86IFNob3VsZCB3ZSBmYWxsIGJhY2sgb24gbGFuZyB4bWw6
bGFuZyB3aGVuIHRoZSBmb2xsb3dpbmcgY29tZXMgdXAgZW1wdHk/CisgICAgU3RyaW5nIGxhbmd1
YWdlID0gY29yZShkb2N1bWVudCktPmxhbmd1YWdlKCk7CisgICAgaWYgKCFsYW5ndWFnZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcobGFuZ3VhZ2UpOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0a19kb2N1bWVudF9pbnRlcmZhY2VfaW5pdChBdGtE
b2N1bWVudElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0X2RvY3VtZW50X2F0dHJpYnV0
ZV92YWx1ZSA9IHdlYmtpdF9hY2Nlc3NpYmxlX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVfdmFsdWU7
CisgICAgaWZhY2UtPmdldF9kb2N1bWVudF9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVf
ZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZXM7CisgICAgaWZhY2UtPmdldF9kb2N1bWVudF9sb2NhbGUg
PSB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfbG9jYWxlOworfQorCisKK3N0YXRpYyB2
b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldEN1cnJlbnRWYWx1ZShBdGtWYWx1ZSogdmFsdWUs
IEdWYWx1ZSogZ1ZhbHVlKQoreworICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVl
KSk7CisgICAgZ192YWx1ZV9pbml0KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7CisgICAgZ192YWx1
ZV9zZXRfZG91YmxlKGdWYWx1ZSwgY29yZSh2YWx1ZSktPnZhbHVlRm9yUmFuZ2UoKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1heGltdW1WYWx1ZShBdGtWYWx1
ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQoreworICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXpl
b2YoR1ZhbHVlKSk7CisgICAgZ192YWx1ZV9pbml0KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7Cisg
ICAgZ192YWx1ZV9zZXRfZG91YmxlKGdWYWx1ZSwgY29yZSh2YWx1ZSktPm1heFZhbHVlRm9yUmFu
Z2UoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1W
YWx1ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQoreworICAgIG1lbXNldChnVmFs
dWUsICAwLCBzaXplb2YoR1ZhbHVlKSk7CisgICAgZ192YWx1ZV9pbml0KGdWYWx1ZSwgR19UWVBF
X0RPVUJMRSk7CisgICAgZ192YWx1ZV9zZXRfZG91YmxlKGdWYWx1ZSwgY29yZSh2YWx1ZSktPm1p
blZhbHVlRm9yUmFuZ2UoKSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxl
VmFsdWVTZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBjb25zdCBHVmFsdWUqIGdWYWx1
ZSkKK3sKKyAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRE9VQkxFKGdWYWx1ZSkgJiYgIUdfVkFMVUVf
SE9MRFNfSU5UKGdWYWx1ZSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHZhbHVlKTsKKyAgICBpZiAoIWNvcmVPYmpl
Y3QtPmNhblNldFZhbHVlQXR0cmlidXRlKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAg
IGlmIChHX1ZBTFVFX0hPTERTX0RPVUJMRShnVmFsdWUpKQorICAgICAgICBjb3JlT2JqZWN0LT5z
ZXRWYWx1ZShTdHJpbmc6Om51bWJlcihnX3ZhbHVlX2dldF9kb3VibGUoZ1ZhbHVlKSkpOworICAg
IGVsc2UKKyAgICAgICAgY29yZU9iamVjdC0+c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoZ192YWx1
ZV9nZXRfaW50KGdWYWx1ZSkpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtSW5jcmVtZW50KEF0a1ZhbHVlKiB2YWx1
ZSwgR1ZhbHVlKiBnVmFsdWUpCit7CisgICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihHVmFs
dWUpKTsKKyAgICBnX3ZhbHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsKKworICAgIC8v
IFRoZXJlJ3Mgbm90IHN1Y2ggYSB0aGluZyBpbiB0aGUgV0FJLUFSSUEgc3BlY2lmaWNhdGlvbiwg
dGh1cyByZXR1cm4gemVyby4KKyAgICBnX3ZhbHVlX3NldF9kb3VibGUoZ1ZhbHVlLCAwLjApOwor
fQorCitzdGF0aWMgdm9pZCBhdGtWYWx1ZUludGVyZmFjZUluaXQoQXRrVmFsdWVJZmFjZSogaWZh
Y2UpCit7CisgICAgaWZhY2UtPmdldF9jdXJyZW50X3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZh
bHVlR2V0Q3VycmVudFZhbHVlOworICAgIGlmYWNlLT5nZXRfbWF4aW11bV92YWx1ZSA9IHdlYmtp
dEFjY2Vzc2libGVWYWx1ZUdldE1heGltdW1WYWx1ZTsKKyAgICBpZmFjZS0+Z2V0X21pbmltdW1f
dmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWU7CisgICAgaWZhY2Ut
PnNldF9jdXJyZW50X3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVl
OworICAgIGlmYWNlLT5nZXRfbWluaW11bV9pbmNyZW1lbnQgPSB3ZWJraXRBY2Nlc3NpYmxlVmFs
dWVHZXRNaW5pbXVtSW5jcmVtZW50OworfQorCitzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8g
QXRrSW50ZXJmYWNlc0luaXRGdW5jdGlvbnNbXSA9IHsKKyAgICB7KEdJbnRlcmZhY2VJbml0RnVu
YylhdGtfYWN0aW9uX2ludGVyZmFjZV9pbml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVu
YykgMCwgMH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX3NlbGVjdGlvbl9pbnRlcmZh
Y2VfaW5pdCwKKyAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHsoR0lu
dGVyZmFjZUluaXRGdW5jKWF0a19lZGl0YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0LAorICAgICAo
R0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMp
YXRrX3RleHRfaW50ZXJmYWNlX2luaXQsCisgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAw
LCAwfSwKKyAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfY29tcG9uZW50X2ludGVyZmFjZV9p
bml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAgeyhHSW50ZXJm
YWNlSW5pdEZ1bmMpYXRrX2ltYWdlX2ludGVyZmFjZV9pbml0LAorICAgICAoR0ludGVyZmFjZUZp
bmFsaXplRnVuYykgMCwgMH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX3RhYmxlX2lu
dGVyZmFjZV9pbml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAg
eyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdCwKKyAgICAgKEdJ
bnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0
a0h5cGVybGlua0ltcGxJbnRlcmZhY2VJbml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVu
YykgMCwgMH0sCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX2RvY3VtZW50X2ludGVyZmFj
ZV9pbml0LAorICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAgeyhHSW50
ZXJmYWNlSW5pdEZ1bmMpYXRrVmFsdWVJbnRlcmZhY2VJbml0LAorICAgICAoR0ludGVyZmFjZUZp
bmFsaXplRnVuYykgMCwgMH0KK307CisKK2VudW0gV0FJVHlwZSB7CisgICAgV0FJX0FDVElPTiwK
KyAgICBXQUlfU0VMRUNUSU9OLAorICAgIFdBSV9FRElUQUJMRV9URVhULAorICAgIFdBSV9URVhU
LAorICAgIFdBSV9DT01QT05FTlQsCisgICAgV0FJX0lNQUdFLAorICAgIFdBSV9UQUJMRSwKKyAg
ICBXQUlfSFlQRVJURVhULAorICAgIFdBSV9IWVBFUkxJTkssCisgICAgV0FJX0RPQ1VNRU5ULAor
ICAgIFdBSV9WQUxVRSwKK307CisKK3N0YXRpYyBHVHlwZSBHZXRBdGtJbnRlcmZhY2VUeXBlRnJv
bVdBSVR5cGUoV0FJVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
V0FJX0FDVElPTjoKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX0FDVElPTjsKKyAgICBjYXNlIFdB
SV9TRUxFQ1RJT046CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9TRUxFQ1RJT047CisgICAgY2Fz
ZSBXQUlfRURJVEFCTEVfVEVYVDoKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX0VESVRBQkxFX1RF
WFQ7CisgICAgY2FzZSBXQUlfVEVYVDoKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX1RFWFQ7Cisg
ICAgY2FzZSBXQUlfQ09NUE9ORU5UOgorICAgICAgICByZXR1cm4gQVRLX1RZUEVfQ09NUE9ORU5U
OworICAgIGNhc2UgV0FJX0lNQUdFOgorICAgICAgICByZXR1cm4gQVRLX1RZUEVfSU1BR0U7Cisg
ICAgY2FzZSBXQUlfVEFCTEU6CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9UQUJMRTsKKyAgICBj
YXNlIFdBSV9IWVBFUlRFWFQ6CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9IWVBFUlRFWFQ7Cisg
ICAgY2FzZSBXQUlfSFlQRVJMSU5LOgorICAgICAgICByZXR1cm4gQVRLX1RZUEVfSFlQRVJMSU5L
X0lNUEw7CisgICAgY2FzZSBXQUlfRE9DVU1FTlQ6CisgICAgICAgIHJldHVybiBBVEtfVFlQRV9E
T0NVTUVOVDsKKyAgICBjYXNlIFdBSV9WQUxVRToKKyAgICAgICAgcmV0dXJuIEFUS19UWVBFX1ZB
TFVFOworICAgIH0KKworICAgIHJldHVybiBHX1RZUEVfSU5WQUxJRDsKK30KKworc3RhdGljIGd1
aW50MTYgZ2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCkKK3sKKyAgICBndWludDE2IGludGVyZmFjZU1hc2sgPSAwOworCisgICAgLy8gQ29t
cG9uZW50IGludGVyZmFjZSBpcyBhbHdheXMgc3VwcG9ydGVkCisgICAgaW50ZXJmYWNlTWFzayB8
PSAxIDw8IFdBSV9DT01QT05FTlQ7CisKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gY29y
ZU9iamVjdC0+cm9sZVZhbHVlKCk7CisKKyAgICAvLyBBY3Rpb24KKyAgICAvLyBBcyB0aGUgaW1w
bGVtZW50YXRpb24gb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgaXMgYSB2ZXJ5CisgICAgLy8g
YmFzaWMgb25lIChqdXN0IHJlbGF5cyBpbiBleGVjdXRpbmcgdGhlIGRlZmF1bHQgYWN0aW9uIGZv
ciBlYWNoCisgICAgLy8gb2JqZWN0LCBhbmQgb25seSBzdXBwb3J0cyBoYXZpbmcgb25lIGFjdGlv
biBwZXIgb2JqZWN0KSwgaXQgaXMKKyAgICAvLyBiZXR0ZXIganVzdCB0byBpbXBsZW1lbnQgdGhp
cyBpbnRlcmZhY2UgZm9yIGV2ZXJ5IGluc3RhbmNlIG9mCisgICAgLy8gdGhlIFdlYktpdEFjY2Vz
c2libGUgY2xhc3MgYW5kIGxldCBXZWJDb3JlIGRlY2lkZSB3aGF0IHRvIGRvLgorICAgIGludGVy
ZmFjZU1hc2sgfD0gMSA8PCBXQUlfQUNUSU9OOworCisgICAgLy8gU2VsZWN0aW9uCisgICAgaWYg
KGNvcmVPYmplY3QtPmlzTGlzdEJveCgpIHx8IGNvcmVPYmplY3QtPmlzTWVudUxpc3QoKSkKKyAg
ICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9TRUxFQ1RJT047CisKKyAgICAvLyBHZXQg
cmVuZGVyZXIgaWYgYXZhaWxhYmxlLgorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAwOwor
ICAgIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAg
ICAgcmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigpOworCisgICAgLy8gSHlwZXJsaW5r
IChsaW5rcyBhbmQgZW1iZWRkZWQgb2JqZWN0cykuCisgICAgaWYgKGNvcmVPYmplY3QtPmlzTGlu
aygpIHx8IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSkKKyAgICAgICAgaW50
ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9IWVBFUkxJTks7CisKKyAgICAvLyBUZXh0ICYgRWRpdGFi
bGUgVGV4dAorICAgIGlmIChyb2xlID09IFN0YXRpY1RleHRSb2xlIHx8IGNvcmVPYmplY3QtPmlz
TWVudUxpc3RPcHRpb24oKSkKKyAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhU
OworICAgIGVsc2UgeworICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7
CisgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1RFWFQ7CisgICAgICAgICAg
ICBpZiAoIWNvcmVPYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgICAgICBpbnRlcmZh
Y2VNYXNrIHw9IDEgPDwgV0FJX0VESVRBQkxFX1RFWFQ7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAocm9sZSAhPSBUYWJsZVJvbGUpIHsKKyAgICAgICAgICAgICAgICBpbnRlcmZh
Y2VNYXNrIHw9IDEgPDwgV0FJX0hZUEVSVEVYVDsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPmNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgICAgICAgICAgICAgIGlu
dGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfVEVYVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gQWRkIHRoZSBURVhUIGludGVyZmFjZSBmb3IgbGlzdCBpdGVtcyB3aG9zZQorICAgICAg
ICAgICAgLy8gZmlyc3QgYWNjZXNzaWJsZSBjaGlsZCBoYXMgYSB0ZXh0IHJlbmRlcmVyCisgICAg
ICAgICAgICBpZiAocm9sZSA9PSBMaXN0SXRlbVJvbGUpIHsKKyAgICAgICAgICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBj
b3JlT2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXpl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhSZW5kZXJD
aGlsZCA9IGNoaWxkcmVuLmF0KDApLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZh
Y2VNYXNrIHw9IGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KGF4UmVuZGVyQ2hpbGQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEltYWdlCisgICAgaWYgKGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKKyAgICAgICAgaW50ZXJmYWNl
TWFzayB8PSAxIDw8IFdBSV9JTUFHRTsKKworICAgIC8vIFRhYmxlCisgICAgaWYgKHJvbGUgPT0g
VGFibGVSb2xlKQorICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1RBQkxFOworCisg
ICAgLy8gRG9jdW1lbnQKKyAgICBpZiAocm9sZSA9PSBXZWJBcmVhUm9sZSkKKyAgICAgICAgaW50
ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9ET0NVTUVOVDsKKworICAgIC8vIFZhbHVlCisgICAgaWYg
KHJvbGUgPT0gU2xpZGVyUm9sZSkKKyAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9W
QUxVRTsKKworICAgIHJldHVybiBpbnRlcmZhY2VNYXNrOworfQorCitzdGF0aWMgY29uc3QgY2hh
ciogZ2V0VW5pcXVlQWNjZXNzaWJpbGl0eVR5cGVOYW1lKGd1aW50MTYgaW50ZXJmYWNlTWFzaykK
K3sKKyNkZWZpbmUgV0FJX1RZUEVfTkFNRV9MRU4gKDMwKSAvKiBFbm91Z2ggZm9yIHByZWZpeCAr
IDUgaGV4IGNoYXJhY3RlcnMgKG1heCkgKi8KKyAgICBzdGF0aWMgY2hhciBuYW1lW1dBSV9UWVBF
X05BTUVfTEVOICsgMV07CisKKyAgICBnX3NwcmludGYobmFtZSwgIldBSVR5cGUleCIsIGludGVy
ZmFjZU1hc2spOworICAgIG5hbWVbV0FJX1RZUEVfTkFNRV9MRU5dID0gJ1wwJzsKKworICAgIHJl
dHVybiBuYW1lOworfQorCitzdGF0aWMgR1R5cGUgZ2V0QWNjZXNzaWJpbGl0eVR5cGVGcm9tT2Jq
ZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgc3RhdGljIGNvbnN0
IEdUeXBlSW5mbyB0eXBlSW5mbyA9IHsKKyAgICAgICAgc2l6ZW9mKFdlYktpdEFjY2Vzc2libGVD
bGFzcyksCisgICAgICAgIChHQmFzZUluaXRGdW5jKSAwLAorICAgICAgICAoR0Jhc2VGaW5hbGl6
ZUZ1bmMpIDAsCisgICAgICAgIChHQ2xhc3NJbml0RnVuYykgMCwKKyAgICAgICAgKEdDbGFzc0Zp
bmFsaXplRnVuYykgMCwKKyAgICAgICAgMCwgLyogY2xhc3MgZGF0YSAqLworICAgICAgICBzaXpl
b2YoV2ViS2l0QWNjZXNzaWJsZSksIC8qIGluc3RhbmNlIHNpemUgKi8KKyAgICAgICAgMCwgLyog
bmIgcHJlYWxsb2NzICovCisgICAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgMCwKKyAgICAgICAg
MCAvKiB2YWx1ZSB0YWJsZSAqLworICAgIH07CisKKyAgICBndWludDE2IGludGVyZmFjZU1hc2sg
PSBnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjdChjb3JlT2JqZWN0KTsKKyAgICBjb25zdCBjaGFy
KiBhdGtUeXBlTmFtZSA9IGdldFVuaXF1ZUFjY2Vzc2liaWxpdHlUeXBlTmFtZShpbnRlcmZhY2VN
YXNrKTsKKyAgICBHVHlwZSB0eXBlID0gZ190eXBlX2Zyb21fbmFtZShhdGtUeXBlTmFtZSk7Cisg
ICAgaWYgKHR5cGUpCisgICAgICAgIHJldHVybiB0eXBlOworCisgICAgdHlwZSA9IGdfdHlwZV9y
ZWdpc3Rlcl9zdGF0aWMoV0VCS0lUX1RZUEVfQUNDRVNTSUJMRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdGtUeXBlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmdHlwZUluZm8sIEdUeXBlRmxhZ3MoMCkpOworICAgIGZvciAoZ3VpbnQgaSA9IDA7
IGkgPCBHX05fRUxFTUVOVFMoQXRrSW50ZXJmYWNlc0luaXRGdW5jdGlvbnMpOyBpKyspIHsKKyAg
ICAgICAgaWYgKGludGVyZmFjZU1hc2sgJiAoMSA8PCBpKSkKKyAgICAgICAgICAgIGdfdHlwZV9h
ZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdldEF0a0ludGVyZmFjZVR5cGVGcm9tV0FJVHlwZShzdGF0aWNfY2FzdDxXQUlU
eXBlPihpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkF0a0lu
dGVyZmFjZXNJbml0RnVuY3Rpb25zW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZTsKK30K
KworV2ViS2l0QWNjZXNzaWJsZSogd2Via2l0X2FjY2Vzc2libGVfbmV3KEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgR1R5cGUgdHlwZSA9IGdldEFjY2Vzc2liaWxpdHlU
eXBlRnJvbU9iamVjdChjb3JlT2JqZWN0KTsKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IHN0YXRp
Y19jYXN0PEF0a09iamVjdCo+KGdfb2JqZWN0X25ldyh0eXBlLCAwKSk7CisKKyAgICBhdGtfb2Jq
ZWN0X2luaXRpYWxpemUob2JqZWN0LCBjb3JlT2JqZWN0KTsKKworICAgIHJldHVybiBXRUJLSVRf
QUNDRVNTSUJMRShvYmplY3QpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJraXRfYWNj
ZXNzaWJsZV9nZXRfYWNjZXNzaWJpbGl0eV9vYmplY3QoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNz
aWJsZSkKK3sKKyAgICByZXR1cm4gYWNjZXNzaWJsZS0+bV9vYmplY3Q7Cit9CisKK3ZvaWQgd2Vi
a2l0X2FjY2Vzc2libGVfZGV0YWNoKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCit7Cisg
ICAgQVNTRVJUKGFjY2Vzc2libGUtPm1fb2JqZWN0KTsKKworICAgIGlmIChjb3JlKGFjY2Vzc2li
bGUpLT5yb2xlVmFsdWUoKSA9PSBXZWJBcmVhUm9sZSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKGFjY2Vzc2libGUsICJzdGF0ZS1jaGFuZ2UiLCAiZGVmdW5jdCIsIHRydWUpOworCisg
ICAgLy8gV2UgcmVwbGFjZSB0aGUgV2ViQ29yZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdpdGggYSBm
YWxsYmFjayBvYmplY3QgdGhhdAorICAgIC8vIHByb3ZpZGVzIGRlZmF1bHQgaW1wbGVtZW50YXRp
b25zIHRvIGF2b2lkIHJlcGV0aXRpdmUgbnVsbC1jaGVja2luZyBhZnRlcgorICAgIC8vIGRldGFj
aG1lbnQuCisgICAgYWNjZXNzaWJsZS0+bV9vYmplY3QgPSBmYWxsYmFja09iamVjdCgpOworfQor
CitBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQoV2ViS2l0
QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBpZiAoIWFjY2Vzc2libGUtPm1fb2JqZWN0
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBm
b2N1c2VkT2JqID0gYWNjZXNzaWJsZS0+bV9vYmplY3QtPmZvY3VzZWRVSUVsZW1lbnQoKTsKKyAg
ICBpZiAoIWZvY3VzZWRPYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZvY3Vz
ZWRPYmotPndyYXBwZXIoKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0Rm9jdXNl
ZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFjY2Vzc2liaWxpdHlPYmplY3QqIHJlZmVyZW5jZU9i
amVjdCwgaW50JiBvZmZzZXQpCit7CisgICAgLy8gSW5kaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBi
b2d1cyBoYXMgdHJhbnNwaXJlZC4KKyAgICBvZmZzZXQgPSAtMTsKKworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHJlZmVyZW5jZU9iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5vZGUqIGZvY3VzZWROb2RlID0gcmVmZXJlbmNl
T2JqZWN0LT5zZWxlY3Rpb24oKS5lbmQoKS5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFmb2N1
c2VkTm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJPYmplY3QqIGZvY3VzZWRS
ZW5kZXJlciA9IGZvY3VzZWROb2RlLT5yZW5kZXJlcigpOworICAgIGlmICghZm9jdXNlZFJlbmRl
cmVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3Vz
ZWRPYmplY3QgPSBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmb2N1c2Vk
UmVuZGVyZXIpOworICAgIGlmICghZm9jdXNlZE9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAvLyBMb29rIGZvciB0aGUgYWN0dWFsIChub3QgaWdub3JpbmcgYWNjZXNzaWJpbGl0eSkg
c2VsZWN0ZWQgb2JqZWN0LgorICAgIGlmIChmb2N1c2VkT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpCisgICAgICAgIGZvY3VzZWRPYmplY3QgPSBmb2N1c2VkT2JqZWN0LT5wYXJlbnRP
YmplY3RVbmlnbm9yZWQoKTsKKyAgICBpZiAoIWZvY3VzZWRPYmplY3QpCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8gRG9uJ3QgaWdub3JlIGxpbmtzIGlmIHRoZSBvZmZzZXQgaXMgYmVpbmcg
cmVxdWVzdGVkIGZvciBhIGxpbmsuCisgICAgaWYgKCFyZWZlcmVuY2VPYmplY3QtPmlzTGluaygp
ICYmIGZvY3VzZWRPYmplY3QtPmlzTGluaygpKQorICAgICAgICBmb2N1c2VkT2JqZWN0ID0gZm9j
dXNlZE9iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgaWYgKCFmb2N1c2VkT2Jq
ZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IDA7CisgICAg
aWYgKGZvY3VzZWRPYmplY3QgIT0gcmVmZXJlbmNlT2JqZWN0IHx8IGZvY3VzZWRPYmplY3QtPmlz
VGV4dENvbnRyb2woKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgZmlyc3QgY2hp
bGQncyBub2RlIG9mIHRoZSByZWZlcmVuY2UKKyAgICAgICAgLy8gb2JqZWN0IGFzIHRoZSBzdGFy
dCBwb2ludCB0byBjYWxjdWxhdGUgdGhlIGNhcmV0IG9mZnNldAorICAgICAgICAvLyBiZWNhdXNl
IHdlIHdhbnQgaXQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG9iamVjdCBvZgorICAgICAgICAvLyBy
ZWZlcmVuY2UsIG5vdCBqdXN0IHRvIHRoZSBmb2N1c2VkIG9iamVjdCAod2hpY2ggY291bGQgaGF2
ZQorICAgICAgICAvLyBwcmV2aW91cyBzaWJsaW5ncyB3aGljaCBzaG91bGQgYmUgdGFrZW4gaW50
byBhY2NvdW50IHRvbykuCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Rmlyc3RDaGls
ZCA9IHJlZmVyZW5jZU9iamVjdC0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAoYXhGaXJzdENo
aWxkKQorICAgICAgICAgICAgc3RhcnROb2RlID0gYXhGaXJzdENoaWxkLT5ub2RlKCk7CisgICAg
fQorICAgIGlmICghc3RhcnROb2RlKQorICAgICAgICBzdGFydE5vZGUgPSBmb2N1c2VkT2JqZWN0
LT5ub2RlKCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IFZpc2libGVQ
b3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKHN0YXJ0Tm9kZSksIERPV05TVFJFQU0pOworICAg
IFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGZvY3VzZWRPYmplY3QtPnNlbGVjdGlvbigp
LnZpc2libGVFbmQoKTsKKworICAgIGlmIChzdGFydFBvc2l0aW9uID09IGVuZFBvc2l0aW9uKQor
ICAgICAgICBvZmZzZXQgPSAwOworICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0
aW9uKSkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uLnByZXZpb3VzKCkpOworICAgICAgICBvZmZzZXQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKSArIDE7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbik7CisgICAgICAgIG9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
cmFuZ2UuZ2V0KCksIHRydWUpOworICAgIH0KKworICAgIHJldHVybiBmb2N1c2VkT2JqZWN0Owor
fQorCisjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRr
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWIwODAyYTc0NTVmNDFkNWY1YTYwZDA1YjhlYzJjMzBmOTA3ODk3MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrX2gKKyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJs
ZVdyYXBwZXJBdGtfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OworfQorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX1RZUEVfQUNDRVNTSUJMRSAgICAgICAgICAgICAgICAgICh3ZWJraXRfYWNj
ZXNzaWJsZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX0FDQ0VTU0lCTEUob2JqKSAgICAg
ICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9U
WVBFX0FDQ0VTU0lCTEUsIFdlYktpdEFjY2Vzc2libGUpKQorI2RlZmluZSBXRUJLSVRfQUNDRVNT
SUJMRV9DTEFTUyhrbGFzcykgICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xh
c3MpLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFLCBXZWJLaXRBY2Nlc3NpYmxlQ2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfQUNDRVNTSUJMRShvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfQUNDRVNTSUJMRSkpCisjZGVmaW5l
IFdFQktJVF9JU19BQ0NFU1NJQkxFX0NMQVNTKGtsYXNzKSAgICAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUpKQorI2RlZmluZSBXRUJL
SVRfQUNDRVNTSUJMRV9HRVRfQ0xBU1Mob2JqKSAgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFLCBXZWJLaXRBY2Nlc3NpYmxlQ2xh
c3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZSAgICAgICAgICAgICAgICBX
ZWJLaXRBY2Nlc3NpYmxlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVDbGFzcyAg
ICAgICAgICAgV2ViS2l0QWNjZXNzaWJsZUNsYXNzOworCitzdHJ1Y3QgX1dlYktpdEFjY2Vzc2li
bGUgeworICAgIEF0a09iamVjdCBwYXJlbnQ7CisgICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdCogbV9vYmplY3Q7Cit9OworCitzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVDbGFzcyB7Cisg
ICAgQXRrT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgd2Via2l0X2FjY2Vz
c2libGVfZ2V0X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOworCitXZWJLaXRBY2Nlc3NpYmxlKiB3
ZWJraXRfYWNjZXNzaWJsZV9uZXcoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopOworCitX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYWNjZXNz
aWJpbGl0eV9vYmplY3QoV2ViS2l0QWNjZXNzaWJsZSopOworCit2b2lkIHdlYmtpdF9hY2Nlc3Np
YmxlX2RldGFjaChXZWJLaXRBY2Nlc3NpYmxlKik7CisKK0F0a09iamVjdCogd2Via2l0X2FjY2Vz
c2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXZWJLaXRBY2Nlc3NpYmxlKik7CisKK1dlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3Jl
ZChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgaW50JiBvZmZzZXQpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLy8gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGtfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRnJhbWVTZWxlY3Rpb25HdGsuY3BwCmluZGV4IGE2Mzc4
NzAyM2Y1YTc5ZWI3YWUyYTg2ODNkNmYwM2UxMmZjNDQyNTYuLjg4NDljZjg0YzdhYTQ1YTJhMzU5
ODU4YTg2Y2VkMjk2ZjhmZWVmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Z3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0
ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAKQEAgLTIwLDEwICsyMCwxMCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAKLSNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgIldlYktpdEFj
Y2Vzc2libGVXcmFwcGVyQXRrLmgiCiAKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwCmluZGV4IDE5ZmM2ZmI2ZDA3MDAxZmMwNzFhMzQ5ZWIxZjMyNTU3M2Fk
ZjIxMzIuLjNmYTA2N2RiODE1YTRlZThkOWIxN2Q4MmViM2MxMGYwOWVhY2JhZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrLmNwcApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkFQSUNhc3Qu
aCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9i
amVjdC5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5j
bHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC02MCw2ICs1OSw3IEBACiAjaW5jbHVkZSAiU2Vj
dXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0RE9NUmFuZ2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAj
aW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZnJhbWUuY3BwCmluZGV4IDBjY2RkZDFjZDk2ZmRiNjEwMjI3ZTdhOTM2NDU3
MzUzMmZjN2NlODUuLjQ3Yjg4ODE4OTg2MTMzODdmZWU5OWViMWRhNjA2YThmMzJmYjU0YmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcApAQCAtMjgsNyAr
MjgsNiBAQAogI2luY2x1ZGUgIndlYmtpdHdlYmZyYW1lLmgiCiAKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCIKICNp
bmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCkBAIC01NSw2ICs1NCw3IEBACiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBw
ZXJBdGsuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
UmFuZ2VQcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0ZW51bXR5cGVzLmgiCg==
</data>
<flag name="review"
          id="124547"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123475</attachid>
            <date>2012-01-22 08:56:56 -0800</date>
            <delta_ts>2012-01-22 09:02:29 -0800</delta_ts>
            <desc>2. Rename WebKitAccessible&apos;s public functions</desc>
            <filename>bug-76783-20120122175654.patch</filename>
            <type>text/plain</type>
            <size>8398</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMwZDIwMDY5MWY2MzU2
MmEyZDA0Yzc4ZmJkNDZhNTgwMWVjZGI0MS4uYzY2ZTM2Njc3YTM4MWRiYjUxNjcwZjIzZmZkNmFk
ZTk5MDZmOTM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMxIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgUmVuYW1lIFdlYktpdEFjY2Vzc2libGUn
cyBwdWJsaWMgZnVuY3Rpb25zIHRvIGZvbGxvdyBXZWJLaXQncworICAgICAgICBjb2Rpbmcgc3R5
bGUgYW5kIHVwZGF0ZSBjYWxsZXJzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2Vi
S2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZU5l
dyk6IFJlbmFtZWQgZnJvbSB3ZWJraXRfYWNjZXNzaWJsZV9uZXcuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdCk6IExpa2V3aXNlLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZURldGFjaCk6TGlrZXdpc2UuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
R2V0Rm9jdXNlZEVsZW1lbnQpOiBMaWtld2lzZS4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oOgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0
byBXZWJLaXRBY2Nlc3NpYmxlJ3MgcHVibGljIGZ1bmN0aW9ucy4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6ZGV0YWNoV3JhcHBlcik6IFVwZGF0ZSBjYWxsLgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcik6IERpdHRvLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwOgorICAgICAgICAoY29y
ZSk6IFVwZGF0ZSBjYWxsLgorCisyMDEyLTAxLTIyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNh
bmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZWZhY3RvciBHVEsncyBhY2Nlc3Np
YmlsaXRpdHkgY29kZSB0byBiZSBtb3JlIG1vZHVsYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgUmVuYW1lIHRoZSBmaWxlIGZvciB0aGUgQVRLIEFjY2Vz
c2liaWxpdHlPYmplY3Qgd3JhcHBlciB0byBiZSBtb3JlCiAgICAgICAgIGNvaGVyZW50IHdpdGgg
dGhlIHJlc3Qgb2YgdGhlIGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IDllYzg4ZWIxYWYzMGU1MGZkMTk1NjY4YjU0NTQ0MzYxOTcyMGE4YzMuLjExYzVi
MDYxM2FmNjg3YjdiN2MxODdlZGFiMGYzN2RlZTIwMTFkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAg
LTUsNiArNSwyMCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisg
ICAgICAgIFVwZGF0ZSBjYWxsZXJzIHRvIFdlYktpdEFjY2Vzc2libGUncyBwdWJsaWMgZnVuY3Rp
b25zLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2V0Rm9jdXNlZEFjY2Vz
c2libGVFbGVtZW50KToKKyAgICAgICAgKG1vZGlmeUFjY2Vzc2liaWxpdHlWYWx1ZSk6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmFjY2Vzc2liaWxpdHlIZWxwVGV4dCk6CisK
KzIwMTItMDEtMjIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJl
IG1vcmUgbW9kdWxhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY3ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAg
ICAgICBVcGRhdGUgdGhlIGluY2x1ZGUgZm9yIHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHdyYXBw
ZXIgaGVhZGVyLgogCiAgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmNwcDogVXBkYXRlIGluY2x1ZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCmluZGV4IGExZjkxNWI0ZGRlMmU1
MzUxNjhmY2U5ODExOWRjNzhkZTAzYjhkMzguLmMyNDIyNGI5NTNkMjMxYzM4MTk5MmExYTQ3ZWVj
YmMxYTRlYTQ5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L0FYT2JqZWN0Q2FjaGVBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCkBAIC0zMywxMiArMzMsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqKQogewotICAgIHdlYmtpdF9hY2Nlc3NpYmxlX2RldGFjaChXRUJLSVRfQUND
RVNTSUJMRShvYmotPndyYXBwZXIoKSkpOworICAgIHdlYmtpdEFjY2Vzc2libGVEZXRhY2goV0VC
S0lUX0FDQ0VTU0lCTEUob2JqLT53cmFwcGVyKCkpKTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hl
OjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaikKIHsKLSAgICBBdGtPYmpl
Y3QqIGF0a09iaiA9IEFUS19PQkpFQ1Qod2Via2l0X2FjY2Vzc2libGVfbmV3KG9iaikpOworICAg
IEF0a09iamVjdCogYXRrT2JqID0gQVRLX09CSkVDVCh3ZWJraXRBY2Nlc3NpYmxlTmV3KG9iaikp
OwogICAgIG9iai0+c2V0V3JhcHBlcihhdGtPYmopOwogICAgIGdfb2JqZWN0X3VucmVmKGF0a09i
aik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCmluZGV4IGUwNDQ4MjI0ZjcyZGJhMjRm
YWEyMzU5YTMyMDJiYjczNDk3MjI1NzkuLmI0MjAwYmMyZjZiMzQ2ZDhjOGJmMjM0ZmE1YmFjNzgw
MDY5NTY0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCkBAIC02NSw3ICs2NSw3IEBA
IHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vz
c2libGUpCiAgICAgaWYgKCFhY2Nlc3NpYmxlIHx8ICFXRUJLSVRfSVNfQUNDRVNTSUJMRShhY2Nl
c3NpYmxlKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gd2Via2l0X2FjY2Vzc2li
bGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0KGFjY2Vzc2libGUpOworICAgIHJldHVybiB3ZWJr
aXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChhY2Nlc3NpYmxlKTsKIH0KIAogc3Rh
dGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluayog
bGluaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAppbmRleCAzZDRiYmJhMDQ5ODU2M2Nk
NjU2YzE3MjNhY2FkOWQ0MmVkYjA5ZTQwLi44YzJiNWYyODRiNTZkYmNlMzAzNmFjMzI2YWVjNzRj
NzJmMzI5MjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC0yNjc0LDcgKzI2
NzQsNyBAQCBzdGF0aWMgR1R5cGUgZ2V0QWNjZXNzaWJpbGl0eVR5cGVGcm9tT2JqZWN0KEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKLVdlYktp
dEFjY2Vzc2libGUqIHdlYmtpdF9hY2Nlc3NpYmxlX25ldyhBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0KQorV2ViS2l0QWNjZXNzaWJsZSogd2Via2l0QWNjZXNzaWJsZU5ldyhBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQogewogICAgIEdUeXBlIHR5cGUgPSBnZXRBY2Nlc3Np
YmlsaXR5VHlwZUZyb21PYmplY3QoY29yZU9iamVjdCk7CiAgICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihnX29iamVjdF9uZXcodHlwZSwgMCkpOwpAQCAtMjY4
NCwxMiArMjY4NCwxMiBAQCBXZWJLaXRBY2Nlc3NpYmxlKiB3ZWJraXRfYWNjZXNzaWJsZV9uZXco
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKICAgICByZXR1cm4gV0VCS0lUX0FDQ0VT
U0lCTEUob2JqZWN0KTsKIH0KIAotQWNjZXNzaWJpbGl0eU9iamVjdCogd2Via2l0X2FjY2Vzc2li
bGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0KFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUp
CitBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9i
amVjdChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQogewogICAgIHJldHVybiBhY2Nlc3Np
YmxlLT5tX29iamVjdDsKIH0KIAotdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2goV2ViS2l0
QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZURldGFjaChXZWJL
aXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQogewogICAgIEFTU0VSVChhY2Nlc3NpYmxlLT5tX29i
amVjdCk7CiAKQEAgLTI3MDIsNyArMjcwMiw3IEBAIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZGV0
YWNoKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCiAgICAgYWNjZXNzaWJsZS0+bV9vYmpl
Y3QgPSBmYWxsYmFja09iamVjdCgpOwogfQogCi1BdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9mb2N1c2VkX2VsZW1lbnQoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKK0F0a09i
amVjdCogd2Via2l0QWNjZXNzaWJsZUdldEZvY3VzZWRFbGVtZW50KFdlYktpdEFjY2Vzc2libGUq
IGFjY2Vzc2libGUpCiB7CiAgICAgaWYgKCFhY2Nlc3NpYmxlLT5tX29iamVjdCkKICAgICAgICAg
cmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaAppbmRleCBlYjA4MDJhNzQ1NWY0MWQ1
ZjVhNjBkMDViOGVjMmMzMGY5MDc4OTcwLi5kMjdiZjk1ODdhNzEwNThjYjFlYTcxNzExMGQxYmQy
MTRkMWYxODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgKQEAgLTUxLDEzICs1MSwxMyBA
QCBzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVDbGFzcyB7CiAKIEdUeXBlIHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKIAotV2ViS2l0QWNjZXNzaWJsZSogd2Vi
a2l0X2FjY2Vzc2libGVfbmV3KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKTsKK1dlYktp
dEFjY2Vzc2libGUqIHdlYmtpdEFjY2Vzc2libGVOZXcoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdCopOwogCi1XZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfYWNjZXNzaWJpbGl0eV9vYmplY3QoV2ViS2l0QWNjZXNzaWJsZSopOworV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdCogd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmpl
Y3QoV2ViS2l0QWNjZXNzaWJsZSopOwogCi12b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2RldGFjaChX
ZWJLaXRBY2Nlc3NpYmxlKik7Cit2b2lkIHdlYmtpdEFjY2Vzc2libGVEZXRhY2goV2ViS2l0QWNj
ZXNzaWJsZSopOwogCi1BdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2Vs
ZW1lbnQoV2ViS2l0QWNjZXNzaWJsZSopOworQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlR2V0
Rm9jdXNlZEVsZW1lbnQoV2ViS2l0QWNjZXNzaWJsZSopOwogCiBXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmplY3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmlnbm9yZWQoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdCosIGludCYgb2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5jcHAKaW5kZXggM2ZhMDY3ZGI4MTVhNGVlOGQ5YjE3ZDgyZWIzYzEwZjA5ZWFjYmFlOS4uYzU5
ZTFmNzkyMzIxOWM2YTYwNTY4YTgwMjlmMjk5NjU0MDAyODJkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuY3BwCkBAIC00ODQsNyArNDg0LDcgQEAgQXRrT2JqZWN0KiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OmdldEZvY3VzZWRBY2Nlc3NpYmxlRWxlbWVudChXZWJLaXRXZWJGcmFtZSoKICAg
ICBpZiAoIXdyYXBwZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHdlYmtpdF9h
Y2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQoV0VCS0lUX0FDQ0VTU0lCTEUod3JhcHBlcikp
OworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlR2V0Rm9jdXNlZEVsZW1lbnQoV0VCS0lUX0FD
Q0VTU0lCTEUod3JhcHBlcikpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpAQCAtNzYx
LDcgKzc2MSw3IEBAIHN0YXRpYyB2b2lkIG1vZGlmeUFjY2Vzc2liaWxpdHlWYWx1ZShBdGtPYmpl
Y3QqIGF4T2JqZWN0LCBib29sIGluY3JlbWVudCkKICAgICBpZiAoIWF4T2JqZWN0IHx8ICFXRUJL
SVRfSVNfQUNDRVNTSUJMRShheE9iamVjdCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYWNjZXNz
aWJpbGl0eV9vYmplY3QoV0VCS0lUX0FDQ0VTU0lCTEUoYXhPYmplY3QpKTsKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxp
dHlPYmplY3QoV0VCS0lUX0FDQ0VTU0lCTEUoYXhPYmplY3QpKTsKICAgICBpZiAoIWNvcmVPYmpl
Y3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNzg2LDcgKzc4Niw3IEBAIENTdHJpbmcgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjphY2Nlc3NpYmlsaXR5SGVscFRleHQoQXRrT2JqZWN0KiBheE9i
amVjdCkKICAgICBpZiAoIWF4T2JqZWN0IHx8ICFXRUJLSVRfSVNfQUNDRVNTSUJMRShheE9iamVj
dCkpCiAgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0ID0gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0
KFdFQktJVF9BQ0NFU1NJQkxFKGF4T2JqZWN0KSk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCA9IHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJ
VF9BQ0NFU1NJQkxFKGF4T2JqZWN0KSk7CiAgICAgaWYgKCFjb3JlT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQ1N0cmluZygpOwogCg==
</data>
<flag name="review"
          id="124546"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123476</attachid>
            <date>2012-01-22 08:58:38 -0800</date>
            <delta_ts>2012-01-22 09:03:13 -0800</delta_ts>
            <desc>3. Fix typo in class struct and coding style in WebKitAccessibleHyperlink</desc>
            <filename>bug-76783-20120122175835.patch</filename>
            <type>text/plain</type>
            <size>2769</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY2ZTM2Njc3YTM4MWRi
YjUxNjcwZjIzZmZkNmFkZTk5MDZmOTM1YS4uMjRlYTJhMjU2N2EwOWRhMTZlZGRhNjMwYmJlODA4
OWQ2YzE4MjEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDE5IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgRml4IHR5cG8gaW4gY2xhc3Mgc3RydWN0
IChwYXJlbnQgY2xhc3MgZmllbGQgaGFkIHRoZSB3cm9uZyB0eXBlKSwKKyAgICAgICAgZml4IGNv
ZGluZyBzdHlsZSBpc3N1ZXMgYW5kIHVwZGF0ZSBkYXRlIGluIGhlYWRlcnMuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcDoKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmg6CisKKzIw
MTItMDEtMjIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJlIG1v
cmUgbW9kdWxhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzY3ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAg
ICBSZW5hbWUgV2ViS2l0QWNjZXNzaWJsZSdzIHB1YmxpYyBmdW5jdGlvbnMgdG8gZm9sbG93IFdl
YktpdCdzCiAgICAgICAgIGNvZGluZyBzdHlsZSBhbmQgdXBkYXRlIGNhbGxlcnMuCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVI
eXBlcmxpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUh5cGVybGluay5jcHAKaW5kZXggYjQyMDBiYzJmNmIzNDZkOGM4YmYyMzRmYTViYWM3
ODAwNjk1NjQ5Yi4uNDAzZDlkNGI3ZmNiNGM3Y2EyMWYwNDBjMzgzYjNiYjdkNmRmNTI4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUh5cGVybGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2Vi
S2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIw
MTIgSWdhbGlhIFMuTC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5o
CmluZGV4IDgyMDYyZjc5ZTc2ZjhiYzI3ZWUxMDEwNjYyODcxMzIzMmM3MGFmZDYuLjA2ODJhMjVi
YWUxN2ZlMWI1YTgyNWE1ZDMwN2I4OTA1NjE2ODk0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5r
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNDcsMTQgKzQ3LDE0IEBAIHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZUh5
cGVybGluayB7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmtDbGFzcyB7
Ci0gICAgQXRrT2JqZWN0Q2xhc3MgcGFyZW50Q2xhc3M7CisgICAgQXRrSHlwZXJsaW5rQ2xhc3Mg
cGFyZW50Q2xhc3M7CiB9OwogCiBHVHlwZSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0VHlw
ZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CiAKLVdlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsqIHdlYmtp
dEFjY2Vzc2libGVIeXBlcmxpbmtOZXcoQXRrSHlwZXJsaW5rSW1wbCogaHlwZXJsaW5rSW1wbCk7
CitXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rTmV3
KEF0a0h5cGVybGlua0ltcGwqKTsKIAotV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogd2Vi
a2l0QWNjZXNzaWJsZUh5cGVybGlua0dldEFjY2Vzc2liaWxpdHlPYmplY3QoV2ViS2l0QWNjZXNz
aWJsZUh5cGVybGluayogbGluayk7CitXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJr
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXZWJLaXRBY2Nlc3Np
YmxlSHlwZXJsaW5rKik7CiAKIEdfRU5EX0RFQ0xTCiAK
</data>
<flag name="review"
          id="124545"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123477</attachid>
            <date>2012-01-22 09:02:35 -0800</date>
            <delta_ts>2012-01-22 09:57:03 -0800</delta_ts>
            <desc>4. Move function returnString() to a new utility file</desc>
            <filename>bug-76783-20120122180228.patch</filename>
            <type>text/plain</type>
            <size>8307</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRlYTJhMjU2N2EwOWRh
MTZlZGRhNjMwYmJlODA4OWQ2YzE4MjEwOS4uMjgzZTk0NzY3ZTY0NTA5NmU4OTJhNTViY2Q0MTA3
NTg1NDgzMGVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMwIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTW92ZSBjb21tb24gZnVuY3Rpb24gcmV0
dXJuU3RyaW5nKCkgb3VyIGZyb20gdGhlIHdyYXBwZXIgYW5kCisgICAgICAgIGh5cGVybGluayBp
bXBsZW1lbnRhdGlvbnMgdG8gYSBuZXcgdXRpbGl0eSBmaWxlLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKHJl
dHVyblN0cmluZyk6IFRha2VuIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGFu
ZAorICAgICAgICBXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmg6IEFkZGVkLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHA6IFJlbW92ZSBs
b2NhbAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiByZXR1cm5TdHJpbmcuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOiBEaXR0by4K
KworICAgICAgICBBZGQgbmV3IGZpbGVzIHRvIGJ1aWxkIGZpbGVzLgorCisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbTogQWRkIFdlYktpdEFjY2Vzc2libGVVdGlsLltofGNwcF0uCisgICAg
ICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQ
cmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0b3IgR1RL
J3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEZpeCB0eXBvIGluIGNsYXNzIHN0cnVj
dCAocGFyZW50IGNsYXNzIGZpZWxkIGhhZCB0aGUgd3JvbmcgdHlwZSksCiAgICAgICAgIGZpeCBj
b2Rpbmcgc3R5bGUgaXNzdWVzIGFuZCB1cGRhdGUgZGF0ZSBpbiBoZWFkZXJzLgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0MzIxYjkzMTVlZWYwY2I1YWZmMTNmNDhkZGMwNjkx
ZWYxN2FmZDFhLi5lYzdiZTI1MWYzZWE1MjU0OWQwZDk3MzIzMWE4MzBkNzM1MzBkODg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ0MjQsNiArNDQyNCw4IEBAIHdlYmNvcmVn
dGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmpl
Y3RDYWNoZUF0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVIeXBlcmxpbmsuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCiAJU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0
ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyR3RrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjUzMzUyZjRmYzAxOGFhZTdiMjQ0Mjk0ZjgyYzI5YTlj
ZTNjOTk1Zi4uYmZiNWM2MTFjNWY3ZTUxZmNlMWU2ZWZmNTMxMDJiZDgxZGZhYjU2MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMTc2OCw2ICsxNzY4LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaCcsCisgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwJywKKyAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oJywKICAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAn
LAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVy
QXRrLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMu
bW0nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUh5cGVybGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAppbmRleCA0MDNkOWQ0YjdmY2I0YzdjYTIx
ZjA0MGMzODNiM2JiN2Q2ZGY1Mjg1Li4yZTRjMTkzNjRmMzFmODI2ODIzYjhmZDZkNDllNjZmNDUy
ODExZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlVXRp
bC5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgiCiAjaW5jbHVkZSAi
aHRtbGVkaXRpbmcuaCIKIApAQCAtNTIsMTQgKzUzLDYgQEAgZW51bSB7CiAKIHN0YXRpYyBncG9p
bnRlciB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rUGFyZW50Q2xhc3MgPSAwOwogCi0vLyBVc2Vk
IHRvIHByb3ZpZGUgY29uc3QgY2hhciogcmV0dXJucy4KLXN0YXRpYyBjb25zdCBjaGFyKiByZXR1
cm5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCi17Ci0gICAgc3RhdGljIENTdHJpbmcgcmV0dXJu
ZWRTdHJpbmc7Ci0gICAgcmV0dXJuZWRTdHJpbmcgPSBzdHIudXRmOCgpOwotICAgIHJldHVybiBy
ZXR1cm5lZFN0cmluZy5kYXRhKCk7Ci19Ci0KIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCiB7CiAgICAgaWYgKCFhY2Nlc3NpYmxl
IHx8ICFXRUJLSVRfSVNfQUNDRVNTSUJMRShhY2Nlc3NpYmxlKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42NzE4M2FlOGUyMmRkYjRkZWNlMzE4YjQ3YmZiNDM1Y2NiZGRjMmQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBQb3J0aW9ucyBm
cm9tIE1vemlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CisgKgorICogVGhlIE9yaWdp
bmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9w
ZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAq
IFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQg
KEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKy8vIFVzZWQgdG8gcHJvdmlkZSBjb25zdCBjaGFyKiByZXR1cm5zLgorY29u
c3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBD
U3RyaW5nIHJldHVybmVkU3RyaW5nOworICAgIHJldHVybmVkU3RyaW5nID0gc3RyLnV0ZjgoKTsK
KyAgICByZXR1cm4gcmV0dXJuZWRTdHJpbmcuZGF0YSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWNhNTVhOTIyNmEwYmMzMzYzYzhmMTFhZmY1MmJjYTBiYzI5NzU1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVVdGlsLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFu
dGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVV
dGlsX2gKKyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJsZVV0aWxfaAorCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8v
IFJldHVybnMgYSBjb25zdCBjaGFyKiBwb2ludGluZyB0byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVk
IHN0cmluZy4KK2NvbnN0IGNoYXIqIHJldHVyblN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktpdEFjY2Vzc2libGVVdGlsX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVy
QXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVXcmFwcGVyQXRrLmNwcAppbmRleCA4YzJiNWYyODRiNTZkYmNlMzAzNmFjMzI2YWVjNzRjNzJm
MzI5MjRmLi5kMWQyZDQ0NTYyMmVkMzk2ZjBiM2I5MTZlZGE0NmVjNzk5NzM2YzI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3Jh
cHBlckF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiVGV4
dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0
QWNjZXNzaWJsZUh5cGVybGluay5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAK
QEAgLTkyLDE0ICs5Myw2IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmYWxsYmFja09i
amVjdCgpCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotLy8gVXNlZCB0byBwcm92aWRlIGNvbnN0
IGNoYXIqIHJldHVybnMuCi1zdGF0aWMgY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyKQotewotICAgIHN0YXRpYyBDU3RyaW5nIHJldHVybmVkU3RyaW5nOwotICAgIHJl
dHVybmVkU3RyaW5nID0gc3RyLnV0ZjgoKTsKLSAgICByZXR1cm4gcmV0dXJuZWRTdHJpbmcuZGF0
YSgpOwotfQotCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShXZWJLaXRBY2Nlc3Np
YmxlKiBhY2Nlc3NpYmxlKQogewogICAgIGlmICghYWNjZXNzaWJsZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123478</attachid>
            <date>2012-01-22 09:04:02 -0800</date>
            <delta_ts>2012-01-22 09:09:36 -0800</delta_ts>
            <desc>5. New files for the implementation of the AtkAction interface</desc>
            <filename>bug-76783-20120122180359.patch</filename>
            <type>text/plain</type>
            <size>11110</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjgzZTk0NzY3ZTY0NTA5
NmU4OTJhNTViY2Q0MTA3NTg1NDgzMGVmYi4uMTg5ZDBkNGMxYmY5Y2QzYzJlMjJlZmJjZDFlNDdi
MDVhNDI5ZDI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDM0IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UsCisgICAgICAgIGNvbnRhaW5pbmcg
dGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZUFjdGlvbkludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUFjdGlvbkRv
QWN0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXROQWN0aW9ucyk6Cisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0RGVzY3JpcHRpb24pOgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldEtleWJpbmRpbmcpOgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUFjdGlvbkdldE5hbWUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaDogQWRkZWQuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6IFJlbW92ZSBjb2RlCisg
ICAgICAgIHJlbGF0ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtBY3Rpb24gaW50
ZXJmYWNlLgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gYnVpbGQgZmlsZXMuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFj
dGlvbi5baHxjcHBdLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisKKzIwMTItMDEt
MjIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJlIG1vcmUgbW9k
dWxhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3
ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBNb3Zl
IGNvbW1vbiBmdW5jdGlvbiByZXR1cm5TdHJpbmcoKSBvdXIgZnJvbSB0aGUgd3JhcHBlciBhbmQK
ICAgICAgICAgaHlwZXJsaW5rIGltcGxlbWVudGF0aW9ucyB0byBhIG5ldyB1dGlsaXR5IGZpbGUu
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGVjN2JlMjUxZjNlYTUyNTQ5ZDBk
OTczMjMxYTgzMGQ3MzUzMGQ4ODYuLjAxZjNhODE2ZjRlYmVhOGM4YTM4YTNhZDMzOGI1NTJiZjlk
NTJiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDQyNCw2ICs0NDI0LDgg
QEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VBY3Rpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2Vi
S2l0QWNjZXNzaWJsZVV0aWwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IGJmYjVjNjExYzVmN2U1MWZjZTFlNmVmZjUzMTAyYmQ4MWRmYWI1NjEuLmUyMWZiYjQ2ZjI0ZmRi
ODE2YjI0M2JiMTRiMmM3NjMyNDI0ZjAzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE3NjgsNiAr
MTc2OCw4IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdEF0ay5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVIeXBlcmxpbmsuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uY3BwJywKKyAgICAgICAgICAgICdhY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmgnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCcsCiAgICAg
ICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCcsCiAgICAg
ICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgw
ZjcxMzAzZDNjMTcyOTQzNzhlMmJkZjk0OTIzZGMxMDZiNzg1MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VBY3Rpb24uY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
TnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTEx
eSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6CisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96
aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdp
bmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0
ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRo
ZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCIKKworI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRp
YyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0FjdGlvbiogYWN0aW9uKQoreworICAgIGlm
ICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUoYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV0VCS0lUX0FD
Q0VTU0lCTEUoYWN0aW9uKSk7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUFjdGlvbkludGVy
ZmFjZUluaXQoQXRrQWN0aW9uSWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kb19hY3Rpb24g
PSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uRG9BY3Rpb247CisgICAgaWZhY2UtPmdldF9uX2FjdGlv
bnMgPSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0TkFjdGlvbnM7CisgICAgaWZhY2UtPmdldF9k
ZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXREZXNjcmlwdGlvbjsKKyAgICBp
ZmFjZS0+Z2V0X2tleWJpbmRpbmcgPSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0S2V5YmluZGlu
ZzsKKyAgICBpZmFjZS0+Z2V0X25hbWUgPSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0TmFtZTsK
K30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUFjdGlvbkRvQWN0aW9uKEF0a0FjdGlvbiog
YWN0aW9uLCBnaW50IGluZGV4KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFpbmRleCwg
RkFMU0UpOworICAgIHJldHVybiBjb3JlKGFjdGlvbiktPnBlcmZvcm1EZWZhdWx0QWN0aW9uKCk7
Cit9CisKK2dpbnQgd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldE5BY3Rpb25zKEF0a0FjdGlvbiop
Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQWN0
aW9uR2V0RGVzY3JpcHRpb24oQXRrQWN0aW9uKiwgZ2ludCkKK3sKKyAgICAvLyBUT0RPOiBOZWVk
IGEgd2F5IHRvIHByb3ZpZGUvbG9jYWxpemUgYWN0aW9uIGRlc2NyaXB0aW9ucy4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAiIjsKK30KKworY29uc3QgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVBY3Rpb25HZXRLZXliaW5kaW5nKEF0a0FjdGlvbiogYWN0aW9uLCBnaW50IGluZGV4
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFpbmRleCwgMCk7CisgICAgLy8gRklYTUU6
IENvbnN0cnVjdCBhIHByb3BlciBrZXliaW5kaW5nIHN0cmluZy4KKyAgICByZXR1cm4gcmV0dXJu
U3RyaW5nKGNvcmUoYWN0aW9uKS0+YWNjZXNzS2V5KCkuc3RyaW5nKCkpOworfQorCitjb25zdCBn
Y2hhciogd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldE5hbWUoQXRrQWN0aW9uKiBhY3Rpb24sIGdp
bnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWluZGV4LCAwKTsKKyAgICBy
ZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmUoYWN0aW9uKS0+YWN0aW9uVmVyYigpKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VBY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODdiMTlhZDdiYTJmN2U1
ZTgyYzE1Njk0NDliNTMxYjY2MzViNmZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5oCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uX2gKKyNkZWZp
bmUgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbl9oCisKKyNpbmNsdWRlIDxhdGsvYXRr
Lmg+CisKK0dfQkVHSU5fREVDTFMKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uSW50ZXJm
YWNlSW5pdChBdGtBY3Rpb25JZmFjZSopOworCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlQWN0
aW9uRG9BY3Rpb24oQXRrQWN0aW9uKiwgZ2ludCBpbmRleCk7CisKK2dpbnQgd2Via2l0QWNjZXNz
aWJsZUFjdGlvbkdldE5BY3Rpb25zKEF0a0FjdGlvbiopOworCitjb25zdCBnY2hhciogd2Via2l0
QWNjZXNzaWJsZUFjdGlvbkdldERlc2NyaXB0aW9uKEF0a0FjdGlvbiosIGdpbnQgaW5kZXgpOwor
Citjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldEtleWJpbmRpbmcoQXRrQWN0
aW9uKiwgZ2ludCBpbmRleCk7CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9u
R2V0TmFtZShBdGtBY3Rpb24qLCBnaW50IGluZGV4KTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8vIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBw
ZXJBdGsuY3BwCmluZGV4IGQxZDJkNDQ1NjIyZWQzOTZmMGIzYjkxNmVkYTQ2ZWM3OTk3MzZjMjgu
LmM4MmM5Njc3YjZhMDY3MDNmZGY4YzE1ODlmNDAxNjg1M2EwNjg0YTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlV3JhcHBlckF0ay5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3Np
YmxlSHlwZXJsaW5rLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlv
bi5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiaHRtbGVk
aXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0xMDksMTEgKzExMCw2IEBA
IHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a09iamVjdCogb2JqZWN0KQogICAg
IHJldHVybiBjb3JlKFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCkpOwogfQogCi1zdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtBY3Rpb24qIGFjdGlvbikKLXsKLSAgICByZXR1cm4g
Y29yZShBVEtfT0JKRUNUKGFjdGlvbikpOwotfQotCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZShBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKIHsKICAgICByZXR1cm4gY29yZShBVEtf
T0JKRUNUKHNlbGVjdGlvbikpOwpAQCAtODY4LDQ3ICs4NjQsNiBAQCB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfdHlwZSh2b2lkKQogICAgIHJldHVybiB0eXBlX3ZvbGF0aWxlOwogfQogCi1zdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2RvX2FjdGlvbihBdGtBY3Rpb24qIGFj
dGlvbiwgZ2ludCBpKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFpLCBGQUxTRSk7Ci0g
ICAgcmV0dXJuIGNvcmUoYWN0aW9uKS0+cGVyZm9ybURlZmF1bHRBY3Rpb24oKTsKLX0KLQotc3Rh
dGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9uX2FjdGlvbnMoQXRrQWN0aW9u
KiBhY3Rpb24pCi17Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciogd2Vi
a2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9kZXNjcmlwdGlvbihBdGtBY3Rpb24qIGFjdGlvbiwg
Z2ludCBpKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFpLCAwKTsKLSAgICAvLyBUT0RP
OiBOZWVkIGEgd2F5IHRvIHByb3ZpZGUvbG9jYWxpemUgYWN0aW9uIGRlc2NyaXB0aW9ucy4KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiIjsKLX0KLQotc3RhdGljIGNvbnN0IGdj
aGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X2tleWJpbmRpbmcoQXRrQWN0aW9uKiBh
Y3Rpb24sIGdpbnQgaSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghaSwgMCk7Ci0gICAg
Ly8gRklYTUU6IENvbnN0cnVjdCBhIHByb3BlciBrZXliaW5kaW5nIHN0cmluZy4KLSAgICByZXR1
cm4gcmV0dXJuU3RyaW5nKGNvcmUoYWN0aW9uKS0+YWNjZXNzS2V5KCkuc3RyaW5nKCkpOwotfQot
Ci1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2FjdGlvbl9nZXRfbmFtZShB
dGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFp
LCAwKTsKLSAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmUoYWN0aW9uKS0+YWN0aW9uVmVyYigp
KTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX2FjdGlvbl9pbnRlcmZhY2VfaW5pdChBdGtBY3Rpb25J
ZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmRvX2FjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxl
X2FjdGlvbl9kb19hY3Rpb247Ci0gICAgaWZhY2UtPmdldF9uX2FjdGlvbnMgPSB3ZWJraXRfYWNj
ZXNzaWJsZV9hY3Rpb25fZ2V0X25fYWN0aW9uczsKLSAgICBpZmFjZS0+Z2V0X2Rlc2NyaXB0aW9u
ID0gd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9kZXNjcmlwdGlvbjsKLSAgICBpZmFjZS0+
Z2V0X2tleWJpbmRpbmcgPSB3ZWJraXRfYWNjZXNzaWJsZV9hY3Rpb25fZ2V0X2tleWJpbmRpbmc7
Ci0gICAgaWZhY2UtPmdldF9uYW1lID0gd2Via2l0X2FjY2Vzc2libGVfYWN0aW9uX2dldF9uYW1l
OwotfQotCiAvLyBTZWxlY3Rpb24gKGZvciBjb250cm9scykKIAogc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGxpc3RPYmplY3RGb3JTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24p
CkBAIC0yNDc4LDcgKzI0MzMsNyBAQCBzdGF0aWMgdm9pZCBhdGtWYWx1ZUludGVyZmFjZUluaXQo
QXRrVmFsdWVJZmFjZSogaWZhY2UpCiB9CiAKIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBB
dGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewotICAgIHsoR0ludGVyZmFjZUluaXRGdW5j
KWF0a19hY3Rpb25faW50ZXJmYWNlX2luaXQsCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpd2Vi
a2l0QWNjZXNzaWJsZUFjdGlvbkludGVyZmFjZUluaXQsCiAgICAgIChHSW50ZXJmYWNlRmluYWxp
emVGdW5jKSAwLCAwfSwKICAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfc2VsZWN0aW9uX2lu
dGVyZmFjZV9pbml0LAogICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCg==
</data>
<flag name="review"
          id="124550"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123479</attachid>
            <date>2012-01-22 09:08:07 -0800</date>
            <delta_ts>2012-01-22 10:07:06 -0800</delta_ts>
            <desc>6. New files for the implementation of the AtkComponent interface</desc>
            <filename>bug-76783-20120122180805.patch</filename>
            <type>text/plain</type>
            <size>15306</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg5ZDBkNGMxYmY5Y2Qz
YzJlMjJlZmJjZDFlNDdiMDVhNDI5ZDI0NS4uYWIzMzA1NmFlODQ2ZTA2MGMxMjhlNGQyMGY0MzYz
M2ZmNjdkYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDQwIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0NvbXBvbmVudCBpbnRlcmZhY2UsCisgICAgICAgIGNvbnRhaW5p
bmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VD
b21wb25lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoYXRrVG9Db250
ZW50cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50SW50ZXJmYWNlSW5pdCk6
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9pbnQp
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdldEV4dGVudHMpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oOiBBZGRlZC4K
KworICAgICAgICBNb3ZlIGNvbW1vbiBmdW5jdGlvbiBjb250ZW50c1RvQXRrKCkgb3V0IGZyb20g
dGhlIHdyYXBwZXIgdG8gdGhlCisgICAgICAgIHV0aWxpdHkgZmlsZSwgdXNlZCBmcm9tIFdlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuY3BwLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwOgorICAgICAgICAoY29udGVudHNUb0F0
ayk6IFRha2VuIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmg6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOiBSZW1vdmUgbG9j
YWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgY29udGVudHNUb0F0aywgYXMgd2VsbCBhcyBh
bGwgdGhlIGNvZGUgcmVsYXRlZAorICAgICAgICB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEF0a0NvbXBvbmVudCBpbnRlcmZhY2UuCisKKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBidWls
ZCBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LltofGNwcF0uCisgICAgICAgICogV2ViQ29yZS5neXBp
OiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5
IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCiAgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBB
dGtBY3Rpb24gaW50ZXJmYWNlLAogICAgICAgICBjb250YWluaW5nIHRoZSByZWxhdGVkIGNvZGUg
ZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAuCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDAxZjNhODE2ZjRlYmVhOGM4YTM4YTNhZDMzOGI1NTJiZjlkNTJiNTIu
Ljk5N2U2ODQxODYzNjdlMzM2NjFiY2JlYjJhZDhkNmQzMWU0ODY4N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtNDQyNiw2ICs0NDI2LDggQEAgd2ViY29yZWd0a19zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SHlwZXJsaW5rLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCBcCisJU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVu
dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VDb21wb25lbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGUyMWZiYjQ2ZjI0ZmRiODE2YjI0M2JiMTRiMmM3NjMyNDI0ZjAzOTYuLjFiMDk2Zjkw
MGFmZDFkNjJmYWNmZDIzNTdlNTM0MjgxZTAwZjVjZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE3
NzAsNiArMTc3MCw4IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUh5cGVybGluay5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5oJywKKyAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNw
cCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUNvbXBvbmVudC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VDb21wb25lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmMjVlMDYzMTMxZmQwZDZmY2JiNzc2YmM3YTli
ZDE2Yjk2OWViZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcApAQCAtMCwwICsx
LDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBm
b2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisg
KgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBT
dW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmgiCisKKyNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCisjaW5jbHVkZSAiV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0
YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0NvbXBvbmVudCogY29tcG9uZW50KQor
eworICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUoY29tcG9uZW50KSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmpl
Y3QoV0VCS0lUX0FDQ0VTU0lCTEUoY29tcG9uZW50KSk7Cit9CisKK3N0YXRpYyBJbnRQb2ludCBh
dGtUb0NvbnRlbnRzKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlw
ZSBjb29yZFR5cGUsIGdpbnQgeCwgZ2ludCB5KQoreworICAgIEludFBvaW50IHBvcyh4LCB5KTsK
KworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZp
ZXcoKTsKKyAgICBpZiAoZnJhbWVWaWV3KSB7CisgICAgICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7
CisgICAgICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKKyAgICAgICAgICAgIHJldHVybiBmcmFtZVZp
ZXctPnNjcmVlblRvQ29udGVudHMocG9zKTsKKyAgICAgICAgY2FzZSBBVEtfWFlfV0lORE9XOgor
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhwb3MpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBvczsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3Np
YmxlQ29tcG9uZW50SW50ZXJmYWNlSW5pdChBdGtDb21wb25lbnRJZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPnJlZl9hY2Nlc3NpYmxlX2F0X3BvaW50ID0gd2Via2l0QWNjZXNzaWJsZUNvbXBv
bmVudFJlZkFjY2Vzc2libGVBdFBvaW50OworICAgIGlmYWNlLT5nZXRfZXh0ZW50cyA9IHdlYmtp
dEFjY2Vzc2libGVDb21wb25lbnRHZXRFeHRlbnRzOworICAgIGlmYWNlLT5ncmFiX2ZvY3VzID0g
d2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1czsKK30KKworQXRrT2JqZWN0KiB3ZWJr
aXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9pbnQoQXRrQ29tcG9uZW50KiBj
b21wb25lbnQsIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQoreworICAg
IEludFBvaW50IHBvcyA9IGF0a1RvQ29udGVudHMoY29yZShjb21wb25lbnQpLCBjb29yZFR5cGUs
IHgsIHkpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFyZ2V0ID0gY29yZShjb21wb25l
bnQpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb3MpOworICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBnX29iamVjdF9yZWYodGFyZ2V0LT53cmFwcGVyKCkpOworICAgIHJl
dHVybiB0YXJnZXQtPndyYXBwZXIoKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9u
ZW50R2V0RXh0ZW50cyhBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCogeCwgZ2ludCogeSwg
Z2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKK3sKKyAg
ICBJbnRSZWN0IHJlY3QgPSBjb3JlKGNvbXBvbmVudCktPmVsZW1lbnRSZWN0KCk7CisgICAgY29u
dGVudHNUb0F0ayhjb3JlKGNvbXBvbmVudCksIGNvb3JkVHlwZSwgcmVjdCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHcmFiRm9j
dXMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCit7CisgICAgY29yZShjb21wb25lbnQpLT5zZXRG
b2N1c2VkKHRydWUpOworICAgIHJldHVybiBjb3JlKGNvbXBvbmVudCktPmlzRm9jdXNlZCgpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIx
MGZjYTFlNTM4ODY0NDA2MDQzZjI2MjU5YzY4Yjg2Mzc4NDZkNTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlQ29tcG9uZW50LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VDb21wb25lbnRfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29t
cG9uZW50X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKworR19CRUdJTl9ERUNMUworCit2b2lk
IHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0KEF0a0NvbXBvbmVudElmYWNl
Kik7CisKK0F0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJlZkFjY2Vzc2libGVB
dFBvaW50KEF0a0NvbXBvbmVudCosIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29yZFR5cGUpOworCit2
b2lkIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHZXRFeHRlbnRzKEF0a0NvbXBvbmVudCosIGdp
bnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSk7
CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHcmFiRm9jdXMoQXRrQ29tcG9u
ZW50Kik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlQ29tcG9uZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA2NzE4M2FlOGUyMmRkYjRkZWNl
MzE4YjQ3YmZiNDM1Y2NiZGRjMmQ2Li40YWRiNDVlYzY3MzY1YWMwNTUxNTU5ZWMyY2UyZmYwNDEy
ZjM5Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0zMSw5ICszMSw0MCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAKKyNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
dm9pZCBjb250ZW50c1RvQXRrKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nv
b3JkVHlwZSBjb29yZFR5cGUsIEludFJlY3QgcmVjdCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCog
d2lkdGgsIGdpbnQqIGhlaWdodCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVP
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisKKyAgICBpZiAoZnJhbWVWaWV3KSB7CisgICAg
ICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7CisgICAgICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKKyAg
ICAgICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICAgICAg
cmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihyZWN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHgpCisgICAgICAgICp4ID0gcmVjdC54
KCk7CisgICAgaWYgKHkpCisgICAgICAgICp5ID0gcmVjdC55KCk7CisgICAgaWYgKHdpZHRoKQor
ICAgICAgICAqd2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAg
KmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Cit9CisKIC8vIFVzZWQgdG8gcHJvdmlkZSBjb25zdCBj
aGFyKiByZXR1cm5zLgogY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZVV0aWwuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmgKaW5kZXggNWNhNTVhOTIyNmEwYmMzMzYzYzhmMTFhZmY1MmJjYTBi
YzI5NzU1ZS4uMDAwMThmMzk2MWM0NGFmYWI4MzJlYTg4OGZmM2U0NWJhNWU3YTYxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0
aWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5oCkBAIC0yMiwxMSArMjIsMTkgQEAKICNpZm5kZWYgV2ViS2l0QWNjZXNzaWJsZVV0
aWxfaAogI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlVXRpbF9oCiAKLSNpbmNsdWRlIDxnbGliLmg+
CisjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OworY2xhc3Mg
SW50UmVjdDsKK30KKwogR19CRUdJTl9ERUNMUwogCisvLyBSZXR1cm5zIGNvbnRlbnQncyBjb29y
ZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgd2luZG93IG9yIHRoZSBzY3JlZW4uCit2b2lkIGNvbnRl
bnRzVG9BdGsoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCosIEF0a0Nvb3JkVHlwZSwgV2Vi
Q29yZTo6SW50UmVjdCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGggPSAwLCBnaW50KiBo
ZWlnaHQgPSAwKTsKKwogLy8gUmV0dXJucyBhIGNvbnN0IGNoYXIqIHBvaW50aW5nIHRvIGEgc3Rh
dGljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLgogY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0
IFN0cmluZyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKaW5kZXggYzgyYzk2Nzdi
NmEwNjcwM2ZkZjhjMTU4OWY0MDE2ODUzYTA2ODRhNS4uNTllYzIyMmVhZDZiNWVjYTM1YzU4ZWFi
OWNmMDc0YzNhYzc3ZjQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcApAQCAtNjQs
NiArNjQsNyBAQAogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldlYktpdEFj
Y2Vzc2libGVIeXBlcmxpbmsuaCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
QWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5o
IgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0xMjUsMTEgKzEyNiw2IEBAIHN0
YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0VkaXRhYmxlVGV4dCogdGV4dCkKICAg
ICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHRleHQpKTsKIH0KIAotc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmUoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIGNv
cmUoQVRLX09CSkVDVChjb21wb25lbnQpKTsKLX0KLQogc3RhdGljIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmUoQXRrSW1hZ2UqIGltYWdlKQogewogICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1Qo
aW1hZ2UpKTsKQEAgLTE5MzQsNzggKzE5MzAsNiBAQCBzdGF0aWMgdm9pZCBhdGtfZWRpdGFibGVf
dGV4dF9pbnRlcmZhY2VfaW5pdChBdGtFZGl0YWJsZVRleHRJZmFjZSogaWZhY2UpCiAgICAgaWZh
Y2UtPnBhc3RlX3RleHQgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3Bhc3RlX3Rl
eHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbnRlbnRzVG9BdGsoQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgSW50UmVjdCByZWN0LCBnaW50KiB4
LCBnaW50KiB5LCBnaW50KiB3aWR0aCA9IDAsIGdpbnQqIGhlaWdodCA9IDApCi17Ci0gICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBjb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwotCi0g
ICAgaWYgKGZyYW1lVmlldykgewotICAgICAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgewotICAgICAg
ICBjYXNlIEFUS19YWV9XSU5ET1c6Ci0gICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250
ZW50c1RvV2luZG93KHJlY3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVRL
X1hZX1NDUkVFTjoKLSAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3Jl
ZW4ocmVjdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICh4KQotICAgICAgICAqeCA9IHJlY3QueCgpOwotICAgIGlmICh5KQotICAgICAgICAqeSA9IHJl
Y3QueSgpOwotICAgIGlmICh3aWR0aCkKLSAgICAgICAgKndpZHRoID0gcmVjdC53aWR0aCgpOwot
ICAgIGlmIChoZWlnaHQpCi0gICAgICAgICpoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotfQotCi1z
dGF0aWMgSW50UG9pbnQgYXRrVG9Db250ZW50cyhBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlLCBnaW50IHgsIGdpbnQgeSkKLXsKLSAgICBJbnRQ
b2ludCBwb3MoeCwgeSk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3Qt
PmRvY3VtZW50RnJhbWVWaWV3KCk7Ci0gICAgaWYgKGZyYW1lVmlldykgewotICAgICAgICBzd2l0
Y2ggKGNvb3JkVHlwZSkgewotICAgICAgICBjYXNlIEFUS19YWV9TQ1JFRU46Ci0gICAgICAgICAg
ICByZXR1cm4gZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvcyk7Ci0gICAgICAgIGNhc2Ug
QVRLX1hZX1dJTkRPVzoKLSAgICAgICAgICAgIHJldHVybiBmcmFtZVZpZXctPndpbmRvd1RvQ29u
dGVudHMocG9zKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwb3M7Ci19Ci0KLXN0
YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJs
ZV9hdF9wb2ludChBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCB4LCBnaW50IHksIEF0a0Nv
b3JkVHlwZSBjb29yZFR5cGUpCi17Ci0gICAgSW50UG9pbnQgcG9zID0gYXRrVG9Db250ZW50cyhj
b3JlKGNvbXBvbmVudCksIGNvb3JkVHlwZSwgeCwgeSk7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogdGFyZ2V0ID0gY29yZShjb21wb25lbnQpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChw
b3MpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBnX29iamVjdF9y
ZWYodGFyZ2V0LT53cmFwcGVyKCkpOwotICAgIHJldHVybiB0YXJnZXQtPndyYXBwZXIoKTsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dldF9leHRlbnRzKEF0
a0NvbXBvbmVudCogY29tcG9uZW50LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2lu
dCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQotewotICAgIEludFJlY3QgcmVjdCA9
IGNvcmUoY29tcG9uZW50KS0+ZWxlbWVudFJlY3QoKTsKLSAgICBjb250ZW50c1RvQXRrKGNvcmUo
Y29tcG9uZW50KSwgY29vcmRUeXBlLCByZWN0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFiX2ZvY3VzKEF0
a0NvbXBvbmVudCogY29tcG9uZW50KQotewotICAgIGNvcmUoY29tcG9uZW50KS0+c2V0Rm9jdXNl
ZCh0cnVlKTsKLSAgICByZXR1cm4gY29yZShjb21wb25lbnQpLT5pc0ZvY3VzZWQoKTsKLX0KLQot
c3RhdGljIHZvaWQgYXRrX2NvbXBvbmVudF9pbnRlcmZhY2VfaW5pdChBdGtDb21wb25lbnRJZmFj
ZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPnJlZl9hY2Nlc3NpYmxlX2F0X3BvaW50ID0gd2Via2l0
X2FjY2Vzc2libGVfY29tcG9uZW50X3JlZl9hY2Nlc3NpYmxlX2F0X3BvaW50OwotICAgIGlmYWNl
LT5nZXRfZXh0ZW50cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9nZXRfZXh0ZW50czsK
LSAgICBpZmFjZS0+Z3JhYl9mb2N1cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFi
X2ZvY3VzOwotfQotCiAvLyBJbWFnZQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9p
bWFnZV9nZXRfaW1hZ2VfcG9zaXRpb24oQXRrSW1hZ2UqIGltYWdlLCBnaW50KiB4LCBnaW50KiB5
LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQpAQCAtMjQ0MSw3ICsyMzY1LDcgQEAgc3RhdGljIGNv
bnN0IEdJbnRlcmZhY2VJbmZvIEF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW10gPSB7CiAgICAg
IChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKICAgICB7KEdJbnRlcmZhY2VJbml0RnVu
YylhdGtfdGV4dF9pbnRlcmZhY2VfaW5pdCwKICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMp
IDAsIDB9LAotICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a19jb21wb25lbnRfaW50ZXJmYWNl
X2luaXQsCisgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVu
dEludGVyZmFjZUluaXQsCiAgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKICAg
ICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfaW1hZ2VfaW50ZXJmYWNlX2luaXQsCiAgICAgIChH
SW50ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123481</attachid>
            <date>2012-01-22 09:56:24 -0800</date>
            <delta_ts>2012-01-22 10:14:49 -0800</delta_ts>
            <desc>4. Move function returnString() to a new utility file</desc>
            <filename>bug-76783-20120122185622.patch</filename>
            <type>text/plain</type>
            <size>8252</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRlYTJhMjU2N2EwOWRh
MTZlZGRhNjMwYmJlODA4OWQ2YzE4MjEwOS4uNjYwODA2NzlkNGE1MWM4NTI3ZTAxY2Q5ZDUyZGI1
OTgzMGM3YjQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMwIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTW92ZSBjb21tb24gZnVuY3Rpb24gcmV0
dXJuU3RyaW5nKCkgZnJvbSB0aGUgd3JhcHBlciBhbmQKKyAgICAgICAgaHlwZXJsaW5rIGltcGxl
bWVudGF0aW9ucyB0byBhIG5ldyB1dGlsaXR5IGZpbGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHA6IEFkZGVkLgorICAgICAgICAocmV0dXJu
U3RyaW5nKTogVGFrZW4gZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgYW5kCisg
ICAgICAgIFdlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaDogQWRkZWQuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcDogUmVtb3ZlIGxvY2Fs
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHJldHVyblN0cmluZy4KKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6IERpdHRvLgorCisg
ICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gYnVpbGQgZmlsZXMuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOiBBZGQgV2ViS2l0QWNjZXNzaWJsZVV0aWwuW2h8Y3BwXS4KKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6IERpdHRvLgorCisyMDEyLTAxLTIyICBNYXJpbyBTYW5jaGV6IFByYWRh
ICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZWZhY3RvciBHVEsncyBh
Y2Nlc3NpYmlsaXRpdHkgY29kZSB0byBiZSBtb3JlIG1vZHVsYXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgRml4IHR5cG8gaW4gY2xhc3Mgc3RydWN0IChw
YXJlbnQgY2xhc3MgZmllbGQgaGFkIHRoZSB3cm9uZyB0eXBlKSwKICAgICAgICAgZml4IGNvZGlu
ZyBzdHlsZSBpc3N1ZXMgYW5kIHVwZGF0ZSBkYXRlIGluIGhlYWRlcnMuCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCmluZGV4IDQzMjFiOTMxNWVlZjBjYjVhZmYxM2Y0OGRkYzA2OTFlZjE3
YWZkMWEuLmVjN2JlMjUxZjNlYTUyNTQ5ZDBkOTczMjMxYTgzMGQ3MzUzMGQ4ODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDQyNCw2ICs0NDI0LDggQEAgd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENh
Y2hlQXRrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUh5cGVybGluay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJHdGsuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCBmNTMzNTJmNGZjMDE4YWFlN2IyNDQyOTRmODJjMjlhOWNlM2M5
OTVmLi5iZmI1YzYxMWM1ZjdlNTFmY2UxZTZlZmY1MzEwMmJkODFkZmFiNTYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0xNzY4LDYgKzE3NjgsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkv
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcCcsCiAgICAgICAgICAgICAnYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oJywKKyAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAnLAorICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcsCiAg
ICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsu
aCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbScs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCmluZGV4IDQwM2Q5ZDRiN2ZjYjRjN2NhMjFmMDQw
YzM4M2IzYmI3ZDZkZjUyODUuLjJlNGMxOTM2NGYzMWY4MjY4MjNiOGZkNmQ0OWU2NmY0NTI4MTFm
MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVIeXBlcmxpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgi
CiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKICNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgogCkBAIC01MiwxNCArNTMsNiBAQCBlbnVtIHsKIAogc3RhdGljIGdwb2ludGVy
IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtQYXJlbnRDbGFzcyA9IDA7CiAKLS8vIFVzZWQgdG8g
cHJvdmlkZSBjb25zdCBjaGFyKiByZXR1cm5zLgotc3RhdGljIGNvbnN0IGNoYXIqIHJldHVyblN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cikKLXsKLSAgICBzdGF0aWMgQ1N0cmluZyByZXR1cm5lZFN0
cmluZzsKLSAgICByZXR1cm5lZFN0cmluZyA9IHN0ci51dGY4KCk7Ci0gICAgcmV0dXJuIHJldHVy
bmVkU3RyaW5nLmRhdGEoKTsKLX0KLQogc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUo
V2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSkKIHsKICAgICBpZiAoIWFjY2Vzc2libGUgfHwg
IVdFQktJVF9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY3MTgzYWU4ZTIyZGRiNGRlY2UzMThiNDdiZmI0MzVjY2JkZGMyZDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
dWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20g
TW96aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwg
Q29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBv
ZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9y
dGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykg
MjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworLy8gVXNlZCB0byBwcm92aWRlIGNvbnN0IGNoYXIqIHJldHVybnMuCitjb25zdCBj
aGFyKiByZXR1cm5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGljIENTdHJp
bmcgcmV0dXJuZWRTdHJpbmc7CisgICAgcmV0dXJuZWRTdHJpbmcgPSBzdHIudXRmOCgpOworICAg
IHJldHVybiByZXR1cm5lZFN0cmluZy5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNjkxNzlmOTlkM2NiN2ExMGM0ODkxMTc5ZmI0OWRmNzIyNDI4ZjI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0
aWwuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBM
dGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QWNjZXNzaWJsZVV0aWxf
aAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlVXRpbF9oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworLy8gUmV0dXJucyBhIGNvbnN0IGNoYXIqIHBvaW50aW5nIHRvIGEgc3Rh
dGljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLgorY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworCisjZW5kaWYgLy8gV2ViS2l0QWNjZXNzaWJsZVV0aWxfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBw
ZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNz
aWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDhjMmI1ZjI4NGI1NmRiY2UzMDM2YWMzMjZhZWM3NGM3
MmYzMjkyNGYuLmQxZDJkNDQ1NjIyZWQzOTZmMGIzYjkxNmVkYTQ2ZWM3OTk3MzZjMjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJU
ZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJL
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwu
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIK
IApAQCAtOTIsMTQgKzkzLDYgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZhbGxiYWNr
T2JqZWN0KCkKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi0vLyBVc2VkIHRvIHByb3ZpZGUgY29u
c3QgY2hhciogcmV0dXJucy4KLXN0YXRpYyBjb25zdCBjaGFyKiByZXR1cm5TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHIpCi17Ci0gICAgc3RhdGljIENTdHJpbmcgcmV0dXJuZWRTdHJpbmc7Ci0gICAg
cmV0dXJuZWRTdHJpbmcgPSBzdHIudXRmOCgpOwotICAgIHJldHVybiByZXR1cm5lZFN0cmluZy5k
YXRhKCk7Ci19Ci0KIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKFdlYktpdEFjY2Vz
c2libGUqIGFjY2Vzc2libGUpCiB7CiAgICAgaWYgKCFhY2Nlc3NpYmxlKQo=
</data>
<flag name="review"
          id="124553"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123482</attachid>
            <date>2012-01-22 10:07:06 -0800</date>
            <delta_ts>2012-01-22 10:15:25 -0800</delta_ts>
            <desc>6. New files for the implementation of the AtkComponent interface</desc>
            <filename>0001-2012-01-22-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>16943</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAxODE3MDcxZjg3ZTY0N2M3NDAxMWVmOTdkMTI4Y2VjYTMyNGQ0ZDM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBTdW4sIDIyIEphbiAyMDEyIDE5OjAyOjExICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJl
IG1vcmUgbW9kdWxhcgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Njc4MwoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
TmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0NvbXBvbmVudCBpbnRl
cmZhY2UsCiAgICAgICAgY29udGFpbmluZyB0aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuY3BwCgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHA6IEFkZGVkLgogICAgICAgIChjb3JlKToK
ICAgICAgICAoYXRrVG9Db250ZW50cyk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVDb21wb25l
bnRJbnRlcmZhY2VJbml0KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJlZkFj
Y2Vzc2libGVBdFBvaW50KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdldEV4
dGVudHMpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R3JhYkZvY3VzKToKICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25l
bnQuaDogQWRkZWQuCgogICAgICAgIE1vdmUgY29tbW9uIGZ1bmN0aW9uIGNvbnRlbnRzVG9BdGso
KSBvdXQgZnJvbSB0aGUgd3JhcHBlciB0byB0aGUKICAgICAgICB1dGlsaXR5IGZpbGUsIHVzZWQg
ZnJvbSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcC4KCiAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHA6CiAgICAgICAgKGNvbnRl
bnRzVG9BdGspOiBUYWtlbiBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4KICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmg6CiAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6IFJlbW92
ZSBsb2NhbAogICAgICAgIGltcGxlbWVudGF0aW9uIG9mIGNvbnRlbnRzVG9BdGsuCgogICAgICAg
IEFkZCBuZXcgZmlsZXMgdG8gYnVpbGQgZmlsZXMuCgogICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbTogQWRkIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuW2h8Y3BwXS4KICAg
ICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM0ICsrKysrKysKIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogLi4uL2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcCAgICAgfCAgIDk1ICsrKysr
KysrKysrKysrKysrKysrCiAuLi5VdGlsLmggPT4gV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNv
bXBvbmVudC5ofSB8ICAgMTYgKystLQogLi4uL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCAgICAgfCAgIDMxICsrKysrKysKIC4uLi9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlVXRpbC5oICAgICAgIHwgICAgOSArKwogLi4uL2d0ay9XZWJLaXRBY2Nl
c3NpYmxlV3JhcHBlckF0ay5jcHAgICAgICAgICAgICAgfCAgIDgxICstLS0tLS0tLS0tLS0tLS0t
CiA4IGZpbGVzIGNoYW5nZWQsIDE4NCBpbnNlcnRpb25zKCspLCA4NiBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcAogY29weSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay97V2ViS2l0QWNjZXNzaWJsZVV0aWwuaCA9PiBXZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlQ29tcG9uZW50Lmh9ICg2MSUpCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGMwODAyNDEuLmE5NjVh
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTUsNiArNSw0MCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBBdGtDb21wb25lbnQgaW50ZXJmYWNlLAorICAgICAgICBjb250YWluaW5nIHRoZSBy
ZWxhdGVkIGNvZGUgZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50
LmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKGF0a1RvQ29udGVudHMpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEludGVyZmFjZUluaXQpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJlZkFjY2Vzc2libGVBdFBvaW50KToKKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHZXRFeHRlbnRzKToKKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVDb21wb25lbnRHcmFiRm9jdXMpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuaDogQWRkZWQuCisKKyAgICAg
ICAgTW92ZSBjb21tb24gZnVuY3Rpb24gY29udGVudHNUb0F0aygpIG91dCBmcm9tIHRoZSB3cmFw
cGVyIHRvIHRoZQorICAgICAgICB1dGlsaXR5IGZpbGUsIHVzZWQgZnJvbSBXZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcDoKKyAgICAgICAgKGNvbnRlbnRzVG9BdGspOiBUYWtl
biBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4KKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDogUmVtb3ZlIGxvY2FsCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIG9mIGNvbnRlbnRzVG9BdGssIGFzIHdlbGwgYXMgYWxsIHRoZSBj
b2RlIHJlbGF0ZWQKKyAgICAgICAgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtDb21w
b25lbnQgaW50ZXJmYWNlLgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gYnVpbGQgZmlsZXMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZUNvbXBvbmVudC5baHxjcHBdLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8u
CisKKzIwMTItMDEtMjIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRv
IGJlIG1vcmUgbW9kdWxhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY3ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
ICAgICAgICBOZXcgZmlsZXMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrQWN0aW9u
IGludGVyZmFjZSwKICAgICAgICAgY29udGFpbmluZyB0aGUgcmVsYXRlZCBjb2RlIGZyb20gV2Vi
S2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCAwMWYzYTgxLi45OTdlNjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
QEAgLTQ0MjYsNiArNDQyNiw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VBY3Rpb24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9u
ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVVdGlsLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlMjFmYmI0Li4x
YjA5NmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNzcwLDYgKzE3NzAsOCBAQAogICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaCcsCiAgICAg
ICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlv
bi5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VBY3Rpb24uaCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHAnLAorICAgICAgICAgICAgJ2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuaCcsCiAgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwJywKICAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oJywKICAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI1ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNv
bXBvbmVudC5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
dWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxs
YSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUg
T3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgor
ICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5o
IgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlVXRp
bC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgiCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtD
b21wb25lbnQqIGNvbXBvbmVudCkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKGNv
bXBvbmVudCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2li
bGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKGNvbXBvbmVudCkpOwor
fQorCitzdGF0aWMgSW50UG9pbnQgYXRrVG9Db250ZW50cyhBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlLCBnaW50IHgsIGdpbnQgeSkKK3sKKyAg
ICBJbnRQb2ludCBwb3MoeCwgeSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVP
YmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisgICAgaWYgKGZyYW1lVmlldykgeworICAgICAg
ICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgICAgICBjYXNlIEFUS19YWV9TQ1JFRU46CisgICAg
ICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvcyk7CisgICAgICAg
IGNhc2UgQVRLX1hZX1dJTkRPVzoKKyAgICAgICAgICAgIHJldHVybiBmcmFtZVZpZXctPndpbmRv
d1RvQ29udGVudHMocG9zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwb3M7Cit9
CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEludGVyZmFjZUluaXQoQXRrQ29tcG9u
ZW50SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5yZWZfYWNjZXNzaWJsZV9hdF9wb2ludCA9
IHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRSZWZBY2Nlc3NpYmxlQXRQb2ludDsKKyAgICBpZmFj
ZS0+Z2V0X2V4dGVudHMgPSB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R2V0RXh0ZW50czsKKyAg
ICBpZmFjZS0+Z3JhYl9mb2N1cyA9IHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHcmFiRm9jdXM7
Cit9CisKK0F0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJlZkFjY2Vzc2libGVB
dFBvaW50KEF0a0NvbXBvbmVudCogY29tcG9uZW50LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRU
eXBlIGNvb3JkVHlwZSkKK3sKKyAgICBJbnRQb2ludCBwb3MgPSBhdGtUb0NvbnRlbnRzKGNvcmUo
Y29tcG9uZW50KSwgY29vcmRUeXBlLCB4LCB5KTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHRhcmdldCA9IGNvcmUoY29tcG9uZW50KS0+YWNjZXNzaWJpbGl0eUhpdFRlc3QocG9zKTsKKyAg
ICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZ19vYmplY3RfcmVmKHRhcmdl
dC0+d3JhcHBlcigpKTsKKyAgICByZXR1cm4gdGFyZ2V0LT53cmFwcGVyKCk7Cit9CisKK3ZvaWQg
d2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdldEV4dGVudHMoQXRrQ29tcG9uZW50KiBjb21wb25l
bnQsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3Jk
VHlwZSBjb29yZFR5cGUpCit7CisgICAgSW50UmVjdCByZWN0ID0gY29yZShjb21wb25lbnQpLT5l
bGVtZW50UmVjdCgpOworICAgIGNvbnRlbnRzVG9BdGsoY29yZShjb21wb25lbnQpLCBjb29yZFR5
cGUsIHJlY3QsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCitnYm9vbGVhbiB3ZWJraXRBY2Nl
c3NpYmxlQ29tcG9uZW50R3JhYkZvY3VzKEF0a0NvbXBvbmVudCogY29tcG9uZW50KQoreworICAg
IGNvcmUoY29tcG9uZW50KS0+c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICByZXR1cm4gY29yZShjb21w
b25lbnQpLT5pc0ZvY3VzZWQoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmgKc2ltaWxh
cml0eSBpbmRleCA2MSUKY29weSBmcm9tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmgKY29weSB0byBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmgKaW5kZXggYjY5MTc5
Zi4uYTc5NWUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZVV0aWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmgKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSmFuIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEyIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgSWdhbGlhIFMuTC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMTksMTIgKzE5LDE0IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdEFjY2Vzc2libGVVdGlsX2gKLSNkZWZpbmUgV2Vi
S2l0QWNjZXNzaWJsZVV0aWxfaAorI2lmbmRlZiBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29t
cG9uZW50X2gKKyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudF9oCiAK
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDxhdGsvYXRrLmg+CiAK
LS8vIFJldHVybnMgYSBjb25zdCBjaGFyKiBwb2ludGluZyB0byBhIHN0YXRpY2FsbHkgYWxsb2Nh
dGVkIHN0cmluZy4KLWNvbnN0IGNoYXIqIHJldHVyblN0cmluZyhjb25zdCBTdHJpbmcmKTsKK3Zv
aWQgd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEludGVyZmFjZUluaXQoQXRrQ29tcG9uZW50SWZh
Y2UqKTsKK0F0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJlZkFjY2Vzc2libGVB
dFBvaW50KEF0a0NvbXBvbmVudCosIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29yZFR5cGUpOwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R2V0RXh0ZW50cyhBdGtDb21wb25lbnQqLCBnaW50
KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUpOwor
Z2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyhBdGtDb21wb25lbnQq
KTsKIAotI2VuZGlmIC8vIFdlYktpdEFjY2Vzc2libGVVdGlsX2gKKyNlbmRpZiAvLyBXZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA2NzE4
M2FlLi40YWRiNDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0zMSw5ICszMSw0MCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAKKyNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKwordm9pZCBjb250ZW50c1RvQXRrKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qs
IEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUsIEludFJlY3QgcmVjdCwgZ2ludCogeCwgZ2ludCogeSwg
Z2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IGNvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCk7CisKKyAgICBpZiAoZnJhbWVWaWV3KSB7
CisgICAgICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7CisgICAgICAgIGNhc2UgQVRLX1hZX1dJTkRP
VzoKKyAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAg
ICAgICAgcmVjdCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihyZWN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHgpCisgICAgICAgICp4ID0g
cmVjdC54KCk7CisgICAgaWYgKHkpCisgICAgICAgICp5ID0gcmVjdC55KCk7CisgICAgaWYgKHdp
ZHRoKQorICAgICAgICAqd2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgaWYgKGhlaWdodCkKKyAg
ICAgICAgKmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Cit9CisKIC8vIFVzZWQgdG8gcHJvdmlkZSBj
b25zdCBjaGFyKiByZXR1cm5zLgogY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmgKaW5kZXggYjY5MTc5Zi4uYmJiNTNjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5oCkBAIC0yMiw4ICsyMiwxNyBAQAogI2lmbmRlZiBXZWJLaXRBY2Nlc3NpYmxlVXRpbF9o
CiAjZGVmaW5lIFdlYktpdEFjY2Vzc2libGVVdGlsX2gKIAorI2luY2x1ZGUgPGF0ay9hdGsuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgQWNjZXNzaWJpbGl0eU9iamVjdDsKK2NsYXNzIEludFJlY3Q7Cit9CisKKy8vIFJldHVy
bnMgY29udGVudCdzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB3aW5kb3cgb3IgdGhlIHNj
cmVlbi4KK3ZvaWQgY29udGVudHNUb0F0ayhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Kiwg
QXRrQ29vcmRUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3
aWR0aCA9IDAsIGdpbnQqIGhlaWdodCA9IDApOworCiAvLyBSZXR1cm5zIGEgY29uc3QgY2hhciog
cG9pbnRpbmcgdG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcuCiBjb25zdCBjaGFyKiBy
ZXR1cm5TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNw
cAppbmRleCBmOTIwMDc5Li5jZjJjMzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3Bw
CkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
V2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VBY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29t
cG9uZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKICNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTEyNSwxMSArMTI2
LDYgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRWRpdGFibGVUZXh0KiB0
ZXh0KQogICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwogfQogCi1zdGF0aWMgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtDb21wb25lbnQqIGNvbXBvbmVudCkKLXsKLSAgICBy
ZXR1cm4gY29yZShBVEtfT0JKRUNUKGNvbXBvbmVudCkpOwotfQotCiBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZShBdGtJbWFnZSogaW1hZ2UpCiB7CiAgICAgcmV0dXJuIGNvcmUoQVRL
X09CSkVDVChpbWFnZSkpOwpAQCAtMTkzNCw3OCArMTkzMCw2IEBAIHN0YXRpYyB2b2lkIGF0a19l
ZGl0YWJsZV90ZXh0X2ludGVyZmFjZV9pbml0KEF0a0VkaXRhYmxlVGV4dElmYWNlKiBpZmFjZSkK
ICAgICBpZmFjZS0+cGFzdGVfdGV4dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRf
cGFzdGVfdGV4dDsKIH0KIAotc3RhdGljIHZvaWQgY29udGVudHNUb0F0ayhBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlLCBJbnRSZWN0IHJlY3Qs
IGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoID0gMCwgZ2ludCogaGVpZ2h0ID0gMCkKLXsK
LSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3
KCk7Ci0KLSAgICBpZiAoZnJhbWVWaWV3KSB7Ci0gICAgICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7
Ci0gICAgICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKLSAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBVEtfWFlfU0NSRUVOOgotICAgICAgICAgICAgcmVjdCA9IGZyYW1lVmlldy0+Y29udGVu
dHNUb1NjcmVlbihyZWN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHgpCi0gICAgICAgICp4ID0gcmVjdC54KCk7Ci0gICAgaWYgKHkpCi0gICAgICAg
ICp5ID0gcmVjdC55KCk7Ci0gICAgaWYgKHdpZHRoKQotICAgICAgICAqd2lkdGggPSByZWN0Lndp
ZHRoKCk7Ci0gICAgaWYgKGhlaWdodCkKLSAgICAgICAgKmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7
Ci19Ci0KLXN0YXRpYyBJbnRQb2ludCBhdGtUb0NvbnRlbnRzKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUsIGdpbnQgeCwgZ2ludCB5KQotewot
ICAgIEludFBvaW50IHBvcyh4LCB5KTsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY29y
ZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKLSAgICBpZiAoZnJhbWVWaWV3KSB7Ci0gICAg
ICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7Ci0gICAgICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKLSAg
ICAgICAgICAgIHJldHVybiBmcmFtZVZpZXctPnNjcmVlblRvQ29udGVudHMocG9zKTsKLSAgICAg
ICAgY2FzZSBBVEtfWFlfV0lORE9XOgotICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+d2lu
ZG93VG9Db250ZW50cyhwb3MpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBvczsK
LX0KLQotc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X3JlZl9h
Y2Nlc3NpYmxlX2F0X3BvaW50KEF0a0NvbXBvbmVudCogY29tcG9uZW50LCBnaW50IHgsIGdpbnQg
eSwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKLXsKLSAgICBJbnRQb2ludCBwb3MgPSBhdGtUb0Nv
bnRlbnRzKGNvcmUoY29tcG9uZW50KSwgY29vcmRUeXBlLCB4LCB5KTsKLSAgICAKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiB0YXJnZXQgPSBjb3JlKGNvbXBvbmVudCktPmFjY2Vzc2liaWxpdHlI
aXRUZXN0KHBvcyk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGdf
b2JqZWN0X3JlZih0YXJnZXQtPndyYXBwZXIoKSk7Ci0gICAgcmV0dXJuIHRhcmdldC0+d3JhcHBl
cigpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfZ2V0X2V4
dGVudHMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdp
ZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUpCi17Ci0gICAgSW50UmVj
dCByZWN0ID0gY29yZShjb21wb25lbnQpLT5lbGVtZW50UmVjdCgpOwotICAgIGNvbnRlbnRzVG9B
dGsoY29yZShjb21wb25lbnQpLCBjb29yZFR5cGUsIHJlY3QsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dyYWJf
Zm9jdXMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCi17Ci0gICAgY29yZShjb21wb25lbnQpLT5z
ZXRGb2N1c2VkKHRydWUpOwotICAgIHJldHVybiBjb3JlKGNvbXBvbmVudCktPmlzRm9jdXNlZCgp
OwotfQotCi1zdGF0aWMgdm9pZCBhdGtfY29tcG9uZW50X2ludGVyZmFjZV9pbml0KEF0a0NvbXBv
bmVudElmYWNlKiBpZmFjZSkKLXsKLSAgICBpZmFjZS0+cmVmX2FjY2Vzc2libGVfYXRfcG9pbnQg
PSB3ZWJraXRfYWNjZXNzaWJsZV9jb21wb25lbnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQ7Ci0g
ICAgaWZhY2UtPmdldF9leHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dldF9l
eHRlbnRzOwotICAgIGlmYWNlLT5ncmFiX2ZvY3VzID0gd2Via2l0X2FjY2Vzc2libGVfY29tcG9u
ZW50X2dyYWJfZm9jdXM7Ci19Ci0KIC8vIEltYWdlCiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nl
c3NpYmxlX2ltYWdlX2dldF9pbWFnZV9wb3NpdGlvbihBdGtJbWFnZSogaW1hZ2UsIGdpbnQqIHgs
IGdpbnQqIHksIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUpCkBAIC0yNDQwLDggKzIzNjQsNyBAQCBz
dGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gQXRrSW50ZXJmYWNlc0luaXRGdW5jdGlvbnNbXSA9
IHsKICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAogICAgIHsoR0ludGVyZmFj
ZUluaXRGdW5jKWF0a190ZXh0X2ludGVyZmFjZV9pbml0LAogICAgICAoR0ludGVyZmFjZUZpbmFs
aXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX2NvbXBvbmVudF9p
bnRlcmZhY2VfaW5pdCwKLSAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAg
IHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZUNv
bXBvbmVudEludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylh
dGtfaW1hZ2VfaW50ZXJmYWNlX2luaXQsCiAgICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAw
LCAwfSwKICAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfdGFibGVfaW50ZXJmYWNlX2luaXQs
Ci0tIAoxLjcuNy41Cgo=
</data>
<flag name="review"
          id="124556"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123483</attachid>
            <date>2012-01-22 10:11:45 -0800</date>
            <delta_ts>2012-01-23 10:04:34 -0800</delta_ts>
            <desc>6. New files for the implementation of the AtkComponent interface</desc>
            <filename>bug-76783-20120122191143.patch</filename>
            <type>text/plain</type>
            <size>15308</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzA4MDI0MTUwMjQ1MmY0
MjYzYzFkMmZjMTdiZDc3ZmJkY2MyN2UxNi4uYTk2NWEzODk4OGJlNWU3YWNmYjFhZjcxZjM5YmI2
MGYzMTA1OWU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDQwIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0NvbXBvbmVudCBpbnRlcmZhY2UsCisgICAgICAgIGNvbnRhaW5p
bmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VD
b21wb25lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoYXRrVG9Db250
ZW50cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50SW50ZXJmYWNlSW5pdCk6
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9pbnQp
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdldEV4dGVudHMpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oOiBBZGRlZC4K
KworICAgICAgICBNb3ZlIGNvbW1vbiBmdW5jdGlvbiBjb250ZW50c1RvQXRrKCkgb3V0IGZyb20g
dGhlIHdyYXBwZXIgdG8gdGhlCisgICAgICAgIHV0aWxpdHkgZmlsZSwgdXNlZCBmcm9tIFdlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuY3BwLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwOgorICAgICAgICAoY29udGVudHNUb0F0
ayk6IFRha2VuIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmg6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOiBSZW1vdmUgbG9j
YWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgY29udGVudHNUb0F0aywgYXMgd2VsbCBhcyBh
bGwgdGhlIGNvZGUgcmVsYXRlZAorICAgICAgICB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEF0a0NvbXBvbmVudCBpbnRlcmZhY2UuCisKKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBidWls
ZCBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LltofGNwcF0uCisgICAgICAgICogV2ViQ29yZS5neXBp
OiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5
IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCiAgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBB
dGtBY3Rpb24gaW50ZXJmYWNlLAogICAgICAgICBjb250YWluaW5nIHRoZSByZWxhdGVkIGNvZGUg
ZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAuCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDAxZjNhODE2ZjRlYmVhOGM4YTM4YTNhZDMzOGI1NTJiZjlkNTJiNTIu
Ljk5N2U2ODQxODYzNjdlMzM2NjFiY2JlYjJhZDhkNmQzMWU0ODY4N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtNDQyNiw2ICs0NDI2LDggQEAgd2ViY29yZWd0a19zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SHlwZXJsaW5rLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCBcCisJU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVu
dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VDb21wb25lbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGUyMWZiYjQ2ZjI0ZmRiODE2YjI0M2JiMTRiMmM3NjMyNDI0ZjAzOTYuLjFiMDk2Zjkw
MGFmZDFkNjJmYWNmZDIzNTdlNTM0MjgxZTAwZjVjZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE3
NzAsNiArMTc3MCw4IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUh5cGVybGluay5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5oJywKKyAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNw
cCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUNvbXBvbmVudC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VDb21wb25lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmMjVlMDYzMTMxZmQwZDZmY2JiNzc2YmM3YTli
ZDE2Yjk2OWViZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcApAQCAtMCwwICsx
LDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBm
b2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisg
KgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBT
dW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmgiCisKKyNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCisjaW5jbHVkZSAiV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0
YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0NvbXBvbmVudCogY29tcG9uZW50KQor
eworICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUoY29tcG9uZW50KSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmpl
Y3QoV0VCS0lUX0FDQ0VTU0lCTEUoY29tcG9uZW50KSk7Cit9CisKK3N0YXRpYyBJbnRQb2ludCBh
dGtUb0NvbnRlbnRzKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlw
ZSBjb29yZFR5cGUsIGdpbnQgeCwgZ2ludCB5KQoreworICAgIEludFBvaW50IHBvcyh4LCB5KTsK
KworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZp
ZXcoKTsKKyAgICBpZiAoZnJhbWVWaWV3KSB7CisgICAgICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7
CisgICAgICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKKyAgICAgICAgICAgIHJldHVybiBmcmFtZVZp
ZXctPnNjcmVlblRvQ29udGVudHMocG9zKTsKKyAgICAgICAgY2FzZSBBVEtfWFlfV0lORE9XOgor
ICAgICAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhwb3MpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBvczsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3Np
YmxlQ29tcG9uZW50SW50ZXJmYWNlSW5pdChBdGtDb21wb25lbnRJZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPnJlZl9hY2Nlc3NpYmxlX2F0X3BvaW50ID0gd2Via2l0QWNjZXNzaWJsZUNvbXBv
bmVudFJlZkFjY2Vzc2libGVBdFBvaW50OworICAgIGlmYWNlLT5nZXRfZXh0ZW50cyA9IHdlYmtp
dEFjY2Vzc2libGVDb21wb25lbnRHZXRFeHRlbnRzOworICAgIGlmYWNlLT5ncmFiX2ZvY3VzID0g
d2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1czsKK30KKworQXRrT2JqZWN0KiB3ZWJr
aXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9pbnQoQXRrQ29tcG9uZW50KiBj
b21wb25lbnQsIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQoreworICAg
IEludFBvaW50IHBvcyA9IGF0a1RvQ29udGVudHMoY29yZShjb21wb25lbnQpLCBjb29yZFR5cGUs
IHgsIHkpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFyZ2V0ID0gY29yZShjb21wb25l
bnQpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb3MpOworICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBnX29iamVjdF9yZWYodGFyZ2V0LT53cmFwcGVyKCkpOworICAgIHJl
dHVybiB0YXJnZXQtPndyYXBwZXIoKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9u
ZW50R2V0RXh0ZW50cyhBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCogeCwgZ2ludCogeSwg
Z2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKK3sKKyAg
ICBJbnRSZWN0IHJlY3QgPSBjb3JlKGNvbXBvbmVudCktPmVsZW1lbnRSZWN0KCk7CisgICAgY29u
dGVudHNUb0F0ayhjb3JlKGNvbXBvbmVudCksIGNvb3JkVHlwZSwgcmVjdCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHcmFiRm9j
dXMoQXRrQ29tcG9uZW50KiBjb21wb25lbnQpCit7CisgICAgY29yZShjb21wb25lbnQpLT5zZXRG
b2N1c2VkKHRydWUpOworICAgIHJldHVybiBjb3JlKGNvbXBvbmVudCktPmlzRm9jdXNlZCgpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3
OTVlMzBmNGVhZjI4MzM3NDdkN2JlNGRiNjU0YjI3NmMyYzQyZTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlQ29tcG9uZW50LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VDb21wb25lbnRfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29t
cG9uZW50X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxl
Q29tcG9uZW50SW50ZXJmYWNlSW5pdChBdGtDb21wb25lbnRJZmFjZSopOworQXRrT2JqZWN0KiB3
ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9pbnQoQXRrQ29tcG9uZW50
KiwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSk7Cit2b2lkIHdlYmtpdEFjY2Vzc2libGVD
b21wb25lbnRHZXRFeHRlbnRzKEF0a0NvbXBvbmVudCosIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQq
IHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSk7CitnYm9vbGVhbiB3ZWJraXRBY2Nl
c3NpYmxlQ29tcG9uZW50R3JhYkZvY3VzKEF0a0NvbXBvbmVudCopOworCisjZW5kaWYgLy8gV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXgg
NjcxODNhZThlMjJkZGI0ZGVjZTMxOGI0N2JmYjQzNWNjYmRkYzJkNi4uNGFkYjQ1ZWM2NzM2NWFj
MDU1MTU1OWVjMmNlMmZmMDQxMmYzOWNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMzEsOSAr
MzEsNDAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxl
VXRpbC5oIgogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKwogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgY29udGVudHNUb0F0ayhBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlLCBJbnRSZWN0IHJlY3QsIGdpbnQq
IHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQpCit7CisgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBjb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOworCisgICAgaWYg
KGZyYW1lVmlldykgeworICAgICAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgICAgICBjYXNl
IEFUS19YWV9XSU5ET1c6CisgICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1Rv
V2luZG93KHJlY3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVRLX1hZX1ND
UkVFTjoKKyAgICAgICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4ocmVj
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh4KQor
ICAgICAgICAqeCA9IHJlY3QueCgpOworICAgIGlmICh5KQorICAgICAgICAqeSA9IHJlY3QueSgp
OworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGlm
IChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSByZWN0LmhlaWdodCgpOworfQorCiAvLyBVc2Vk
IHRvIHByb3ZpZGUgY29uc3QgY2hhciogcmV0dXJucy4KIGNvbnN0IGNoYXIqIHJldHVyblN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oCmluZGV4IGI2OTE3OWY5OWQzY2I3
YTEwYzQ4OTExNzlmYjQ5ZGY3MjI0MjhmMjYuLmJiYjUzYzhjMjVhYjNiNTI1ZjUyMWRjNGFhMWY3
MjY1MTEzNTg3MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaApAQCAtMjIsOCArMjIsMTcgQEAKICNpZm5kZWYg
V2ViS2l0QWNjZXNzaWJsZVV0aWxfaAogI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlVXRpbF9oCiAK
KyNpbmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CitjbGFzcyBJ
bnRSZWN0OworfQorCisvLyBSZXR1cm5zIGNvbnRlbnQncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0
byB0aGUgd2luZG93IG9yIHRoZSBzY3JlZW4uCit2b2lkIGNvbnRlbnRzVG9BdGsoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdCosIEF0a0Nvb3JkVHlwZSwgV2ViQ29yZTo6SW50UmVjdCwgZ2lu
dCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGggPSAwLCBnaW50KiBoZWlnaHQgPSAwKTsKKwogLy8g
UmV0dXJucyBhIGNvbnN0IGNoYXIqIHBvaW50aW5nIHRvIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQg
c3RyaW5nLgogY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
V3JhcHBlckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKaW5kZXggZjkyMDA3OTU5ZGI3OTljZWMzYjZiNGI2MTkw
OGU4NjIwZjVmOTg2Mi4uY2YyYzM2ZGVhN2IxNGQxMzIwMzA2MzFiYmRjNmI1OTJiODk3MTc2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNz
aWJsZVdyYXBwZXJBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsu
aCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmgiCisjaW5jbHVk
ZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oIgogI2luY2x1ZGUgIldlYktp
dEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2
aXNpYmxlX3VuaXRzLmgiCkBAIC0xMjUsMTEgKzEyNiw2IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlKEF0a0VkaXRhYmxlVGV4dCogdGV4dCkKICAgICByZXR1cm4gY29yZShBVEtf
T0JKRUNUKHRleHQpKTsKIH0KIAotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRr
Q29tcG9uZW50KiBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVChjb21w
b25lbnQpKTsKLX0KLQogc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrSW1hZ2Uq
IGltYWdlKQogewogICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QoaW1hZ2UpKTsKQEAgLTE5MzQs
NzggKzE5MzAsNiBAQCBzdGF0aWMgdm9pZCBhdGtfZWRpdGFibGVfdGV4dF9pbnRlcmZhY2VfaW5p
dChBdGtFZGl0YWJsZVRleHRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2UtPnBhc3RlX3RleHQgPSB3
ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3Bhc3RlX3RleHQ7CiB9CiAKLXN0YXRpYyB2
b2lkIGNvbnRlbnRzVG9BdGsoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrQ29v
cmRUeXBlIGNvb3JkVHlwZSwgSW50UmVjdCByZWN0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3
aWR0aCA9IDAsIGdpbnQqIGhlaWdodCA9IDApCi17Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBjb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwotCi0gICAgaWYgKGZyYW1lVmlldykg
ewotICAgICAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgewotICAgICAgICBjYXNlIEFUS19YWV9XSU5E
T1c6Ci0gICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHJlY3Qp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKLSAgICAg
ICAgICAgIHJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4ocmVjdCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh4KQotICAgICAgICAqeCA9
IHJlY3QueCgpOwotICAgIGlmICh5KQotICAgICAgICAqeSA9IHJlY3QueSgpOwotICAgIGlmICh3
aWR0aCkKLSAgICAgICAgKndpZHRoID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChoZWlnaHQpCi0g
ICAgICAgICpoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotfQotCi1zdGF0aWMgSW50UG9pbnQgYXRr
VG9Db250ZW50cyhBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBBdGtDb29yZFR5cGUg
Y29vcmRUeXBlLCBnaW50IHgsIGdpbnQgeSkKLXsKLSAgICBJbnRQb2ludCBwb3MoeCwgeSk7Ci0K
LSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGNvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3
KCk7Ci0gICAgaWYgKGZyYW1lVmlldykgewotICAgICAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgewot
ICAgICAgICBjYXNlIEFUS19YWV9TQ1JFRU46Ci0gICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3
LT5zY3JlZW5Ub0NvbnRlbnRzKHBvcyk7Ci0gICAgICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKLSAg
ICAgICAgICAgIHJldHVybiBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMocG9zKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBwb3M7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdl
YmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludChBdGtDb21w
b25lbnQqIGNvbXBvbmVudCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUp
Ci17Ci0gICAgSW50UG9pbnQgcG9zID0gYXRrVG9Db250ZW50cyhjb3JlKGNvbXBvbmVudCksIGNv
b3JkVHlwZSwgeCwgeSk7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogdGFyZ2V0ID0g
Y29yZShjb21wb25lbnQpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChwb3MpOwotICAgIGlmICghdGFy
Z2V0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBnX29iamVjdF9yZWYodGFyZ2V0LT53cmFwcGVy
KCkpOwotICAgIHJldHVybiB0YXJnZXQtPndyYXBwZXIoKTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
a2l0X2FjY2Vzc2libGVfY29tcG9uZW50X2dldF9leHRlbnRzKEF0a0NvbXBvbmVudCogY29tcG9u
ZW50LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29y
ZFR5cGUgY29vcmRUeXBlKQotewotICAgIEludFJlY3QgcmVjdCA9IGNvcmUoY29tcG9uZW50KS0+
ZWxlbWVudFJlY3QoKTsKLSAgICBjb250ZW50c1RvQXRrKGNvcmUoY29tcG9uZW50KSwgY29vcmRU
eXBlLCByZWN0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdl
YmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFiX2ZvY3VzKEF0a0NvbXBvbmVudCogY29tcG9u
ZW50KQotewotICAgIGNvcmUoY29tcG9uZW50KS0+c2V0Rm9jdXNlZCh0cnVlKTsKLSAgICByZXR1
cm4gY29yZShjb21wb25lbnQpLT5pc0ZvY3VzZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgYXRrX2Nv
bXBvbmVudF9pbnRlcmZhY2VfaW5pdChBdGtDb21wb25lbnRJZmFjZSogaWZhY2UpCi17Ci0gICAg
aWZhY2UtPnJlZl9hY2Nlc3NpYmxlX2F0X3BvaW50ID0gd2Via2l0X2FjY2Vzc2libGVfY29tcG9u
ZW50X3JlZl9hY2Nlc3NpYmxlX2F0X3BvaW50OwotICAgIGlmYWNlLT5nZXRfZXh0ZW50cyA9IHdl
YmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9nZXRfZXh0ZW50czsKLSAgICBpZmFjZS0+Z3JhYl9m
b2N1cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX2NvbXBvbmVudF9ncmFiX2ZvY3VzOwotfQotCiAvLyBJ
bWFnZQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2VfcG9z
aXRpb24oQXRrSW1hZ2UqIGltYWdlLCBnaW50KiB4LCBnaW50KiB5LCBBdGtDb29yZFR5cGUgY29v
cmRUeXBlKQpAQCAtMjQ0MCw4ICsyMzY0LDcgQEAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZv
IEF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW10gPSB7CiAgICAgIChHSW50ZXJmYWNlRmluYWxp
emVGdW5jKSAwLCAwfSwKICAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtfdGV4dF9pbnRlcmZh
Y2VfaW5pdCwKICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAotICAgIHsoR0lu
dGVyZmFjZUluaXRGdW5jKWF0a19jb21wb25lbnRfaW50ZXJmYWNlX2luaXQsCi0gICAgIChHSW50
ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfSwKKyAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJm
YWNlSW5pdEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0KSwgMCwg
MH0sCiAgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX2ltYWdlX2ludGVyZmFjZV9pbml0LAog
ICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCiAgICAgeyhHSW50ZXJmYWNlSW5p
dEZ1bmMpYXRrX3RhYmxlX2ludGVyZmFjZV9pbml0LAo=
</data>
<flag name="review"
          id="124555"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123484</attachid>
            <date>2012-01-22 10:18:40 -0800</date>
            <delta_ts>2012-01-23 10:06:00 -0800</delta_ts>
            <desc>7. New files for the implementation of the AtkDocument interface</desc>
            <filename>bug-76783-20120122191838.patch</filename>
            <type>text/plain</type>
            <size>15371</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk2NWEzODk4OGJlNWU3
YWNmYjFhZjcxZjM5YmI2MGYzMTA1OWU5MC4uMzAxMTgwNWUwYWMxMWY2YzExNDAwYTY0ZGE2ODEz
ZDEyNjdmZjdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDQwIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0RvY3VtZW50IGludGVyZmFjZSwKKyAgICAgICAgY29udGFpbmlu
ZyB0aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURv
Y3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKGRvY3VtZW50QXR0
cmlidXRlVmFsdWUpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJmYWNl
SW5pdCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVWYWx1
ZSk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldExvY2FsZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50Lmg6IEFkZGVk
LgorCisgICAgICAgIE1vdmUgY29tbW9uIGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZVRvU2V0KCkgb3V0
IGZyb20gdGhlIHdyYXBwZXIgdG8KKyAgICAgICAgdGhlIHV0aWxpdHkgZmlsZSwgdXNlZCBmcm9t
IFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHA6CisgICAgICAgIChhZGRBdHRy
aWJ1dGVUb1NldCk6IFRha2VuIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOiBS
ZW1vdmUgbG9jYWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgYWRkQXR0cmlidXRlVG9TZXQs
IGFzIHdlbGwgYXMgYWxsIHRoZSBjb2RlIHJlbGF0ZWQKKyAgICAgICAgdG8gdGhlIGltcGxlbWVu
dGF0aW9uIG9mIHRoZSBBdGtEb2N1bWVudCBpbnRlcmZhY2UuCisKKyAgICAgICAgQWRkIG5ldyBm
aWxlcyB0byBidWlsZCBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFk
ZCBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuW2h8Y3BwXS4KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IERpdHRvLgorCisyMDEyLTAxLTIyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8
bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZWZhY3RvciBHVEsncyBhY2Nl
c3NpYmlsaXRpdHkgY29kZSB0byBiZSBtb3JlIG1vZHVsYXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKICAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEF0a0NvbXBvbmVudCBpbnRlcmZhY2UsCiAgICAgICAgIGNvbnRhaW5pbmcgdGhl
IHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOTk3ZTY4NDE4NjM2N2UzMzY2MWJjYmViMmFk
OGQ2ZDMxZTQ4Njg3Zi4uMjYyMzExNWMxNzYwNDYyMWFkZjEwMjE0NzU4NmM5NDI1Zjk3YjAwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NDI4LDYgKzQ0MjgsOCBAQCB3ZWJj
b3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VD
b21wb25lbnQuaCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmNwcCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCiAJ
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxYjA5NmY5MDBhZmQxZDYyZmFjZmQyMzU3ZTUz
NDI4MWUwMGY1Y2VlLi4xM2RiMzQyYzliY2Q0N2EwODBjYjZmOTk0MWNjOGM2YmRiNDY5YzY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0xNzcyLDYgKzE3NzIsOCBAQAogICAgICAgICAgICAgJ2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCcsCiAgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVu
dC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VDb21wb25lbnQuaCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmNwcCcsCisgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmgnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCcsCiAgICAg
ICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCcsCiAgICAg
ICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljc0NTEzMjIxMzZkMzljYjY4MjMxMTA0OTFmZjJjNjMyOThjOTIxZDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlRG9jdW1lbnQuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3pp
bGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2Rl
IGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAy
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQu
aCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2li
bGVVdGlsLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
KEF0a0RvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxF
KGRvY3VtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNjZXNz
aWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV0VCS0lUX0FDQ0VTU0lCTEUoZG9jdW1lbnQpKTsK
K30KKworc3RhdGljIGNvbnN0IGdjaGFyKiBkb2N1bWVudEF0dHJpYnV0ZVZhbHVlKEF0a0RvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZSkKK3sKKyAgICBEb2N1bWVudCog
Y29yZURvY3VtZW50ID0gY29yZShkb2N1bWVudCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFjb3Jl
RG9jdW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIHZhbHVlID0gU3RyaW5n
KCk7CisgICAgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAoYXR0cmlidXRlLCAiRG9jVHlwZSIpICYm
IGNvcmVEb2N1bWVudC0+ZG9jdHlwZSgpKQorICAgICAgICB2YWx1ZSA9IGNvcmVEb2N1bWVudC0+
ZG9jdHlwZSgpLT5uYW1lKCk7CisgICAgZWxzZSBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcChhdHRy
aWJ1dGUsICJFbmNvZGluZyIpKQorICAgICAgICB2YWx1ZSA9IGNvcmVEb2N1bWVudC0+Y2hhcnNl
dCgpOworICAgIGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAoYXR0cmlidXRlLCAiVVJJIikp
CisgICAgICAgIHZhbHVlID0gY29yZURvY3VtZW50LT5kb2N1bWVudFVSSSgpOworCisgICAgaWYg
KCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXR1cm5TdHJpbmcodmFsdWUpOwor
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJm
YWNlSW5pdChBdGtEb2N1bWVudElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0X2RvY3Vt
ZW50X2F0dHJpYnV0ZV92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0
ZVZhbHVlOworICAgIGlmYWNlLT5nZXRfZG9jdW1lbnRfYXR0cmlidXRlcyA9IHdlYmtpdEFjY2Vz
c2libGVEb2N1bWVudEdldEF0dHJpYnV0ZXM7CisgICAgaWZhY2UtPmdldF9kb2N1bWVudF9sb2Nh
bGUgPSB3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRMb2NhbGU7Cit9CisKK2NvbnN0IGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVWYWx1ZShBdGtEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGUpCit7CisgICAgcmV0dXJuIGRvY3VtZW50
QXR0cmlidXRlVmFsdWUoZG9jdW1lbnQsIGF0dHJpYnV0ZSk7Cit9CisKK0F0a0F0dHJpYnV0ZVNl
dCogd2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0QXR0cmlidXRlcyhBdGtEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSAwOworICAgIGNv
bnN0IGdjaGFyKiBhdHRyaWJ1dGVzW10gPSB7ICJEb2NUeXBlIiwgIkVuY29kaW5nIiwgIlVSSSIg
fTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoYXR0cmlidXRl
cyk7IGkrKykgeworICAgICAgICBjb25zdCBnY2hhciogdmFsdWUgPSBkb2N1bWVudEF0dHJpYnV0
ZVZhbHVlKGRvY3VtZW50LCBhdHRyaWJ1dGVzW2ldKTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAg
ICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkQXR0cmlidXRlVG9TZXQoYXR0cmlidXRlU2V0LCBh
dHRyaWJ1dGVzW2ldLCB2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsK
K30KKworY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldExvY2FsZShBdGtE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgLy8gVE9ETzogU2hvdWxkIHdlIGZhbGwgYmFjayBv
biBsYW5nIHhtbDpsYW5nIHdoZW4gdGhlIGZvbGxvd2luZyBjb21lcyB1cCBlbXB0eT8KKyAgICBT
dHJpbmcgbGFuZ3VhZ2UgPSBjb3JlKGRvY3VtZW50KS0+bGFuZ3VhZ2UoKTsKKyAgICBpZiAoIWxh
bmd1YWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyhsYW5ndWFnZSk7
CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTk0OWE5NTM0MmFkYTg4Njk4ODU3MzI0OTM3ZDliM2NiMThjZTM2YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
QWxvbnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnRfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlRG9jdW1lbnRfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCit2b2lkIHdlYmtpdEFj
Y2Vzc2libGVEb2N1bWVudEludGVyZmFjZUluaXQoQXRrRG9jdW1lbnRJZmFjZSopOworY29uc3Qg
Z2NoYXIqIHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZVZhbHVlKEF0a0RvY3Vt
ZW50KiwgY29uc3QgZ2NoYXIqKTsKK0F0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZURv
Y3VtZW50R2V0QXR0cmlidXRlcyhBdGtEb2N1bWVudCopOworY29uc3QgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVEb2N1bWVudEdldExvY2FsZShBdGtEb2N1bWVudCopOworCisjZW5kaWYgLy8gV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA0
YWRiNDVlYzY3MzY1YWMwNTUxNTU5ZWMyY2UyZmYwNDEyZjM5Y2MxLi42ZmUxNmUzZGM3MTcwZTZl
NDk4Mzc3ZGYxMDM3NWJjOTg5NGVkYWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC00MCw2ICs0
MCwxNSBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorQXRrQXR0cmlidXRlU2V0KiBh
ZGRBdHRyaWJ1dGVUb1NldChBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCwgY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1
dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihnX21hbGxvYyhzaXplb2YoQXRrQXR0cmli
dXRlKSkpOworICAgIGF0dHJpYnV0ZS0+bmFtZSA9IGdfc3RyZHVwKG5hbWUpOworICAgIGF0dHJp
YnV0ZS0+dmFsdWUgPSBnX3N0cmR1cCh2YWx1ZSk7CisgICAgYXR0cmlidXRlU2V0ID0gZ19zbGlz
dF9wcmVwZW5kKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlKTsKKyAgICByZXR1cm4gYXR0cmlidXRl
U2V0OworfQorCiB2b2lkIGNvbnRlbnRzVG9BdGsoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgSW50UmVjdCByZWN0LCBnaW50KiB4LCBnaW50
KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0KQogewogICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oCmluZGV4
IGJiYjUzYzhjMjVhYjNiNTI1ZjUyMWRjNGFhMWY3MjY1MTEzNTg3MjIuLjhmODMzNmMyOWUyMzQx
NGJlZTIxYjAwNTIxYmFmZmNkYjVmZGEyZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaApAQCAtMzAsNiArMzAs
OSBAQCBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgSW50UmVjdDsKIH0KIAorLy8g
QWRkcyBhbiBhY2Nlc3NpYmlsaXR5IGF0dHJpYnV0ZSB0byBhbiBBdGtBdHRyaWJ1dGVTZXQsIGJ5
IG5hbWUgYW5kIHZhbHVlLgorQXRrQXR0cmlidXRlU2V0KiBhZGRBdHRyaWJ1dGVUb1NldChBdGtB
dHRyaWJ1dGVTZXQqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CisKIC8v
IFJldHVybnMgY29udGVudCdzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB3aW5kb3cgb3Ig
dGhlIHNjcmVlbi4KIHZvaWQgY29udGVudHNUb0F0ayhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiwgQXRrQ29vcmRUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBnaW50KiB4LCBnaW50KiB5LCBn
aW50KiB3aWR0aCA9IDAsIGdpbnQqIGhlaWdodCA9IDApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBl
ckF0ay5jcHAKaW5kZXggY2YyYzM2ZGVhN2IxNGQxMzIwMzA2MzFiYmRjNmI1OTJiODk3MTc2ZS4u
MTExYmM2MDY1NzRhMDcxNWY4ZTQ5ZDU2NDE3ZGEyZmI1YTFhZWYwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVXcmFwcGVyQXRrLmNwcApAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgIldlYktpdEFjY2Vz
c2libGVIeXBlcmxpbmsuaCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oIgor
I2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oIgogI2luY2x1ZGUg
IldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0xNDEsMTEgKzE0Miw2IEBAIHN0YXRpYyBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0KQogICAgIHJldHVybiBj
b3JlKEFUS19PQkpFQ1QoaHlwZXJ0ZXh0KSk7CiB9CiAKLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlKEF0a0RvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gY29yZShBVEtf
T0JKRUNUKGRvY3VtZW50KSk7Ci19Ci0KIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
KEF0a1ZhbHVlKiB2YWx1ZSkKIHsKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHZhbHVlKSk7
CkBAIC00NjcsMTYgKzQ2Myw2IEBAIHN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9p
bmRleF9pbl9wYXJlbnQoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIC0xOwogfQogCi1z
dGF0aWMgQXRrQXR0cmlidXRlU2V0KiBhZGRBdHRyaWJ1dGVUb1NldChBdGtBdHRyaWJ1dGVTZXQq
IGF0dHJpYnV0ZVNldCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCi17Ci0g
ICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihn
X21hbGxvYyhzaXplb2YoQXRrQXR0cmlidXRlKSkpOwotICAgIGF0dHJpYnV0ZS0+bmFtZSA9IGdf
c3RyZHVwKG5hbWUpOwotICAgIGF0dHJpYnV0ZS0+dmFsdWUgPSBnX3N0cmR1cCh2YWx1ZSk7Ci0g
ICAgYXR0cmlidXRlU2V0ID0gZ19zbGlzdF9wcmVwZW5kKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRl
KTsKLQotICAgIHJldHVybiBhdHRyaWJ1dGVTZXQ7Ci19Ci0KIHN0YXRpYyBBdGtBdHRyaWJ1dGVT
ZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQog
ewogICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0ID0gMDsKQEAgLTIyNDMsNjMgKzIy
MjksNiBAQCBzdGF0aWMgdm9pZCBhdGtIeXBlcmxpbmtJbXBsSW50ZXJmYWNlSW5pdChBdGtIeXBl
cmxpbmtJbXBsSWZhY2UqIGlmYWNlKQogICAgIGlmYWNlLT5nZXRfaHlwZXJsaW5rID0gd2Via2l0
QWNjZXNzaWJsZUh5cGVybGlua0ltcGxHZXRIeXBlcmxpbms7CiB9CiAKLXN0YXRpYyBjb25zdCBn
Y2hhciogZG9jdW1lbnRBdHRyaWJ1dGVWYWx1ZShBdGtEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IGdjaGFyKiBhdHRyaWJ1dGUpCi17Ci0gICAgRG9jdW1lbnQqIGNvcmVEb2N1bWVudCA9IGNvcmUo
ZG9jdW1lbnQpLT5kb2N1bWVudCgpOwotICAgIGlmICghY29yZURvY3VtZW50KQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFN0cmluZyB2YWx1ZSA9IFN0cmluZygpOwotICAgIGlmICghZ19hc2Np
aV9zdHJjYXNlY21wKGF0dHJpYnV0ZSwgIkRvY1R5cGUiKSAmJiBjb3JlRG9jdW1lbnQtPmRvY3R5
cGUoKSkKLSAgICAgICAgdmFsdWUgPSBjb3JlRG9jdW1lbnQtPmRvY3R5cGUoKS0+bmFtZSgpOwot
ICAgIGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAoYXR0cmlidXRlLCAiRW5jb2RpbmciKSkK
LSAgICAgICAgdmFsdWUgPSBjb3JlRG9jdW1lbnQtPmNoYXJzZXQoKTsKLSAgICBlbHNlIGlmICgh
Z19hc2NpaV9zdHJjYXNlY21wKGF0dHJpYnV0ZSwgIlVSSSIpKQotICAgICAgICB2YWx1ZSA9IGNv
cmVEb2N1bWVudC0+ZG9jdW1lbnRVUkkoKTsKLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIHJldHVyblN0cmluZyh2YWx1ZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfYXR0cmli
dXRlX3ZhbHVlKEF0a0RvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZSkK
LXsKLSAgICByZXR1cm4gZG9jdW1lbnRBdHRyaWJ1dGVWYWx1ZShkb2N1bWVudCwgYXR0cmlidXRl
KTsKLX0KLQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfZG9jdW1l
bnRfZ2V0X2F0dHJpYnV0ZXMoQXRrRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEF0a0F0dHJp
YnV0ZVNldCogYXR0cmlidXRlU2V0ID0gMDsKLSAgICBjb25zdCBnY2hhciogYXR0cmlidXRlc1td
ID0geyAiRG9jVHlwZSIsICJFbmNvZGluZyIsICJVUkkiIH07Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGF0dHJpYnV0ZXMpOyBpKyspIHsKLSAgICAgICAgY29u
c3QgZ2NoYXIqIHZhbHVlID0gZG9jdW1lbnRBdHRyaWJ1dGVWYWx1ZShkb2N1bWVudCwgYXR0cmli
dXRlc1tpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9
IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlc1tpXSwgdmFsdWUpOwot
ICAgIH0KLQotICAgIHJldHVybiBhdHRyaWJ1dGVTZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hh
ciogd2Via2l0X2FjY2Vzc2libGVfZG9jdW1lbnRfZ2V0X2xvY2FsZShBdGtEb2N1bWVudCogZG9j
dW1lbnQpCi17Ci0KLSAgICAvLyBUT0RPOiBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIGxhbmcgeG1s
Omxhbmcgd2hlbiB0aGUgZm9sbG93aW5nIGNvbWVzIHVwIGVtcHR5PwotICAgIFN0cmluZyBsYW5n
dWFnZSA9IGNvcmUoZG9jdW1lbnQpLT5sYW5ndWFnZSgpOwotICAgIGlmICghbGFuZ3VhZ2UuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGxhbmd1YWdlKTsKLQotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhdGtfZG9jdW1lbnRfaW50ZXJmYWNlX2luaXQoQXRr
RG9jdW1lbnRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF9kb2N1bWVudF9hdHRyaWJ1
dGVfdmFsdWUgPSB3ZWJraXRfYWNjZXNzaWJsZV9kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVl
OwotICAgIGlmYWNlLT5nZXRfZG9jdW1lbnRfYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxl
X2RvY3VtZW50X2dldF9hdHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRfZG9jdW1lbnRfbG9jYWxl
ID0gd2Via2l0X2FjY2Vzc2libGVfZG9jdW1lbnRfZ2V0X2xvY2FsZTsKLX0KLQotCiBzdGF0aWMg
dm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVl
LCBHVmFsdWUqIGdWYWx1ZSkKIHsKICAgICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1
ZSkpOwpAQCAtMjM3Myw4ICsyMzAyLDcgQEAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIEF0
a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW10gPSB7CiAgICAgIChHSW50ZXJmYWNlRmluYWxpemVG
dW5jKSAwLCAwfSwKICAgICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtIeXBlcmxpbmtJbXBsSW50
ZXJmYWNlSW5pdCwKICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAotICAgIHso
R0ludGVyZmFjZUluaXRGdW5jKWF0a19kb2N1bWVudF9pbnRlcmZhY2VfaW5pdCwKLSAgICAgKEdJ
bnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRl
cmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJmYWNlSW5pdCksIDAs
IDB9LAogICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a1ZhbHVlSW50ZXJmYWNlSW5pdCwKICAg
ICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9CiB9Owo=
</data>
<flag name="review"
          id="124557"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123485</attachid>
            <date>2012-01-22 10:24:06 -0800</date>
            <delta_ts>2012-01-23 10:06:46 -0800</delta_ts>
            <desc>8. New files for the implementation of the AtkEditableText interface</desc>
            <filename>bug-76783-20120122192403.patch</filename>
            <type>text/plain</type>
            <size>15385</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzAxMTgwNWUwYWMxMWY2
YzExNDAwYTY0ZGE2ODEzZDEyNjdmZjdiNS4uZTgyZmI0NTUzODk3ZTFjZWJmZTMwY2JiMzMwODFj
OTYwMGQ0NTYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDM1IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0VkaXRhYmxlVGV4dCBpbnRlcmZhY2UsCisgICAgICAgIGNvbnRh
aW5pbmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNw
cC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VFZGl0YWJsZVRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFNldFJ1bkF0dHJpYnV0ZXMpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFNldFRleHRDb250ZW50cyk6CisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlRWRpdGFibGVUZXh0SW5zZXJ0VGV4dCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlRWRpdGFibGVUZXh0Q29weVRleHQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUVkaXRh
YmxlVGV4dEN1dFRleHQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dERl
bGV0ZVRleHQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFBhc3RlVGV4
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZUVkaXRhYmxlVGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6IFJlbW92ZSBjb2RlCisgICAgICAgIHJlbGF0ZWQg
dG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtFZGl0YWJsZVRleHQgaW50ZXJmYWNlLgor
CisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gYnVpbGQgZmlsZXMuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4
dC5baHxjcHBdLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisKKzIwMTItMDEtMjIg
IE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJlIG1vcmUgbW9kdWxh
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3ODMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBOZXcgZmls
ZXMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrRG9jdW1lbnQgaW50ZXJmYWNlLAog
ICAgICAgICBjb250YWluaW5nIHRoZSByZWxhdGVkIGNvZGUgZnJvbSBXZWJLaXRBY2Nlc3NpYmxl
V3JhcHBlckF0ay5jcHAuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDI2MjMx
MTVjMTc2MDQ2MjFhZGYxMDIxNDc1ODZjOTQyNWY5N2IwMGUuLjYxNGNlYmJjYWU4NzdiMTI1NWNm
OWUyZWQ1MGU4ZDE1NDdiYWE2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
NDQzMCw2ICs0NDMwLDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VEb2N1bWVudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmNwcCBc
CisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUVkaXRhYmxlVGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggMTNkYjM0MmM5YmNkNDdhMDgwY2I2Zjk5NDFjYzhjNmJkYjQ2OWM2OC4uYjA4NmQ3YzM4MmYx
NzlmYTIwNGE4ZGFmZTc0YmQzOGU5MTM3OTdiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTc3NCw2
ICsxNzc0LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlQ29tcG9uZW50LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAnLAogICAgICAgICAgICAgJ2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oJywKKyAg
ICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRp
dGFibGVUZXh0LmNwcCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
RWRpdGFibGVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjMjYyMGQw
NmIwODYyMjhiYWM5OTg1YWY2ZDA4NDI0MDZkNWU3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRp
dGFibGVUZXh0LmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96
aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29k
ZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlv
bnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAw
MgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxl
VGV4dC5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtFZGl0
YWJsZVRleHQqIHRleHQpCit7CisgICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRSh0ZXh0KSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vz
c2liaWxpdHlPYmplY3QoV0VCS0lUX0FDQ0VTU0lCTEUodGV4dCkpOworfQorCit2b2lkIHdlYmtp
dEFjY2Vzc2libGVFZGl0YWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a0VkaXRhYmxlVGV4dElmYWNl
KiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+c2V0X3J1bl9hdHRyaWJ1dGVzID0gd2Via2l0QWNjZXNz
aWJsZUVkaXRhYmxlVGV4dFNldFJ1bkF0dHJpYnV0ZXM7CisgICAgaWZhY2UtPnNldF90ZXh0X2Nv
bnRlbnRzID0gd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFNldFRleHRDb250ZW50czsKKyAg
ICBpZmFjZS0+aW5zZXJ0X3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0SW5zZXJ0
VGV4dDsKKyAgICBpZmFjZS0+Y29weV90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4
dENvcHlUZXh0OworICAgIGlmYWNlLT5jdXRfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVFZGl0YWJs
ZVRleHRDdXRUZXh0OworICAgIGlmYWNlLT5kZWxldGVfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVF
ZGl0YWJsZVRleHREZWxldGVUZXh0OworICAgIGlmYWNlLT5wYXN0ZV90ZXh0ID0gd2Via2l0QWNj
ZXNzaWJsZUVkaXRhYmxlVGV4dFBhc3RlVGV4dDsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNz
aWJsZUVkaXRhYmxlVGV4dFNldFJ1bkF0dHJpYnV0ZXMoQXRrRWRpdGFibGVUZXh0KiwgQXRrQXR0
cmlidXRlU2V0KiwgZ2ludCwgZ2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBGQUxTRTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0VGV4
dENvbnRlbnRzKEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgY29uc3QgZ2NoYXIqIHN0cmluZykKK3sK
KyAgICAvLyBGSVhNRTogc3RyaW5nIG51bGxjaGVjaz8KKyAgICBjb3JlKHRleHQpLT5zZXRWYWx1
ZShTdHJpbmc6OmZyb21VVEY4KHN0cmluZykpOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVF
ZGl0YWJsZVRleHRJbnNlcnRUZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgY29uc3QgZ2NoYXIq
IHN0cmluZywgZ2ludCBsZW5ndGgsIGdpbnQqIHBvc2l0aW9uKQoreworICAgIC8vIEZJWE1FOiBz
dHJpbmcgbnVsbGNoZWNrPworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9
IGNvcmUodGV4dCk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJDb3JlCisg
ICAgLy8gY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2UoKnBv
c2l0aW9uLCAwKSk7CisgICAgLy8gY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRUZXh0KFN0cmluZzo6
ZnJvbVVURjgoc3RyaW5nKSk7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0
LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3Np
dGlvblJhbmdlKGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5U
ZXh0UmFuZ2UoKnBvc2l0aW9uLCAwKSkpOworICAgIGNvcmVPYmplY3QtPnNldEZvY3VzZWQodHJ1
ZSk7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZXQgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBp
bnNlcnRlZCB0ZXh0IGxlbmd0aCwgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbiB0aGF0IHJlcXVlc3Rl
ZC4KKyAgICBpZiAoZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT5pbnNlcnRUZXh0V2l0aG91
dFNlbmRpbmdUZXh0RXZlbnQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBmYWxzZSwgMCkpCisg
ICAgICAgICpwb3NpdGlvbiArPSBsZW5ndGg7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUVk
aXRhYmxlVGV4dENvcHlUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGdpbnQsIGdpbnQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0
Q3V0VGV4dChBdGtFZGl0YWJsZVRleHQqLCBnaW50LCBnaW50KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dERlbGV0ZVRleHQo
QXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0UG9zLCBnaW50IGVuZFBvcykKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICAvLyBG
SVhNRTogTm90IGltcGxlbWVudGVkIGluIFdlYkNvcmUKKyAgICAvLyBjb3JlT2JqZWN0LT5zZXRT
ZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQ
b3MpKTsKKyAgICAvLyBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHQoU3RyaW5nKCkpOworCisg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb3JlT2JqZWN0LT52
aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQ
b3MgLSBzdGFydFBvcykpKTsKKyAgICBjb3JlT2JqZWN0LT5zZXRGb2N1c2VkKHRydWUpOworICAg
IGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+cGVyZm9ybURlbGV0ZSgpOworfQorCit2b2lk
IHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRQYXN0ZVRleHQoQXRrRWRpdGFibGVUZXh0Kiwg
Z2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxl
VGV4dC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3ZDEyNjU3MGRlZmRhOGM3MGQ4
MjM2ZmExYTc0NzA1OGFmOTQxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmgK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJs
ZVRleHRfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0X2gK
KworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVU
ZXh0SW50ZXJmYWNlSW5pdChBdGtFZGl0YWJsZVRleHRJZmFjZSopOworZ2Jvb2xlYW4gd2Via2l0
QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFNldFJ1bkF0dHJpYnV0ZXMoQXRrRWRpdGFibGVUZXh0Kiwg
QXRrQXR0cmlidXRlU2V0KiwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpOwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0VGV4dENvbnRlbnRzKEF0a0VkaXRhYmxl
VGV4dCosIGNvbnN0IGdjaGFyKik7Cit2b2lkIHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRJ
bnNlcnRUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGNvbnN0IGdjaGFyKiwgZ2ludCBsZW5ndGgsIGdp
bnQqIHBvc2l0aW9uKTsKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dENvcHlUZXh0
KEF0a0VkaXRhYmxlVGV4dCosIGdpbnQgc3RhcnRQb3MsIGdpbnQgZW5kUG9zKTsKK3ZvaWQgd2Vi
a2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEN1dFRleHQoQXRrRWRpdGFibGVUZXh0KiwgZ2ludCBz
dGFydFBvcywgZ2ludCBlbmRQb3MpOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0
RGVsZXRlVGV4dChBdGtFZGl0YWJsZVRleHQqLCBnaW50IHN0YXJ0UG9zLCBnaW50IGVuZFBvcyk7
Cit2b2lkIHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRQYXN0ZVRleHQoQXRrRWRpdGFibGVU
ZXh0KiwgZ2ludCBwb3NpdGlvbik7CisKKyNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlRWRpdGFibGVUZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAppbmRleCAxMTFi
YzYwNjU3NGEwNzE1ZjhlNDlkNTY0MTdkYTJmYjVhMWFlZjBhLi4xYmM4NDgyM2ZlMWMxZjg0NmYy
ZGEwODhlNDgxMTdjYjdlNWM1OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBA
IC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlv
bi5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuaCIKICNp
bmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmgiCiAjaW5jbHVkZSAiV2ViS2l0
QWNjZXNzaWJsZVV0aWwuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZp
c2libGVfdW5pdHMuaCIKQEAgLTEyMiwxMSArMTIzLDYgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmUoQXRrVGV4dCogdGV4dCkKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHRl
eHQpKTsKIH0KIAotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrRWRpdGFibGVU
ZXh0KiB0ZXh0KQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwotfQotCiBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtJbWFnZSogaW1hZ2UpCiB7CiAgICAg
cmV0dXJuIGNvcmUoQVRLX09CSkVDVChpbWFnZSkpOwpAQCAtMTg0MCw4MiArMTgzNiw2IEBAIHN0
YXRpYyB2b2lkIGF0a190ZXh0X2ludGVyZmFjZV9pbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCiAg
ICAgaWZhY2UtPnNldF9jYXJldF9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9j
YXJldF9vZmZzZXQ7CiB9CiAKLS8vIEVkaXRhYmxlVGV4dAotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9zZXRfcnVuX2F0dHJpYnV0ZXMoQXRrRWRpdGFi
bGVUZXh0KiB0ZXh0LCBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYl9zZXQsIGdpbnQgc3RhcnRfb2Zm
c2V0LCBnaW50IGVuZF9vZmZzZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3Rl
eHRfc2V0X3RleHRfY29udGVudHMoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBjb25zdCBnY2hhciog
c3RyaW5nKQotewotICAgIC8vIEZJWE1FOiBzdHJpbmcgbnVsbGNoZWNrPwotICAgIGNvcmUodGV4
dCktPnNldFZhbHVlKFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQoQXRrRWRpdGFibGVU
ZXh0KiB0ZXh0LCBjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IGxlbmd0aCwgZ2ludCogcG9zaXRp
b24pCi17Ci0gICAgLy8gRklYTUU6IHN0cmluZyBudWxsY2hlY2s/Ci0KLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICAvLyBGSVhNRTogTm90IGlt
cGxlbWVudGVkIGluIFdlYkNvcmUKLSAgICAvLyBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHRS
YW5nZShQbGFpblRleHRSYW5nZSgqcG9zaXRpb24sIDApKTsKLSAgICAvLyBjb3JlT2JqZWN0LT5z
ZXRTZWxlY3RlZFRleHQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsKLQotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvcmVPYmplY3Qt
PnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0
aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZSgqcG9zaXRpb24sIDApKSk7Ci0gICAgY29y
ZU9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNldCBw
b3NpdGlvbiB0byB0aGUgYWN0dWFsIGluc2VydGVkIHRleHQgbGVuZ3RoLCB3aGljaCBtYXkgYmUg
bGVzcyB0aGFuIHRoYXQgcmVxdWVzdGVkLgotICAgIGlmIChkb2N1bWVudC0+ZnJhbWUoKS0+ZWRp
dG9yKCktPmluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChTdHJpbmc6OmZyb21VVEY4
KHN0cmluZyksIGZhbHNlLCAwKSkKLSAgICAgICAgKnBvc2l0aW9uICs9IGxlbmd0aDsKLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9jb3B5X3RleHQoQXRr
RWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0X3BvcywgZ2ludCBlbmRfcG9zKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2Vk
aXRhYmxlX3RleHRfY3V0X3RleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0X3Bv
cywgZ2ludCBlbmRfcG9zKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfZGVsZXRlX3RleHQoQXRrRWRpdGFi
bGVUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0X3BvcywgZ2ludCBlbmRfcG9zKQotewotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQgaW4gV2ViQ29yZQotICAgIC8vIGNvcmVPYmplY3QtPnNldFNlbGVjdGVk
VGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0X3BvcywgZW5kX3BvcyAtIHN0YXJ0X3Bvcykp
OwotICAgIC8vIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVGV4dChTdHJpbmcoKSk7Ci0KLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9j
dW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb3Jl
T2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvcmVPYmplY3QtPnZpc2li
bGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRfcG9zLCBlbmRfcG9z
IC0gc3RhcnRfcG9zKSkpOwotICAgIGNvcmVPYmplY3QtPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAg
ZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT5wZXJmb3JtRGVsZXRlKCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfcGFzdGVfdGV4dChBdGtFZGl0
YWJsZVRleHQqIHRleHQsIGdpbnQgcG9zaXRpb24pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotc3RhdGljIHZvaWQgYXRrX2VkaXRhYmxlX3RleHRfaW50ZXJmYWNlX2luaXQoQXRrRWRp
dGFibGVUZXh0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5zZXRfcnVuX2F0dHJpYnV0ZXMg
PSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90ZXh0X3NldF9ydW5fYXR0cmlidXRlczsKLSAg
ICBpZmFjZS0+c2V0X3RleHRfY29udGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV9lZGl0YWJsZV90
ZXh0X3NldF90ZXh0X2NvbnRlbnRzOwotICAgIGlmYWNlLT5pbnNlcnRfdGV4dCA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQ7Ci0gICAgaWZhY2UtPmNvcHlfdGV4
dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfY29weV90ZXh0OwotICAgIGlmYWNl
LT5jdXRfdGV4dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2VkaXRhYmxlX3RleHRfY3V0X3RleHQ7Ci0g
ICAgaWZhY2UtPmRlbGV0ZV90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfZWRpdGFibGVfdGV4dF9k
ZWxldGVfdGV4dDsKLSAgICBpZmFjZS0+cGFzdGVfdGV4dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2Vk
aXRhYmxlX3RleHRfcGFzdGVfdGV4dDsKLX0KLQogLy8gSW1hZ2UKIAogc3RhdGljIHZvaWQgd2Vi
a2l0X2FjY2Vzc2libGVfaW1hZ2VfZ2V0X2ltYWdlX3Bvc2l0aW9uKEF0a0ltYWdlKiBpbWFnZSwg
Z2ludCogeCwgZ2ludCogeSwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKQEAgLTIyODksOCArMjIw
OSw3IEBAIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0
aW9uc1tdID0gewogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Vi
a2l0QWNjZXNzaWJsZUFjdGlvbkludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7KEdJbnRlcmZh
Y2VJbml0RnVuYylhdGtfc2VsZWN0aW9uX2ludGVyZmFjZV9pbml0LAogICAgICAoR0ludGVyZmFj
ZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX2VkaXRh
YmxlX3RleHRfaW50ZXJmYWNlX2luaXQsCi0gICAgIChHSW50ZXJmYWNlRmluYWxpemVGdW5jKSAw
LCAwfSwKKyAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdlYmtpdEFj
Y2Vzc2libGVFZGl0YWJsZVRleHRJbnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAgeyhHSW50ZXJm
YWNlSW5pdEZ1bmMpYXRrX3RleHRfaW50ZXJmYWNlX2luaXQsCiAgICAgIChHSW50ZXJmYWNlRmlu
YWxpemVGdW5jKSAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1
bmM+KHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0KSwgMCwgMH0sCg==
</data>
<flag name="review"
          id="124558"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123486</attachid>
            <date>2012-01-22 10:29:22 -0800</date>
            <delta_ts>2012-01-23 10:07:15 -0800</delta_ts>
            <desc>9. New files for the implementation of the AtkHyperlinkImpl interface</desc>
            <filename>bug-76783-20120122192920.patch</filename>
            <type>text/plain</type>
            <size>9593</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgyZmI0NTUzODk3ZTFj
ZWJmZTMwY2JiMzMwODFjOTYwMGQ0NTYzMC4uMzFmNWRkYTI1YjA5NjBlY2VmOGNkYjQyYWZlYzI2
MDBhMzNkMDU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDI5IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0h5cGVybGlua0ltcGwgaW50ZXJmYWNlLAorICAgICAgICBjb250
YWluaW5nIHRoZSByZWxhdGVkIGNvZGUgZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5j
cHAuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlSHlwZXJsaW5rSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5
cGVybGlua0ltcGxJbnRlcmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBl
cmxpbmtJbXBsR2V0SHlwZXJsaW5rKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6IFJlbW92ZSBj
b2RlCisgICAgICAgIHJlbGF0ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtIeXBl
cmxpbmtJbXBsIGludGVyZmFjZS4KKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2NsYXNzX2lu
aXQpOgorCisgICAgICAgIEFkZCBuZXcgZmlsZXMgdG8gYnVpbGQgZmlsZXMuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVy
bGlua0ltcGwuW2h8Y3BwXS4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorCisyMDEy
LTAxLTIyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1RLXSBSZWZhY3RvciBHVEsncyBhY2Nlc3NpYmlsaXRpdHkgY29kZSB0byBiZSBtb3Jl
IG1vZHVsYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc2NzgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAg
TmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0VkaXRhYmxlVGV4dCBp
bnRlcmZhY2UsCiAgICAgICAgIGNvbnRhaW5pbmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggNjE0Y2ViYmNhZTg3N2IxMjU1Y2Y5ZTJlZDUwZThkMTU0N2JhYTY3Mi4uN2UzZTgxMGQ0
NzFkM2Y4NjRlNTc1OGE1YjNjNjVjMDJkNDAzYmFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC00NDMyLDYgKzQ0MzIsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VE
b2N1bWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
SHlwZXJsaW5rSW1wbC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCiAJU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCBiMDg2ZDdjMzgyZjE3OWZhMjA0YThkYWZlNzRiZDM4ZTkx
Mzc5N2JmLi4xNWI1NWIxMDYwNTFkOGU2YzcyNmRhOGM1ODAyNjE3MjczNmIzZjRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0xNzc2LDYgKzE3NzYsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5oJywKICAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0
LmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZUVkaXRhYmxlVGV4dC5oJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5jcHAnLAorICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBs
LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGls
LmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0
aWwuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdy
YXBwZXJBdGsuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxp
bmtJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzBlN2NhZDJlNGQ4YTAxMTM1N2JmZDJiNGExMGJlYzlk
YmUzNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuY3BwCkBAIC0wLDAgKzEs
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VI
eXBlcmxpbmtJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgR1F1YXJrIGh5cGVybGlua09i
amVjdFF1YXJrID0gMDsKKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEludGVy
ZmFjZUluaXQoQXRrSHlwZXJsaW5rSW1wbElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0
X2h5cGVybGluayA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsR2V0SHlwZXJsaW5rOwor
ICAgIGh5cGVybGlua09iamVjdFF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoIndl
YmtpdC1hY2Nlc3NpYmxlLWh5cGVybGluay1vYmplY3QiKTsKK30KKworQXRrSHlwZXJsaW5rKiB3
ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluayhBdGtIeXBlcmxpbmtJbXBs
KiBoeXBlcmxpbmspCit7CisgICAgQXRrSHlwZXJsaW5rKiBoeXBlcmxpbmtPYmplY3QgPSBBVEtf
SFlQRVJMSU5LKGdfb2JqZWN0X2dldF9xZGF0YShHX09CSkVDVChoeXBlcmxpbmspLCBoeXBlcmxp
bmtPYmplY3RRdWFyaykpOworICAgIGlmICghaHlwZXJsaW5rT2JqZWN0KSB7CisgICAgICAgIGh5
cGVybGlua09iamVjdCA9IEFUS19IWVBFUkxJTksod2Via2l0QWNjZXNzaWJsZUh5cGVybGlua05l
dyhoeXBlcmxpbmspKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JKRUNUKGh5cGVy
bGluayksIGh5cGVybGlua09iamVjdFF1YXJrLCBoeXBlcmxpbmtPYmplY3QpOworICAgIH0KKyAg
ICByZXR1cm4gaHlwZXJsaW5rT2JqZWN0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VIeXBlcmxpbmtJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZlYzlmYjkzODdjYzczNTQ0YzMxMzZk
MTdhMzVhNDdhMmRmMWY1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmgKQEAg
LTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsX2gK
KyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGxfaAorCisjaW5j
bHVkZSA8YXRrL2F0ay5oPgorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsSW50
ZXJmYWNlSW5pdChBdGtIeXBlcmxpbmtJbXBsSWZhY2UqKTsKK0F0a0h5cGVybGluayogd2Via2l0
QWNjZXNzaWJsZUh5cGVybGlua0ltcGxHZXRIeXBlcmxpbmsoQXRrSHlwZXJsaW5rSW1wbCopOwor
CisjZW5kaWYgLy8gV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDFiYzg0ODIzZmUxYzFmODQ2ZjJkYTA4OGU0
ODExN2NiN2U1YzU5ZWQuLjM3OTcxODBhZWE1YmQ3Y2Q2ZTczMjkyZTQ2ODZiNzA3NWMxNDIzZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNs
dWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VIeXBlcmxpbmtJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwu
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIK
QEAgLTgxLDggKzgyLDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBH
UXVhcmsgaHlwZXJsaW5rT2JqZWN0UXVhcmsgPSAwOwotCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdCogZmFsbGJhY2tPYmplY3QoKQogewogICAgIC8vIEZJWE1FOiBBbiBBWE9iamVjdENhY2hl
IHdpdGggYSBEb2N1bWVudCBpcyBtZWFuaW5nbGVzcy4KQEAgLTgxMSw4ICs4MTAsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0KEF0a09iamVjdENsYXNzKiBrbGFz
cykKICAgICBrbGFzcy0+Z2V0X2luZGV4X2luX3BhcmVudCA9IHdlYmtpdF9hY2Nlc3NpYmxlX2dl
dF9pbmRleF9pbl9wYXJlbnQ7CiAgICAga2xhc3MtPmdldF9hdHRyaWJ1dGVzID0gd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXM7CiAgICAga2xhc3MtPnJlZl9yZWxhdGlvbl9zZXQgPSB3
ZWJraXRfYWNjZXNzaWJsZV9yZWZfcmVsYXRpb25fc2V0OwotCi0gICAgaHlwZXJsaW5rT2JqZWN0
UXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygid2Via2l0LWFjY2Vzc2libGUtaHlw
ZXJsaW5rLW9iamVjdCIpOwogfQogCiBHVHlwZQpAQCAtMjEzNCwyMSArMjEzMSw2IEBAIHN0YXRp
YyB2b2lkIGF0a0h5cGVydGV4dEludGVyZmFjZUluaXQoQXRrSHlwZXJ0ZXh0SWZhY2UqIGlmYWNl
KQogICAgIGlmYWNlLT5nZXRfbGlua19pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRH
ZXRMaW5rSW5kZXg7CiB9CiAKLXN0YXRpYyBBdGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2libGVI
eXBlcmxpbmtJbXBsR2V0SHlwZXJsaW5rKEF0a0h5cGVybGlua0ltcGwqIGh5cGVybGluaykKLXsK
LSAgICBBdGtIeXBlcmxpbmsqIGh5cGVybGlua09iamVjdCA9IEFUS19IWVBFUkxJTksoZ19vYmpl
Y3RfZ2V0X3FkYXRhKEdfT0JKRUNUKGh5cGVybGluayksIGh5cGVybGlua09iamVjdFF1YXJrKSk7
Ci0gICAgaWYgKCFoeXBlcmxpbmtPYmplY3QpIHsKLSAgICAgICAgaHlwZXJsaW5rT2JqZWN0ID0g
QVRLX0hZUEVSTElOSyh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rTmV3KGh5cGVybGluaykpOwot
ICAgICAgICBnX29iamVjdF9zZXRfcWRhdGEoR19PQkpFQ1QoaHlwZXJsaW5rKSwgaHlwZXJsaW5r
T2JqZWN0UXVhcmssIGh5cGVybGlua09iamVjdCk7Ci0gICAgfQotICAgIHJldHVybiBoeXBlcmxp
bmtPYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a0h5cGVybGlua0ltcGxJbnRlcmZhY2VJbml0
KEF0a0h5cGVybGlua0ltcGxJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF9oeXBlcmxp
bmsgPSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluazsKLX0KLQogc3Rh
dGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiB2
YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCiB7CiAgICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihH
VmFsdWUpKTsKQEAgLTIyMTksOCArMjIwMSw3IEBAIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5m
byBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgICAoR0ludGVyZmFjZUZpbmFs
aXplRnVuYykgMCwgMH0sCiAgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrSHlwZXJ0ZXh0SW50
ZXJmYWNlSW5pdCwKICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAotICAgIHso
R0ludGVyZmFjZUluaXRGdW5jKWF0a0h5cGVybGlua0ltcGxJbnRlcmZhY2VJbml0LAotICAgICAo
R0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0lu
dGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEludGVyZmFjZUlu
aXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdl
YmtpdEFjY2Vzc2libGVEb2N1bWVudEludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7KEdJbnRl
cmZhY2VJbml0RnVuYylhdGtWYWx1ZUludGVyZmFjZUluaXQsCiAgICAgIChHSW50ZXJmYWNlRmlu
YWxpemVGdW5jKSAwLCAwfQo=
</data>
<flag name="review"
          id="124559"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123487</attachid>
            <date>2012-01-22 10:32:13 -0800</date>
            <delta_ts>2012-01-22 11:08:24 -0800</delta_ts>
            <desc>10. New files for the implementation of the AtkHypertext interface</desc>
            <filename>bug-76783-20120122193211.patch</filename>
            <type>text/plain</type>
            <size>12903</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFmNWRkYTI1YjA5NjBl
Y2VmOGNkYjQyYWZlYzI2MDBhMzNkMDU0ZC4uZGY4NzY0YzNhOTBiODEwZDk4NmY5NWIzZWIwMmYy
M2EzYjhkNWQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMxIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0h5cGVydGV4dCBpbnRlcmZhY2UsCisgICAgICAgIGNvbnRhaW5p
bmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VI
eXBlcnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZUh5cGVydGV4dEdldExpbmspOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdl
dE5MaW5rcyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
SHlwZXJ0ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVXcmFwcGVyQXRrLmNwcDogUmVtb3ZlIGNvZGUKKyAgICAgICAgcmVsYXRlZCB0byB0
aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0h5cGVydGV4dCBpbnRlcmZhY2UuCisKKyAgICAg
ICAgQWRkIG5ldyBmaWxlcyB0byBidWlsZCBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LltofGNwcF0u
CisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0
b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhl
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtIeXBlcmxpbmtJbXBsIGludGVyZmFjZSwKICAgICAg
ICAgY29udGFpbmluZyB0aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBw
ZXJBdGsuY3BwLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3ZTNlODEwZDQ3
MWQzZjg2NGU1NzU4YTViM2M2NWMwMmQ0MDNiYWM4Li45MGJjMjdjZTE1ZWE3YzgyMTkzZTQ3NTdj
NjhmZWZhZGQxYjExMTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ0MzQs
NiArNDQzNCw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlSHlwZXJsaW5rSW1wbC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmggXAorCVNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlSHlwZXJ0ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCAxNWI1NWIxMDYwNTFkOGU2YzcyNmRhOGM1ODAyNjE3MjczNmIzZjRlLi5lMmNlY2IxZmE3
YzVjNjdjMDY3NzYzOTNmNjdkNjAwYjMxZmQ4MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNzc4
LDYgKzE3NzgsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuY3BwJywKICAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJs
aW5rSW1wbC5oJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmNwcCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oJywKICAgICAgICAgICAgICdh
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlSHlwZXJ0ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZTQ0
ZDgzYTdlNWM5MzBjMDIzZDU0MDhiMjBkZGYzODM0MWIyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
SHlwZXJ0ZXh0LmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oIgorCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZShBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19B
Q0NFU1NJQkxFKGh5cGVydGV4dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHdl
YmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKGh5
cGVydGV4dCkpOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRJbnRlcmZhY2VJ
bml0KEF0a0h5cGVydGV4dElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0X2xpbmsgPSB3
ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluazsKKyAgICBpZmFjZS0+Z2V0X25fbGlua3Mg
PSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzOworICAgIGlmYWNlLT5nZXRfbGlu
a19pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rSW5kZXg7Cit9CisKK0F0
a0h5cGVybGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmsoQXRrSHlwZXJ0ZXh0
KiBoeXBlcnRleHQsIGdpbnQgaW5kZXgpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQpLT5jaGls
ZHJlbigpOworICAgIGlmIChpbmRleCA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4
KSA+PSBjaGlsZHJlbi5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2ludCBjdXJy
ZW50TGluayA9IC0xOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXpl
KCk7IGkrKykgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjaGls
ZHJlbi5hdChpKS5nZXQoKTsKKyAgICAgICAgaWYgKCFjb3JlQ2hpbGQtPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkgeworICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVDaGls
ZC0+d3JhcHBlcigpOworICAgICAgICAgICAgaWYgKCFheE9iamVjdCB8fCAhQVRLX0lTX0hZUEVS
TElOS19JTVBMKGF4T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgY3VycmVudExpbmsrKzsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPSBjdXJyZW50TGlu
aykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcmV0dXJuIGF0a19o
eXBlcmxpbmtfaW1wbF9nZXRfaHlwZXJsaW5rKEFUS19IWVBFUkxJTktfSU1QTChheE9iamVjdCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2dpbnQgd2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEdldE5MaW5rcyhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRy
ZW4gPSBjb3JlKGh5cGVydGV4dCktPmNoaWxkcmVuKCk7CisgICAgaWYgKCFjaGlsZHJlbi5zaXpl
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2ludCBsaW5rc0ZvdW5kID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVDaGlsZCA9IGNoaWxkcmVuLmF0KGkpLmdldCgpOworICAg
ICAgICBpZiAoIWNvcmVDaGlsZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7CisgICAgICAg
ICAgICBBdGtPYmplY3QqIGF4T2JqZWN0ID0gY29yZUNoaWxkLT53cmFwcGVyKCk7CisgICAgICAg
ICAgICBpZiAoYXhPYmplY3QgJiYgQVRLX0lTX0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSkKKyAg
ICAgICAgICAgICAgICBsaW5rc0ZvdW5kKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gbGlua3NGb3VuZDsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlu
a0luZGV4KEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGNoYXJJbmRleCkKK3sKKyAgICBz
aXplX3QgbGlua3NDb3VudCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MoaHlw
ZXJ0ZXh0KTsKKyAgICBpZiAoIWxpbmtzQ291bnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlua3NDb3VudDsgaSsrKSB7CisgICAgICAgIEF0a0h5
cGVybGluayogaHlwZXJsaW5rID0gQVRLX0hZUEVSTElOSyh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0
ZXh0R2V0TGluayhoeXBlcnRleHQsIGkpKTsKKyAgICAgICAgZ2ludCBzdGFydEluZGV4ID0gYXRr
X2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaHlwZXJsaW5rKTsKKyAgICAgICAgZ2ludCBlbmRJ
bmRleCA9IGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoeXBlcmxpbmspOworCisgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBjaGFyIGluZGV4IGluIHRoZSBsaW5rJ3Mgb2Zmc2V0IHJhbmdlCisg
ICAgICAgIGlmIChzdGFydEluZGV4IDw9IGNoYXJJbmRleCAmJiBjaGFySW5kZXggPCBlbmRJbmRl
eCkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIC8vIE5vdCBmb3VuZCBpZiBy
ZWFjaGVkCisgICAgcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5
cGVydGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyYzIxZDhmZjE4ZTk4OTNhNzFlN2YwNjQ1YjYzY2M3NmY4
MjBhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgKQEAgLTAsMCArMSwzMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHRfaAorI2RlZmluZSBXZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdChBdGtIeXBlcnRleHRJZmFj
ZSopOworQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluayhBdGtI
eXBlcnRleHQqLCBnaW50IGluZGV4KTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdl
dE5MaW5rcyhBdGtIeXBlcnRleHQqKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdl
dExpbmtJbmRleChBdGtIeXBlcnRleHQqLCBnaW50IGNoYXJJbmRleCk7CisKKyNlbmRpZiAvLyBX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVy
QXRrLmNwcAppbmRleCAzNzk3MTgwYWVhNWJkN2NkNmU3MzI5MmU0Njg2YjcwNzVjMTQyM2U0Li5i
MTk0NmQyMTNmNDlkMzk3OGQ0YTJhYWMzMjhlMTZmYWVkYWEyZTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZVdyYXBwZXJBdGsuY3BwCkBAIC0xMzIsMTEgKzEzMiw2IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlKEF0a1RhYmxlKiB0YWJsZSkKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNU
KHRhYmxlKSk7CiB9CiAKLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0h5cGVy
dGV4dCogaHlwZXJ0ZXh0KQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QoaHlwZXJ0ZXh0
KSk7Ci19Ci0KIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1ZhbHVlKiB2YWx1
ZSkKIHsKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHZhbHVlKSk7CkBAIC0yMDYwLDc3ICsy
MDU1LDYgQEAgc3RhdGljIHZvaWQgYXRrX3RhYmxlX2ludGVyZmFjZV9pbml0KEF0a1RhYmxlSWZh
Y2UqIGlmYWNlKQogICAgIGlmYWNlLT5nZXRfcm93X2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vz
c2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlwdGlvbjsKIH0KIAotc3RhdGljIEF0a0h5cGVybGlu
ayogd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmsoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRl
eHQsIGdpbnQgaW5kZXgpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQpLT5jaGlsZHJlbigpOwot
ICAgIGlmIChpbmRleCA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBjaGls
ZHJlbi5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZ2ludCBjdXJyZW50TGluayA9
IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjaGlsZHJlbi5hdChp
KS5nZXQoKTsKLSAgICAgICAgaWYgKCFjb3JlQ2hpbGQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSkgewotICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVDaGlsZC0+d3JhcHBl
cigpOwotICAgICAgICAgICAgaWYgKCFheE9iamVjdCB8fCAhQVRLX0lTX0hZUEVSTElOS19JTVBM
KGF4T2JqZWN0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgY3Vy
cmVudExpbmsrKzsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSBjdXJyZW50TGluaykKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcmV0dXJuIGF0a19oeXBlcmxpbmtf
aW1wbF9nZXRfaHlwZXJsaW5rKEFUS19IWVBFUkxJTktfSU1QTChheE9iamVjdCkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vz
c2libGVIeXBlcnRleHRHZXROTGlua3MoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQpCi17Ci0gICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVu
ID0gY29yZShoeXBlcnRleHQpLT5jaGlsZHJlbigpOwotICAgIGlmICghY2hpbGRyZW4uc2l6ZSgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGdpbnQgbGlua3NGb3VuZCA9IDA7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykgewotICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjaGlsZHJlbi5hdChpKS5nZXQoKTsKLSAgICAg
ICAgaWYgKCFjb3JlQ2hpbGQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICAg
ICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVDaGlsZC0+d3JhcHBlcigpOwotICAgICAgICAg
ICAgaWYgKGF4T2JqZWN0ICYmIEFUS19JU19IWVBFUkxJTktfSU1QTChheE9iamVjdCkpCi0gICAg
ICAgICAgICAgICAgbGlua3NGb3VuZCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGxpbmtzRm91bmQ7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRH
ZXRMaW5rSW5kZXgoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQsIGdpbnQgY2hhckluZGV4KQotewot
ICAgIHNpemVfdCBsaW5rc0NvdW50ID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldE5MaW5r
cyhoeXBlcnRleHQpOwotICAgIGlmICghbGlua3NDb3VudCkKLSAgICAgICAgcmV0dXJuIC0xOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5rc0NvdW50OyBpKyspIHsKLSAgICAgICAg
QXRrSHlwZXJsaW5rKiBoeXBlcmxpbmsgPSBBVEtfSFlQRVJMSU5LKHdlYmtpdEFjY2Vzc2libGVI
eXBlcnRleHRHZXRMaW5rKGh5cGVydGV4dCwgaSkpOwotICAgICAgICBnaW50IHN0YXJ0SW5kZXgg
PSBhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoeXBlcmxpbmspOwotICAgICAgICBnaW50
IGVuZEluZGV4ID0gYXRrX2h5cGVybGlua19nZXRfZW5kX2luZGV4KGh5cGVybGluayk7Ci0KLSAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNoYXIgaW5kZXggaW4gdGhlIGxpbmsncyBvZmZzZXQgcmFu
Z2UKLSAgICAgICAgaWYgKHN0YXJ0SW5kZXggPD0gY2hhckluZGV4ICYmIGNoYXJJbmRleCA8IGVu
ZEluZGV4KQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotCi0gICAgLy8gTm90IGZvdW5k
IGlmIHJlYWNoZWQKLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a0h5cGVydGV4
dEludGVyZmFjZUluaXQoQXRrSHlwZXJ0ZXh0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5n
ZXRfbGluayA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rOwotICAgIGlmYWNlLT5n
ZXRfbl9saW5rcyA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3M7Ci0gICAgaWZh
Y2UtPmdldF9saW5rX2luZGV4ID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRl
eDsKLX0KLQogc3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVl
KEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCiB7CiAgICAgbWVtc2V0KGdWYWx1ZSwg
IDAsIHNpemVvZihHVmFsdWUpKTsKQEAgLTIxOTksOCArMjEyMyw3IEBAIHN0YXRpYyBjb25zdCBH
SW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgICAoR0lu
dGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCiAgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRr
X3RhYmxlX2ludGVyZmFjZV9pbml0LAogICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwg
MH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdCwK
LSAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHtyZWludGVycHJldF9j
YXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEludGVyZmFj
ZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+
KHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsSW50ZXJmYWNlSW5pdCksIDAsIDB9LAogICAg
IHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZURv
Y3VtZW50SW50ZXJmYWNlSW5pdCksIDAsIDB9LAogICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0
a1ZhbHVlSW50ZXJmYWNlSW5pdCwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123490</attachid>
            <date>2012-01-22 11:08:02 -0800</date>
            <delta_ts>2012-01-23 10:09:36 -0800</delta_ts>
            <desc>10. New files for the implementation of the AtkHypertext interface</desc>
            <filename>bug-76783-20120122200801.patch</filename>
            <type>text/plain</type>
            <size>13212</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFmNWRkYTI1YjA5NjBl
Y2VmOGNkYjQyYWZlYzI2MDBhMzNkMDU0ZC4uZGY4NzY0YzNhOTBiODEwZDk4NmY5NWIzZWIwMmYy
M2EzYjhkNWQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMxIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0h5cGVydGV4dCBpbnRlcmZhY2UsCisgICAgICAgIGNvbnRhaW5p
bmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VI
eXBlcnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZUh5cGVydGV4dEdldExpbmspOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdl
dE5MaW5rcyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
SHlwZXJ0ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVXcmFwcGVyQXRrLmNwcDogUmVtb3ZlIGNvZGUKKyAgICAgICAgcmVsYXRlZCB0byB0
aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0h5cGVydGV4dCBpbnRlcmZhY2UuCisKKyAgICAg
ICAgQWRkIG5ldyBmaWxlcyB0byBidWlsZCBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LltofGNwcF0u
CisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0
b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhl
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtIeXBlcmxpbmtJbXBsIGludGVyZmFjZSwKICAgICAg
ICAgY29udGFpbmluZyB0aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBw
ZXJBdGsuY3BwLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3ZTNlODEwZDQ3
MWQzZjg2NGU1NzU4YTViM2M2NWMwMmQ0MDNiYWM4Li45MGJjMjdjZTE1ZWE3YzgyMTkzZTQ3NTdj
NjhmZWZhZGQxYjExMTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ0MzQs
NiArNDQzNCw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlSHlwZXJsaW5rSW1wbC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmggXAorCVNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlSHlwZXJ0ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCAxNWI1NWIxMDYwNTFkOGU2YzcyNmRhOGM1ODAyNjE3MjczNmIzZjRlLi5lMmNlY2IxZmE3
YzVjNjdjMDY3NzYzOTNmNjdkNjAwYjMxZmQ4MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNzc4
LDYgKzE3NzgsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuY3BwJywKICAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJs
aW5rSW1wbC5oJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmNwcCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oJywKICAgICAgICAgICAgICdh
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlSHlwZXJ0ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZTQ0
ZDgzYTdlNWM5MzBjMDIzZDU0MDhiMjBkZGYzODM0MWIyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
SHlwZXJ0ZXh0LmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oIgorCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZShBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19B
Q0NFU1NJQkxFKGh5cGVydGV4dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHdl
YmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKGh5
cGVydGV4dCkpOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRJbnRlcmZhY2VJ
bml0KEF0a0h5cGVydGV4dElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0X2xpbmsgPSB3
ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluazsKKyAgICBpZmFjZS0+Z2V0X25fbGlua3Mg
PSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzOworICAgIGlmYWNlLT5nZXRfbGlu
a19pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rSW5kZXg7Cit9CisKK0F0
a0h5cGVybGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmsoQXRrSHlwZXJ0ZXh0
KiBoeXBlcnRleHQsIGdpbnQgaW5kZXgpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQpLT5jaGls
ZHJlbigpOworICAgIGlmIChpbmRleCA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4
KSA+PSBjaGlsZHJlbi5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2ludCBjdXJy
ZW50TGluayA9IC0xOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXpl
KCk7IGkrKykgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjaGls
ZHJlbi5hdChpKS5nZXQoKTsKKyAgICAgICAgaWYgKCFjb3JlQ2hpbGQtPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkgeworICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVDaGls
ZC0+d3JhcHBlcigpOworICAgICAgICAgICAgaWYgKCFheE9iamVjdCB8fCAhQVRLX0lTX0hZUEVS
TElOS19JTVBMKGF4T2JqZWN0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgY3VycmVudExpbmsrKzsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPSBjdXJyZW50TGlu
aykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcmV0dXJuIGF0a19o
eXBlcmxpbmtfaW1wbF9nZXRfaHlwZXJsaW5rKEFUS19IWVBFUkxJTktfSU1QTChheE9iamVjdCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2dpbnQgd2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEdldE5MaW5rcyhBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRy
ZW4gPSBjb3JlKGh5cGVydGV4dCktPmNoaWxkcmVuKCk7CisgICAgaWYgKCFjaGlsZHJlbi5zaXpl
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2ludCBsaW5rc0ZvdW5kID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVDaGlsZCA9IGNoaWxkcmVuLmF0KGkpLmdldCgpOworICAg
ICAgICBpZiAoIWNvcmVDaGlsZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7CisgICAgICAg
ICAgICBBdGtPYmplY3QqIGF4T2JqZWN0ID0gY29yZUNoaWxkLT53cmFwcGVyKCk7CisgICAgICAg
ICAgICBpZiAoYXhPYmplY3QgJiYgQVRLX0lTX0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSkKKyAg
ICAgICAgICAgICAgICBsaW5rc0ZvdW5kKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gbGlua3NGb3VuZDsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlu
a0luZGV4KEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGNoYXJJbmRleCkKK3sKKyAgICBz
aXplX3QgbGlua3NDb3VudCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MoaHlw
ZXJ0ZXh0KTsKKyAgICBpZiAoIWxpbmtzQ291bnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlua3NDb3VudDsgaSsrKSB7CisgICAgICAgIEF0a0h5
cGVybGluayogaHlwZXJsaW5rID0gQVRLX0hZUEVSTElOSyh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0
ZXh0R2V0TGluayhoeXBlcnRleHQsIGkpKTsKKyAgICAgICAgZ2ludCBzdGFydEluZGV4ID0gYXRr
X2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaHlwZXJsaW5rKTsKKyAgICAgICAgZ2ludCBlbmRJ
bmRleCA9IGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoeXBlcmxpbmspOworCisgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBjaGFyIGluZGV4IGluIHRoZSBsaW5rJ3Mgb2Zmc2V0IHJhbmdlCisg
ICAgICAgIGlmIChzdGFydEluZGV4IDw9IGNoYXJJbmRleCAmJiBjaGFySW5kZXggPCBlbmRJbmRl
eCkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIC8vIE5vdCBmb3VuZCBpZiBy
ZWFjaGVkCisgICAgcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5
cGVydGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyYzIxZDhmZjE4ZTk4OTNhNzFlN2YwNjQ1YjYzY2M3NmY4
MjBhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgKQEAgLTAsMCArMSwzMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHRfaAorI2RlZmluZSBXZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdChBdGtIeXBlcnRleHRJZmFj
ZSopOworQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluayhBdGtI
eXBlcnRleHQqLCBnaW50IGluZGV4KTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdl
dE5MaW5rcyhBdGtIeXBlcnRleHQqKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdl
dExpbmtJbmRleChBdGtIeXBlcnRleHQqLCBnaW50IGNoYXJJbmRleCk7CisKKyNlbmRpZiAvLyBX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVy
QXRrLmNwcAppbmRleCAzNzk3MTgwYWVhNWJkN2NkNmU3MzI5MmU0Njg2YjcwNzVjMTQyM2U0Li4y
NjQ4YmViMzQ2MDU3MTM4ZDY3ZWMwOWZlMjZlNmM2OGE4N2JiYjBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZVdyYXBwZXJBdGsuY3BwCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZURvY3VtZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUVkaXRhYmxlVGV4dC5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VI
eXBlcmxpbmtJbXBsLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVy
dGV4dC5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0xMzIsMTEgKzEzMyw2
IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RhYmxlKiB0YWJsZSkKICAg
ICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHRhYmxlKSk7CiB9CiAKLXN0YXRpYyBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0KQotewotICAgIHJldHVybiBj
b3JlKEFUS19PQkpFQ1QoaHlwZXJ0ZXh0KSk7Ci19Ci0KIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlKEF0a1ZhbHVlKiB2YWx1ZSkKIHsKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNU
KHZhbHVlKSk7CkBAIC0yMDYwLDc3ICsyMDU2LDYgQEAgc3RhdGljIHZvaWQgYXRrX3RhYmxlX2lu
dGVyZmFjZV9pbml0KEF0a1RhYmxlSWZhY2UqIGlmYWNlKQogICAgIGlmYWNlLT5nZXRfcm93X2Rl
c2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlwdGlvbjsK
IH0KIAotc3RhdGljIEF0a0h5cGVybGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExp
bmsoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQsIGdpbnQgaW5kZXgpCi17Ci0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZSho
eXBlcnRleHQpLT5jaGlsZHJlbigpOwotICAgIGlmIChpbmRleCA8IDAgfHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluZGV4KSA+PSBjaGlsZHJlbi5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgZ2ludCBjdXJyZW50TGluayA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjaGlsZHJlbi5zaXplKCk7IGkrKykgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlQ2hpbGQgPSBjaGlsZHJlbi5hdChpKS5nZXQoKTsKLSAgICAgICAgaWYgKCFjb3JlQ2hpbGQt
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9i
amVjdCA9IGNvcmVDaGlsZC0+d3JhcHBlcigpOwotICAgICAgICAgICAgaWYgKCFheE9iamVjdCB8
fCAhQVRLX0lTX0hZUEVSTElOS19JTVBMKGF4T2JqZWN0KSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgY3VycmVudExpbmsrKzsKLSAgICAgICAgICAgIGlmIChpbmRl
eCAhPSBjdXJyZW50TGluaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgcmV0dXJuIGF0a19oeXBlcmxpbmtfaW1wbF9nZXRfaHlwZXJsaW5rKEFUS19IWVBFUkxJTktf
SU1QTChheE9iamVjdCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MoQXRrSHlwZXJ0
ZXh0KiBoeXBlcnRleHQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQpLT5jaGlsZHJlbigpOwot
ICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGdpbnQg
bGlua3NGb3VuZCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXpl
KCk7IGkrKykgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlQ2hpbGQgPSBjaGls
ZHJlbi5hdChpKS5nZXQoKTsKLSAgICAgICAgaWYgKCFjb3JlQ2hpbGQtPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkgewotICAgICAgICAgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGNvcmVDaGls
ZC0+d3JhcHBlcigpOwotICAgICAgICAgICAgaWYgKGF4T2JqZWN0ICYmIEFUS19JU19IWVBFUkxJ
TktfSU1QTChheE9iamVjdCkpCi0gICAgICAgICAgICAgICAgbGlua3NGb3VuZCsrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpbmtzRm91bmQ7Ci19Ci0KLXN0YXRpYyBnaW50IHdl
YmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rSW5kZXgoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRl
eHQsIGdpbnQgY2hhckluZGV4KQotewotICAgIHNpemVfdCBsaW5rc0NvdW50ID0gd2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEdldE5MaW5rcyhoeXBlcnRleHQpOwotICAgIGlmICghbGlua3NDb3Vu
dCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5r
c0NvdW50OyBpKyspIHsKLSAgICAgICAgQXRrSHlwZXJsaW5rKiBoeXBlcmxpbmsgPSBBVEtfSFlQ
RVJMSU5LKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rKGh5cGVydGV4dCwgaSkpOwot
ICAgICAgICBnaW50IHN0YXJ0SW5kZXggPSBhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleCho
eXBlcmxpbmspOwotICAgICAgICBnaW50IGVuZEluZGV4ID0gYXRrX2h5cGVybGlua19nZXRfZW5k
X2luZGV4KGh5cGVybGluayk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNoYXIgaW5kZXgg
aW4gdGhlIGxpbmsncyBvZmZzZXQgcmFuZ2UKLSAgICAgICAgaWYgKHN0YXJ0SW5kZXggPD0gY2hh
ckluZGV4ICYmIGNoYXJJbmRleCA8IGVuZEluZGV4KQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0g
ICAgfQotCi0gICAgLy8gTm90IGZvdW5kIGlmIHJlYWNoZWQKLSAgICByZXR1cm4gLTE7Ci19Ci0K
LXN0YXRpYyB2b2lkIGF0a0h5cGVydGV4dEludGVyZmFjZUluaXQoQXRrSHlwZXJ0ZXh0SWZhY2Uq
IGlmYWNlKQotewotICAgIGlmYWNlLT5nZXRfbGluayA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRl
eHRHZXRMaW5rOwotICAgIGlmYWNlLT5nZXRfbl9saW5rcyA9IHdlYmtpdEFjY2Vzc2libGVIeXBl
cnRleHRHZXROTGlua3M7Ci0gICAgaWZhY2UtPmdldF9saW5rX2luZGV4ID0gd2Via2l0QWNjZXNz
aWJsZUh5cGVydGV4dEdldExpbmtJbmRleDsKLX0KLQogc3RhdGljIHZvaWQgd2Via2l0QWNjZXNz
aWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUp
CiB7CiAgICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihHVmFsdWUpKTsKQEAgLTIxOTksOCAr
MjEyNCw3IEBAIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1
bmN0aW9uc1tdID0gewogICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCiAgICAg
eyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX3RhYmxlX2ludGVyZmFjZV9pbml0LAogICAgICAoR0lu
dGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCi0gICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRr
SHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdCwKLSAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAs
IDB9LAorICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRf
Y2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsSW50
ZXJmYWNlSW5pdCksIDAsIDB9LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0
RnVuYz4od2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJmYWNlSW5pdCksIDAsIDB9LAogICAg
IHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a1ZhbHVlSW50ZXJmYWNlSW5pdCwK
</data>
<flag name="review"
          id="124564"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123491</attachid>
            <date>2012-01-22 11:10:01 -0800</date>
            <delta_ts>2012-01-23 10:10:00 -0800</delta_ts>
            <desc>11. New files for the implementation of the AtkImage interface</desc>
            <filename>bug-76783-20120122200959.patch</filename>
            <type>text/plain</type>
            <size>10533</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGY4NzY0YzNhOTBiODEw
ZDk4NmY5NWIzZWIwMmYyM2EzYjhkNWQzOS4uOTRlYTM4ZTVhMzBkNzQ2MzhiNzZjMTFmYmIxMWU5
NzQ3NzA2YzA0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMxIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0ltYWdlIGludGVyZmFjZSwKKyAgICAgICAgY29udGFpbmluZyB0
aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdl
LmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJ
bWFnZUludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1h
Z2VQb3NpdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlU2l6ZSk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdl
Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcDogUmVtb3ZlIGNvZGUKKyAgICAgICAgcmVsYXRlZCB0byB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a0ltYWdlIGludGVyZmFjZS4KKworICAgICAgICBBZGQgbmV3IGZp
bGVzIHRvIGJ1aWxkIGZpbGVzLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRk
IFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5baHxjcHBdLgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaTogRGl0dG8uCisKKzIwMTItMDEtMjIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2Fu
Y2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2li
aWxpdGl0eSBjb2RlIHRvIGJlIG1vcmUgbW9kdWxhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKwogICAgICAgICBOZXcgZmlsZXMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgQXRrSHlwZXJ0ZXh0IGludGVyZmFjZSwKICAgICAgICAgY29udGFpbmluZyB0aGUgcmVs
YXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5MGJjMjdjZTE1ZWE3YzgyMTkzZTQ3NTdjNjhmZWZh
ZGQxYjExMTVlLi4xZjkwZTAzM2Q2ZWJjYjQ2ZDI2NTgyMzEwODExOTE1ODdiMzYyNDVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ0MzYsNiArNDQzNiw4IEBAIHdlYmNvcmVn
dGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VIeXBlcnRleHQuaCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmggXAogCVNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCiAJU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlMmNlY2IxZmE3YzVjNjdjMDY3NzYzOTNmNjdkNjAw
YjMxZmQ4MTFjLi4zMDMwNzFkNjg4OGNlNmQzNGFlYjRiZmIwMTNlNmEwODkxOGNjZjk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0xNzgwLDYgKzE3ODAsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmgnLAogICAg
ICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBl
cnRleHQuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5jcHAnLAorICAgICAgICAgICAgJ2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5oJywKICAgICAgICAg
ICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDM4ZjI5
OGZlYmYxM2JmOTUyN2E2YjJkZGUyYzNmMWQ4ZGEwYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUlt
YWdlLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50
aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGEx
MXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1v
emlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVh
dGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCIKKworI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxl
V3JhcHBlckF0ay5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmUoQXRrSW1hZ2UqIGltYWdlKQoreworICAgIGlmICghV0VCS0lU
X0lTX0FDQ0VTU0lCTEUoaW1hZ2UpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3
ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShp
bWFnZSkpOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUludGVyZmFjZUluaXQoQXRr
SW1hZ2VJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmdldF9pbWFnZV9wb3NpdGlvbiA9IHdl
YmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlUG9zaXRpb247CisgICAgaWZhY2UtPmdldF9pbWFn
ZV9kZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlRGVzY3JpcHRpb247
CisgICAgaWZhY2UtPmdldF9pbWFnZV9zaXplID0gd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1h
Z2VTaXplOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlUG9zaXRpb24o
QXRrSW1hZ2UqIGltYWdlLCBnaW50KiB4LCBnaW50KiB5LCBBdGtDb29yZFR5cGUgY29vcmRUeXBl
KQoreworICAgIEludFJlY3QgcmVjdCA9IGNvcmUoaW1hZ2UpLT5lbGVtZW50UmVjdCgpOworICAg
IGNvbnRlbnRzVG9BdGsoY29yZShpbWFnZSksIGNvb3JkVHlwZSwgcmVjdCwgeCwgeSk7Cit9CisK
K2NvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZURlc2NyaXB0aW9uKEF0
a0ltYWdlKiBpbWFnZSkKK3sKKyAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGNvcmUoaW1hZ2UpLT5h
Y2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSk7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUlt
YWdlR2V0SW1hZ2VTaXplKEF0a0ltYWdlKiBpbWFnZSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdo
dCkKK3sKKyAgICBJbnRTaXplIHNpemUgPSBjb3JlKGltYWdlKS0+c2l6ZSgpOworCisgICAgaWYg
KHdpZHRoKQorICAgICAgICAqd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaWYgKGhlaWdodCkK
KyAgICAgICAgKmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4Zjc3MjZmNTBlZWFkNDBmNTRmOGE1YTc4NzhmMWZj
NjQ5ZDJlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaApAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlX2gKKyNkZWZpbmUgV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUltYWdlX2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9pZCB3
ZWJraXRBY2Nlc3NpYmxlSW1hZ2VJbnRlcmZhY2VJbml0KEF0a0ltYWdlSWZhY2UqKTsKK3ZvaWQg
d2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VQb3NpdGlvbihBdGtJbWFnZSosIGdpbnQqIHgs
IGdpbnQqIHksIEF0a0Nvb3JkVHlwZSk7Citjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUlt
YWdlR2V0SW1hZ2VEZXNjcmlwdGlvbihBdGtJbWFnZSopOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxl
SW1hZ2VHZXRJbWFnZVNpemUoQXRrSW1hZ2UqLCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0KTsK
KworI2VuZGlmIC8vIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBl
ckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlV3JhcHBlckF0ay5jcHAKaW5kZXggMjY0OGJlYjM0NjA1NzEzOGQ2N2VjMDlmZTI2ZTZjNjhh
ODdiYmIwYS4uOTEyOGQ1ZDE2NDMxMGRjNmYzMWU0M2RhOTU2YmE1MDMwNmY3NWJjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdy
YXBwZXJBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIldl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaCIKICNpbmNsdWRlICJXZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VIeXBlcnRleHQuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIgogI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAtMTIzLDEx
ICsxMjQsNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0
KQogICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwogfQogCi1zdGF0aWMgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZShBdGtJbWFnZSogaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNvcmUo
QVRLX09CSkVDVChpbWFnZSkpOwotfQotCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZShBdGtUYWJsZSogdGFibGUpCiB7CiAgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVCh0YWJsZSkp
OwpAQCAtMTgyOSwzNiArMTgyNSw2IEBAIHN0YXRpYyB2b2lkIGF0a190ZXh0X2ludGVyZmFjZV9p
bml0KEF0a1RleHRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2UtPnNldF9jYXJldF9vZmZzZXQgPSB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQ7CiB9CiAKLS8vIEltYWdlCi0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9wb3NpdGlvbihB
dGtJbWFnZSogaW1hZ2UsIGdpbnQqIHgsIGdpbnQqIHksIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUp
Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gY29yZShpbWFnZSktPmVsZW1lbnRSZWN0KCk7Ci0gICAg
Y29udGVudHNUb0F0ayhjb3JlKGltYWdlKSwgY29vcmRUeXBlLCByZWN0LCB4LCB5KTsKLX0KLQot
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRfaW1hZ2VfZGVz
Y3JpcHRpb24oQXRrSW1hZ2UqIGltYWdlKQotewotICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29y
ZShpbWFnZSktPmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpKTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2FjY2Vzc2libGVfaW1hZ2VfZ2V0X2ltYWdlX3NpemUoQXRrSW1hZ2UqIGltYWdlLCBn
aW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0KQotewotICAgIEludFNpemUgc2l6ZSA9IGNvcmUoaW1h
Z2UpLT5zaXplKCk7Ci0KLSAgICBpZiAod2lkdGgpCi0gICAgICAgICp3aWR0aCA9IHNpemUud2lk
dGgoKTsKLSAgICBpZiAoaGVpZ2h0KQotICAgICAgICAqaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsK
LX0KLQotc3RhdGljIHZvaWQgYXRrX2ltYWdlX2ludGVyZmFjZV9pbml0KEF0a0ltYWdlSWZhY2Uq
IGlmYWNlKQotewotICAgIGlmYWNlLT5nZXRfaW1hZ2VfcG9zaXRpb24gPSB3ZWJraXRfYWNjZXNz
aWJsZV9pbWFnZV9nZXRfaW1hZ2VfcG9zaXRpb247Ci0gICAgaWZhY2UtPmdldF9pbWFnZV9kZXNj
cmlwdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX2ltYWdlX2dldF9pbWFnZV9kZXNjcmlwdGlvbjsK
LSAgICBpZmFjZS0+Z2V0X2ltYWdlX3NpemUgPSB3ZWJraXRfYWNjZXNzaWJsZV9pbWFnZV9nZXRf
aW1hZ2Vfc2l6ZTsKLX0KLQogLy8gVGFibGUKIAogc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqIGNlbGwoQXRrVGFibGUqIHRhYmxlLCBndWludCByb3csIGd1aW50IGNvbHVtbikKQEAgLTIx
MjAsOCArMjA4Niw3IEBAIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2Vz
SW5pdEZ1bmN0aW9uc1tdID0gewogICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a190ZXh0X2lu
dGVyZmFjZV9pbml0LAogICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCiAgICAg
e3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlQ29t
cG9uZW50SW50ZXJmYWNlSW5pdCksIDAsIDB9LAotICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0
a19pbWFnZV9pbnRlcmZhY2VfaW5pdCwKLSAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAs
IDB9LAorICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNj
ZXNzaWJsZUltYWdlSW50ZXJmYWNlSW5pdCksIDAsIDB9LAogICAgIHsoR0ludGVyZmFjZUluaXRG
dW5jKWF0a190YWJsZV9pbnRlcmZhY2VfaW5pdCwKICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1
bmMpIDAsIDB9LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Vi
a2l0QWNjZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUluaXQpLCAwLCAwfSwK
</data>
<flag name="review"
          id="124565"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123492</attachid>
            <date>2012-01-22 11:12:41 -0800</date>
            <delta_ts>2012-01-23 10:11:07 -0800</delta_ts>
            <desc>12. New files for the implementation of the AtkSelection interface</desc>
            <filename>bug-76783-20120122201239.patch</filename>
            <type>text/plain</type>
            <size>23840</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRlYTM4ZTVhMzBkNzQ2
MzhiNzZjMTFmYmIxMWU5NzQ3NzA2YzA0NS4uM2EwMjdmZDNlYmNlZTRmNDAzZDc0ODkxMmJhNWYz
OWUyMzMyODI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDM4IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a1NlbGVjdGlvbiBpbnRlcmZhY2UsCisgICAgICAgIGNvbnRhaW5p
bmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKGNvcmUpOgorICAgICAgICAobGlzdE9iamVj
dEZvclNlbGVjdGlvbik6CisgICAgICAgIChvcHRpb25Gcm9tTGlzdCk6CisgICAgICAgIChvcHRp
b25Gcm9tU2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25JbnRl
cmZhY2VJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25BZGRTZWxlY3Rp
b24pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKToK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25SZWZTZWxlY3Rpb24pOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkdldFNlbGVjdGlvbkNvdW50KToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25Jc0NoaWxkU2VsZWN0ZWQpOgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlU2VsZWN0aW9uU2VsZWN0QWxsU2VsZWN0aW9uKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmg6IEFkZGVkLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNw
cDogUmVtb3ZlIGNvZGUKKyAgICAgICAgcmVsYXRlZCB0byB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIEF0a1NlbGVjdGlvbiBpbnRlcmZhY2UuCisKKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBi
dWlsZCBmaWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBXZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLltofGNwcF0uCisgICAgICAgICogV2ViQ29yZS5n
eXBpOiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0
aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBBdGtJbWFnZSBpbnRlcmZhY2UsCiAgICAgICAgIGNvbnRhaW5pbmcgdGhlIHJlbGF0ZWQgY29k
ZSBmcm9tIFdlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcC4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggMWY5MGUwMzNkNmViY2I0NmQyNjU4MjMxMDgxMTkxNTg3YjM2MjQ1
YS4uZmIzNWE0MGU2MDhiMzkzMTZlYWU1ZjRkYjNhNDc0MzU5NmM4NjBiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NDM4LDYgKzQ0MzgsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VIeXBlcnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmggXAorCVNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCBcCiAJU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCAzMDMwNzFkNjg4OGNlNmQzNGFlYjRiZmIwMTNlNmEwODkxOGNjZjk1Li45
MzQ4MjI2MDAyOWJjMTNhYWVkODIyNzI4YWRkOGVlY2ZmZWIxOWI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0xNzgyLDYgKzE3ODIsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuaCcsCiAgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcCcsCiAgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmgn
LAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VTZWxlY3Rpb24uY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM1MGU3ZmFlYTgxMTAz
MmI3ZWIyNjBhNzNjZjE5YjQ4NjVmNDE0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24u
Y3BwCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBM
dGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxh
IGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmgi
CisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZShBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBpZiAoIVdFQktJVF9JU19B
Q0NFU1NJQkxFKHNlbGVjdGlvbikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHdl
YmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKHNl
bGVjdGlvbikpOworfQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9iamVjdEZv
clNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworCisgICAgLy8gT25seSBs
aXN0IGJveGVzIGFuZCBtZW51IGxpc3RzIHN1cHBvcnRlZCBzbyBmYXIuCisgICAgaWYgKCFjb3Jl
U2VsZWN0aW9uLT5pc0xpc3RCb3goKSAmJiAhY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZvciBsaXN0IGJveGVzIHRoZSBsaXN0IG9iamVj
dCBpcyBqdXN0IGl0c2VsZi4KKyAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpCisg
ICAgICAgIHJldHVybiBjb3JlU2VsZWN0aW9uOworCisgICAgLy8gRm9yIG1lbnUgbGlzdHMgd2Ug
bmVlZCB0byByZXR1cm4gdGhlIGZpcnN0IGFjY2Vzc2libGUgY2hpbGQsCisgICAgLy8gd2l0aCBy
b2xlIE1lbnVMaXN0UG9wdXBSb2xlLCBzaW5jZSB0aGF0J3MgdGhlIG9uZSBob2xkaW5nIHRoZSBs
aXN0CisgICAgLy8gb2YgaXRlbXMgd2l0aCByb2xlIE1lbnVMaXN0T3B0aW9uUm9sZS4KKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4g
PSBjb3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOworICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPYmplY3Qg
PSBjaGlsZHJlbi5hdCgwKS5nZXQoKTsKKyAgICBpZiAoIWxpc3RPYmplY3QtPmlzTWVudUxpc3RQ
b3B1cCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBsaXN0T2JqZWN0OworfQor
CitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbUxpc3QoQXRrU2VsZWN0aW9u
KiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwg
aW5kZXggPCAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE5lZWQgdG8gc2VsZWN0IHRo
ZSBwcm9wZXIgbGlzdCBvYmplY3QgZGVwZW5kaW5nIG9uIHRoZSB0eXBlLgorICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGxpc3RPYmplY3QgPSBsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKHNlbGVjdGlv
bik7CisgICAgaWYgKCFsaXN0T2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBvcHRpb25zID0gbGlz
dE9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoaW5kZXggPCBzdGF0aWNfY2FzdDxnaW50Pihv
cHRpb25zLnNpemUoKSkpCisgICAgICAgIHJldHVybiBvcHRpb25zLmF0KGluZGV4KS5nZXQoKTsK
KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9u
RnJvbVNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbmRleCkKK3sKKyAg
ICAvLyBpIGlzIHRoZSBpdGggc2VsZWN0aW9uIGFzIG9wcG9zZWQgdG8gdGhlIGl0aCBjaGlsZC4K
KworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlv
bik7CisgICAgaWYgKCFjb3JlU2VsZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSB8fCBpbmRleCA8IDApCisgICAgICAgIHJldHVybiAwOworCisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVj
dGVkSXRlbXM7CisgICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKQorICAgICAgICBj
b3JlU2VsZWN0aW9uLT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkSXRlbXMpOworICAgIGVsc2Ug
aWYgKGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkgeworICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gY29yZVNlbGVjdGlvbi0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5k
ZXJlcikKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50
KiBzZWxlY3ROb2RlID0gdG9IVE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKKyAg
ICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3ROb2RlLT5zZWxlY3RlZEluZGV4KCk7Cisg
ICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IHNlbGVjdE5vZGUt
Pmxpc3RJdGVtcygpOworCisgICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgMCB8fCBzZWxlY3Rl
ZEluZGV4ID49IHN0YXRpY19jYXN0PGludD4obGlzdEl0ZW1zLnNpemUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gb3B0aW9uRnJvbUxpc3Qoc2VsZWN0aW9uLCBz
ZWxlY3RlZEluZGV4KTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXggPCBzdGF0aWNfY2FzdDxnaW50
PihzZWxlY3RlZEl0ZW1zLnNpemUoKSkpCisgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLmF0
KGluZGV4KS5nZXQoKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25JbnRlcmZhY2VJbml0KEF0a1NlbGVjdGlvbklmYWNlKiBpZmFjZSkKK3sKKyAg
ICBpZmFjZS0+YWRkX3NlbGVjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25BZGRTZWxl
Y3Rpb247CisgICAgaWZhY2UtPmNsZWFyX3NlbGVjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVTZWxl
Y3Rpb25DbGVhclNlbGVjdGlvbjsKKyAgICBpZmFjZS0+cmVmX3NlbGVjdGlvbiA9IHdlYmtpdEFj
Y2Vzc2libGVTZWxlY3Rpb25SZWZTZWxlY3Rpb247CisgICAgaWZhY2UtPmdldF9zZWxlY3Rpb25f
Y291bnQgPSB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uR2V0U2VsZWN0aW9uQ291bnQ7CisgICAg
aWZhY2UtPmlzX2NoaWxkX3NlbGVjdGVkID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbklzQ2hp
bGRTZWxlY3RlZDsKKyAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25SZW1vdmVTZWxlY3Rpb247CisgICAgaWZhY2UtPnNlbGVjdF9hbGxfc2VsZWN0
aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblNlbGVjdEFsbFNlbGVjdGlvbjsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkFkZFNlbGVjdGlvbihBdGtTZWxlY3Rp
b24qIHNlbGVjdGlvbiwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworICAgIGlmICghY29yZVNlbGVjdGlvbikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9u
ID0gb3B0aW9uRnJvbUxpc3Qoc2VsZWN0aW9uLCBpbmRleCk7CisgICAgaWYgKG9wdGlvbiAmJiAo
Y29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgp
KSkgeworICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKHRydWUpOworICAgICAgICByZXR1cm4g
b3B0aW9uLT5pc1NlbGVjdGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitn
Ym9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQ2xlYXJTZWxlY3Rpb24oQXRrU2VsZWN0
aW9uKiBzZWxlY3Rpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlv
biA9IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOworICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RC
b3goKSB8fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpIHsKKyAgICAgICAgLy8gU2V0IHRo
ZSBsaXN0IG9mIHNlbGVjdGVkIGl0ZW1zIHRvIGFuIGVtcHR5IGxpc3Q7IHRoZW4gdmVyaWZ5IHRo
YXQgaXQgd29ya2VkLgorICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveCogbGlzdEJveCA9IHN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4oY29yZVNlbGVjdGlvbik7CisgICAgICAg
IGxpc3RCb3gtPnNldFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgICAgIGxp
c3RCb3gtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgICAgIHJldHVybiAh
c2VsZWN0ZWRJdGVtcy5zaXplKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworQXRr
T2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uUmVmU2VsZWN0aW9uKEF0a1NlbGVjdGlv
biogc2VsZWN0aW9uLCBnaW50IGluZGV4KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9w
dGlvbiA9IG9wdGlvbkZyb21TZWxlY3Rpb24oc2VsZWN0aW9uLCBpbmRleCk7CisgICAgaWYgKG9w
dGlvbikgeworICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gb3B0aW9uLT53cmFwcGVyKCk7Cisg
ICAgICAgIGdfb2JqZWN0X3JlZihjaGlsZCk7CisgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uR2V0
U2VsZWN0aW9uQ291bnQoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNv
cmVTZWxlY3Rpb24gfHwgIWNvcmVTZWxlY3Rpb24tPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RC
b3goKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKKyAgICAgICAgY29yZVNlbGVjdGlvbi0+c2VsZWN0ZWRD
aGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdpbnQ+
KHNlbGVjdGVkSXRlbXMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBpZiAoY29yZVNlbGVjdGlvbi0+
aXNNZW51TGlzdCgpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlU2Vs
ZWN0aW9uLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSB0b0hUTUxTZWxlY3RFbGVt
ZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5zZWxlY3RlZEluZGV4KCk7CisgICAgICAgIHJldHVybiBz
ZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRleCA8IHN0YXRpY19jYXN0PGludD4odG9I
VE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgpKS0+bGlzdEl0ZW1zKCkuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNl
bGVjdGlvbklzQ2hpbGRTZWxlY3RlZChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbmRl
eCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxl
Y3Rpb24pOworICAgIGlmICghY29yZVNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb24gPSBvcHRpb25Gcm9tTGlzdChzZWxlY3Rpb24s
IGluZGV4KTsKKyAgICBpZiAob3B0aW9uICYmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8
fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpKQorICAgICAgICByZXR1cm4gb3B0aW9uLT5p
c1NlbGVjdGVkKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2dib29sZWFuIHdlYmtpdEFj
Y2Vzc2libGVTZWxlY3Rpb25SZW1vdmVTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24s
IGdpbnQgaW5kZXgpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9
IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGdldHRpbmcgY2FsbGVkIGlmIGkgPT0g
MC4gV2hhdCBpcyBwcmV2ZW50aW5nIHRoZSByZXN0PworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9wdGlvbiA9IG9wdGlvbkZyb21TZWxlY3Rpb24oc2VsZWN0aW9uLCBpbmRleCk7CisgICAgaWYg
KG9wdGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+
aXNNZW51TGlzdCgpKSkgeworICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuICFvcHRpb24tPmlzU2VsZWN0ZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25TZWxlY3RBbGxT
ZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxl
Y3Rpb24gfHwgIWNvcmVTZWxlY3Rpb24tPmlzTXVsdGlTZWxlY3RhYmxlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7CisgICAgaWYg
KGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0
Qm94KiBsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3gqPihjb3JlU2Vs
ZWN0aW9uKTsKKyAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGlsZHJlbihjaGlsZHJlbik7
CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBzZWxlY3RlZEl0ZW1zOworICAgICAgICBsaXN0Qm94LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVj
dGVkSXRlbXMpOworICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zaXplKCkgPT0gY2hpbGRy
ZW4uc2l6ZSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWQxNDI4YzI5YTQwYmY3ZmJh
MmM5NDhiYmJkNzRhNzc0NTkyZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5oCkBA
IC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2Vs
ZWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbl9oCisK
KyNpbmNsdWRlIDxhdGsvYXRrLmg+CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbklu
dGVyZmFjZUluaXQoQXRrU2VsZWN0aW9uSWZhY2UqKTsKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25BZGRTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiwgZ2ludCBpbmRleCk7CitnYm9v
bGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQ2xlYXJTZWxlY3Rpb24oQXRrU2VsZWN0aW9u
Kik7CitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25SZWZTZWxlY3Rpb24oQXRr
U2VsZWN0aW9uKiwgZ2ludCBpbmRleCk7CitnaW50IHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25H
ZXRTZWxlY3Rpb25Db3VudChBdGtTZWxlY3Rpb24qKTsKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25Jc0NoaWxkU2VsZWN0ZWQoQXRrU2VsZWN0aW9uKiwgZ2ludCBpbmRleCk7Citn
Ym9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uUmVtb3ZlU2VsZWN0aW9uKEF0a1NlbGVj
dGlvbiosIGdpbnQgaW5kZXgpOworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblNl
bGVjdEFsbFNlbGVjdGlvbihBdGtTZWxlY3Rpb24qKTsKKworI2VuZGlmIC8vIFdlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VTZWxlY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmlu
ZGV4IDkxMjhkNWQxNjQzMTBkYzZmMzFlNDNkYTk1NmJhNTAzMDZmNzViYzUuLjI1M2U5M2NlN2Rj
MzAyNWZmNmJlMjI1OTM0MWYyOGY1ZDljNTk4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0
ay5jcHAKQEAgLTcwLDYgKzcwLDcgQEAKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlSHlwZXJsaW5rSW1wbC5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VI
eXBlcnRleHQuaCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCIK
KyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2lu
Y2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTExNCwxMSArMTE1LDYgQEAgc3RhdGljIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmUoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIGNvcmUo
V0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIHJldHVybiBjb3JlKEFU
S19PQkpFQ1Qoc2VsZWN0aW9uKSk7Ci19Ci0KIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlKEF0a1RleHQqIHRleHQpCiB7CiAgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVCh0ZXh0KSk7
CkBAIC04MzEsMjEwICs4MjcsNiBAQCB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfdHlwZSh2b2lkKQog
ICAgIHJldHVybiB0eXBlX3ZvbGF0aWxlOwogfQogCi0vLyBTZWxlY3Rpb24gKGZvciBjb250cm9s
cykKLQotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPYmplY3RGb3JTZWxlY3Rpb24o
QXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLQotICAgIC8vIE9ubHkgbGlzdCBib3hlcyBh
bmQgbWVudSBsaXN0cyBzdXBwb3J0ZWQgc28gZmFyLgotICAgIGlmICghY29yZVNlbGVjdGlvbi0+
aXNMaXN0Qm94KCkgJiYgIWNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAvLyBGb3IgbGlzdCBib3hlcyB0aGUgbGlzdCBvYmplY3QgaXMganVzdCBp
dHNlbGYuCi0gICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKQotICAgICAgICByZXR1
cm4gY29yZVNlbGVjdGlvbjsKLQotICAgIC8vIEZvciBtZW51IGxpc3RzIHdlIG5lZWQgdG8gcmV0
dXJuIHRoZSBmaXJzdCBhY2Nlc3NpYmxlIGNoaWxkLAotICAgIC8vIHdpdGggcm9sZSBNZW51TGlz
dFBvcHVwUm9sZSwgc2luY2UgdGhhdCdzIHRoZSBvbmUgaG9sZGluZyB0aGUgbGlzdAotICAgIC8v
IG9mIGl0ZW1zIHdpdGggcm9sZSBNZW51TGlzdE9wdGlvblJvbGUuCi0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gY29yZVNlbGVj
dGlvbi0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T2JqZWN0ID0gY2hpbGRyZW4u
YXQoMCkuZ2V0KCk7Ci0gICAgaWYgKCFsaXN0T2JqZWN0LT5pc01lbnVMaXN0UG9wdXAoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbGlzdE9iamVjdDsKLX0KLQotc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbkZyb21MaXN0KEF0a1NlbGVjdGlvbiogc2VsZWN0aW9u
LCBnaW50IGkpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNv
cmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwgaSA8IDApCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgLy8gTmVlZCB0byBzZWxlY3QgdGhlIHByb3BlciBsaXN0IG9iamVj
dCBkZXBlbmRpbmcgb24gdGhlIHR5cGUuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9i
amVjdCA9IGxpc3RPYmplY3RGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAgICBpZiAoIWxpc3RP
YmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG9wdGlvbnMgPSBsaXN0T2JqZWN0LT5jaGlsZHJlbigp
OwotICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4ob3B0aW9ucy5zaXplKCkpKQotICAgICAg
ICByZXR1cm4gb3B0aW9ucy5hdChpKS5nZXQoKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbVNlbGVjdGlvbihBdGtTZWxlY3Rpb24q
IHNlbGVjdGlvbiwgZ2ludCBpKQotewotICAgIC8vIGkgaXMgdGhlIGl0aCBzZWxlY3Rpb24gYXMg
b3Bwb3NlZCB0byB0aGUgaXRoIGNoaWxkLgotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwg
IWNvcmVTZWxlY3Rpb24tPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpIHx8IGkgPCAwKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOwotICAgIGlmIChjb3JlU2VsZWN0aW9uLT5p
c0xpc3RCb3goKSkKLSAgICAgICAgY29yZVNlbGVjdGlvbi0+c2VsZWN0ZWRDaGlsZHJlbihzZWxl
Y3RlZEl0ZW1zKTsKLSAgICBlbHNlIGlmIChjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVTZWxlY3Rpb24tPnJlbmRlcmVy
KCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAg
ICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0Tm9kZSA9IHRvSFRNTFNlbGVjdEVsZW1lbnQo
cmVuZGVyZXItPm5vZGUoKSk7Ci0gICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gc2VsZWN0Tm9k
ZS0+c2VsZWN0ZWRJbmRleCgpOwotICAgICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiBs
aXN0SXRlbXMgPSBzZWxlY3ROb2RlLT5saXN0SXRlbXMoKTsKLQotICAgICAgICBpZiAoc2VsZWN0
ZWRJbmRleCA8IDAgfHwgc2VsZWN0ZWRJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJdGVt
cy5zaXplKCkpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIG9wdGlv
bkZyb21MaXN0KHNlbGVjdGlvbiwgc2VsZWN0ZWRJbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKGkg
PCBzdGF0aWNfY2FzdDxnaW50PihzZWxlY3RlZEl0ZW1zLnNpemUoKSkpCi0gICAgICAgIHJldHVy
biBzZWxlY3RlZEl0ZW1zLmF0KGkpLmdldCgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fYWRkX3NlbGVjdGlvbihBdGtT
ZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2VsZWN0aW9u
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRp
b24gPSBvcHRpb25Gcm9tTGlzdChzZWxlY3Rpb24sIGkpOwotICAgIGlmIChvcHRpb24gJiYgKGNv
cmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkp
IHsKLSAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3RlZCh0cnVlKTsKLSAgICAgICAgcmV0dXJuIG9w
dGlvbi0+aXNTZWxlY3RlZCgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9jbGVhcl9zZWxlY3Rpb24o
QXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOwotICAgIGlmIChjb3JlU2VsZWN0aW9u
LT5pc0xpc3RCb3goKSB8fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpIHsKLSAgICAgICAg
Ly8gU2V0IHRoZSBsaXN0IG9mIHNlbGVjdGVkIGl0ZW1zIHRvIGFuIGVtcHR5IGxpc3Q7IHRoZW4g
dmVyaWZ5IHRoYXQgaXQgd29ya2VkLgotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveCogbGlz
dEJveCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4oY29yZVNlbGVjdGlvbik7
Ci0gICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7Ci0g
ICAgICAgIGxpc3RCb3gtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7Ci0gICAgICAg
IHJldHVybiAhc2VsZWN0ZWRJdGVtcy5zaXplKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX3JlZl9z
ZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKLXsKLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvcHRpb24gPSBvcHRpb25Gcm9tU2VsZWN0aW9uKHNlbGVjdGlvbiwgaSk7
Ci0gICAgaWYgKG9wdGlvbikgewotICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gb3B0aW9uLT53
cmFwcGVyKCk7Ci0gICAgICAgIGdfb2JqZWN0X3JlZihjaGlsZCk7Ci0gICAgICAgIHJldHVybiBj
aGlsZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2Fj
Y2Vzc2libGVfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQoQXRrU2VsZWN0aW9uKiBzZWxl
Y3Rpb24pCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUo
c2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwgIWNvcmVTZWxlY3Rpb24tPmlz
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKLSAgICAgICAg
Y29yZVNlbGVjdGlvbi0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGdpbnQ+KHNlbGVjdGVkSXRlbXMuc2l6ZSgpKTsKLSAgICB9Ci0K
LSAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKSB7Ci0gICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBjb3JlU2VsZWN0aW9uLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAo
IXJlbmRlcmVyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaW50IHNlbGVjdGVk
SW5kZXggPSB0b0hUTUxTZWxlY3RFbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpLT5zZWxlY3RlZElu
ZGV4KCk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRl
eCA8IHN0YXRpY19jYXN0PGludD4odG9IVE1MU2VsZWN0RWxlbWVudChyZW5kZXJlci0+bm9kZSgp
KS0+bGlzdEl0ZW1zKCkuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3Rl
ZChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpKQotewotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2Vs
ZWN0aW9uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9w
dGlvbiA9IG9wdGlvbkZyb21MaXN0KHNlbGVjdGlvbiwgaSk7Ci0gICAgaWYgKG9wdGlvbiAmJiAo
Y29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgp
KSkKLSAgICAgICAgcmV0dXJuIG9wdGlvbi0+aXNTZWxlY3RlZCgpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX3Jl
bW92ZV9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKLXsKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAg
IGlmICghY29yZVNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUT0RPOiBU
aGlzIGlzIG9ubHkgZ2V0dGluZyBjYWxsZWQgaWYgaSA9PSAwLiBXaGF0IGlzIHByZXZlbnRpbmcg
dGhlIHJlc3Q/Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbVNl
bGVjdGlvbihzZWxlY3Rpb24sIGkpOwotICAgIGlmIChvcHRpb24gJiYgKGNvcmVTZWxlY3Rpb24t
PmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkpIHsKLSAgICAgICAg
b3B0aW9uLT5zZXRTZWxlY3RlZChmYWxzZSk7Ci0gICAgICAgIHJldHVybiAhb3B0aW9uLT5pc1Nl
bGVjdGVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX3NlbGVjdF9hbGxfc2VsZWN0aW9uKEF0a1Nl
bGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxl
Y3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2VsZWN0aW9uIHx8ICFjb3Jl
U2VsZWN0aW9uLT5pc011bHRpU2VsZWN0YWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hp
bGRyZW4gPSBjb3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOwotICAgIGlmIChjb3JlU2VsZWN0aW9u
LT5pc0xpc3RCb3goKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveCogbGlzdEJveCA9
IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4oY29yZVNlbGVjdGlvbik7Ci0gICAg
ICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkQ2hpbGRyZW4oY2hpbGRyZW4pOwotICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVt
czsKLSAgICAgICAgbGlzdEJveC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKLSAg
ICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IGNoaWxkcmVuLnNpemUoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a19zZWxlY3Rpb25f
aW50ZXJmYWNlX2luaXQoQXRrU2VsZWN0aW9uSWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5h
ZGRfc2VsZWN0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2FkZF9zZWxlY3Rpb247
Ci0gICAgaWZhY2UtPmNsZWFyX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlv
bl9jbGVhcl9zZWxlY3Rpb247Ci0gICAgaWZhY2UtPnJlZl9zZWxlY3Rpb24gPSB3ZWJraXRfYWNj
ZXNzaWJsZV9zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+Z2V0X3NlbGVjdGlv
bl9jb3VudCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX2NvdW50
OwotICAgIGlmYWNlLT5pc19jaGlsZF9zZWxlY3RlZCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVj
dGlvbl9pc19jaGlsZF9zZWxlY3RlZDsKLSAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZW1vdmVfc2VsZWN0aW9uOwotICAgIGlmYWNlLT5z
ZWxlY3RfYWxsX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9zZWxlY3Rf
YWxsX3NlbGVjdGlvbjsKLX0KLQogLy8gVGV4dAogCiBzdGF0aWMgZ2NoYXIqIHV0ZjhTdWJzdHIo
Y29uc3QgZ2NoYXIqIHN0cmluZywgZ2ludCBzdGFydCwgZ2ludCBlbmQpCkBAIC0yMDgwLDggKzE4
NzIsNyBAQCBzdGF0aWMgdm9pZCBhdGtWYWx1ZUludGVyZmFjZUluaXQoQXRrVmFsdWVJZmFjZSog
aWZhY2UpCiAKIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1
bmN0aW9uc1tdID0gewogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4o
d2Via2l0QWNjZXNzaWJsZUFjdGlvbkludGVyZmFjZUluaXQpLCAwLCAwfSwKLSAgICB7KEdJbnRl
cmZhY2VJbml0RnVuYylhdGtfc2VsZWN0aW9uX2ludGVyZmFjZV9pbml0LAotICAgICAoR0ludGVy
ZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFj
ZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uSW50ZXJmYWNlSW5pdCksIDAsIDB9
LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNz
aWJsZUVkaXRhYmxlVGV4dEludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7KEdJbnRlcmZhY2VJ
bml0RnVuYylhdGtfdGV4dF9pbnRlcmZhY2VfaW5pdCwKICAgICAgKEdJbnRlcmZhY2VGaW5hbGl6
ZUZ1bmMpIDAsIDB9LAo=
</data>
<flag name="review"
          id="124566"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123493</attachid>
            <date>2012-01-22 11:14:08 -0800</date>
            <delta_ts>2012-01-24 05:54:14 -0800</delta_ts>
            <desc>13. New files for the implementation of the AtkText interface</desc>
            <filename>bug-76783-20120122201406.patch</filename>
            <type>text/plain</type>
            <size>79106</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2EwMjdmZDNlYmNlZTRm
NDAzZDc0ODkxMmJhNWYzOWUyMzMyODI5Yy4uMzk3ZjUzN2FlZGZiMjYyMmE4OWExMDM1MzQwYmU2
YjQ2MTEwMjk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDczIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNlLAorICAgICAgICBjb250YWluaW5nIHRo
ZSByZWxhdGVkIGNvZGUgZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5j
cHA6IEFkZGVkLgorICAgICAgICAoY29yZSk6CisgICAgICAgICh1dGY4U3Vic3RyKToKKyAgICAg
ICAgKGNvbnZlcnRVbmlDaGFyVG9VVEY4KToKKyAgICAgICAgKHRleHRGb3JSZW5kZXJlcik6Cisg
ICAgICAgICh0ZXh0Rm9yT2JqZWN0KToKKyAgICAgICAgKGdldEdhaWxUZXh0VXRpbEZvckF0ayk6
CisgICAgICAgIChnZXRQYW5nb0xheW91dEZvckF0ayk6CisgICAgICAgIChiYXNlbGluZVBvc2l0
aW9uRm9yUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2li
aWxpdHlPYmplY3QpOgorICAgICAgICAoY29tcGFyZUF0dHJpYnV0ZSk6CisgICAgICAgIChhdHRy
aWJ1dGVTZXREaWZmZXJlbmNlKToKKyAgICAgICAgKGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgp
OgorICAgICAgICAoZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldCk6CisgICAgICAgIChn
ZXRSdW5BdHRyaWJ1dGVzRnJvbUFjY2VzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICh0ZXh0RXh0
ZW50cyk6CisgICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KToKKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVUZXh0SW50ZXJmYWNlSW5pdCk6CisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0
QWZ0ZXJPZmZzZXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QXRPZmZz
ZXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0KToK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQXRPZmZzZXQpOgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDYXJldE9mZnNldCk6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFJ1bkF0dHJpYnV0ZXMpOgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRleHRHZXREZWZhdWx0QXR0cmlidXRlcyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldENoYXJhY3RlckV4dGVudHMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRSYW5nZUV4dGVudHMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0
ZXJDb3VudCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQp
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyk6CisgICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFNlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGV4dEFkZFNlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFJl
bW92ZVNlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlv
bik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oOiBB
ZGRlZC4KKworICAgICAgICBNb3ZlIGNvbW1vbiBmdW5jdGlvbiBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3Qgb3V0IGZyb20gdGhlIHdyYXBwZXIKKyAgICAgICAgdG8gdGhlIHV0aWxpdHkgZmlsZSwg
dXNlZCBmcm9tIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHA6CisgICAgICAg
IChzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QpOiBUYWtlbiBmcm9tIFdlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcDogUmVtb3ZlIGxvY2FsCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHNl
bGVjdGlvbkJlbG9uZ3NUb09iamVjdCwgYW5kIHRoZSBjb2RlIHJlbGF0ZWQKKyAgICAgICAgdG8g
dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtEb2N1bWVudCBpbnRlcmZhY2UuCisgICAgICAg
ICh3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZSk6IFVwZGF0ZSBjYWxsIHRvIHRoZSBmb3JtZXIg
ZnVuY3Rpb24KKyAgICAgICAgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCBhbmQgdXNl
IHRoZSBuZXcgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxl
X2dldF9jb2x1bW5fZGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9hY2Nlc3Np
YmxlX3RhYmxlX2dldF9yb3dfZGVzY3JpcHRpb24pOiBEaXR0by4KKworICAgICAgICBBZGQgbmV3
IGZpbGVzIHRvIGJ1aWxkIGZpbGVzLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTog
QWRkIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LltofGNwcF0uCisgICAgICAgICogV2Vi
Q29yZS5neXBpOiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1z
YW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0b3IgR1RLJ3MgYWNjZXNz
aWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9u
IG9mIHRoZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlLAogICAgICAgICBjb250YWluaW5nIHRoZSBy
ZWxhdGVkIGNvZGUgZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAuCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGZiMzVhNDBlNjA4YjM5MzE2ZWFlNWY0ZGIzYTQ3
NDM1OTZjODYwYjEuLjI1ZTZhZjNlMzkzNzE4YTUzZWYzY2VmMzdiZGRjM2RjODUyMTU0ZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDQ0MCw2ICs0NDQwLDggQEAgd2ViY29y
ZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxl
Y3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRleHQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmggXAogCVNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggOTM0ODIyNjAwMjliYzEzYWFlZDgyMjcyOGFkZDhlZWNmZmViMTli
OC4uM2I1ZjgxYjBlZjU5N2U5YjczNDA4MTJkYTZmZGZkMDIzMTdlYWFjOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMTc4NCw2ICsxNzg0LDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCcsCiAgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAnLAogICAg
ICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxl
Y3Rpb24uaCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGNlNDcyMjM4N2E5NjE4MDMyNWI1ZWNmNTFi
NzJjYjNkYjBiM2Y4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtMCwwICsxLDg0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5
cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9y
ZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRp
YWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuaCIKKworI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkdPd25QdHIuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93Lmgi
CisjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2Vy
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgor
I2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGls
LmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKyNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgorCisjaW5jbHVkZSA8bGliZ2FpbC11dGlsL2dhaWwtdXRpbC5oPgorI2lu
Y2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0KQoreworICAgIGlmICgh
V0VCS0lUX0lTX0FDQ0VTU0lCTEUodGV4dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJ
QkxFKHRleHQpKTsKK30KKworc3RhdGljIGdjaGFyKiB1dGY4U3Vic3RyKGNvbnN0IGdjaGFyKiBz
dHJpbmcsIGdpbnQgc3RhcnQsIGdpbnQgZW5kKQoreworICAgIEFTU0VSVChzdHJpbmcpOworICAg
IGdsb25nIHN0ckxlbiA9IGdfdXRmOF9zdHJsZW4oc3RyaW5nLCAtMSk7CisgICAgaWYgKHN0YXJ0
ID4gc3RyTGVuIHx8IGVuZCA+IHN0ckxlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZ2NoYXIq
IHN0YXJ0UHRyID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgc3RhcnQpOworICAg
IGdzaXplIGxlbkluQnl0ZXMgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIoc3RyaW5nLCBlbmQg
KyAxKSAtICBzdGFydFB0cjsKKyAgICBnY2hhciogb3V0cHV0ID0gc3RhdGljX2Nhc3Q8Z2NoYXIq
PihnX21hbGxvYzAobGVuSW5CeXRlcyArIDEpKTsKKyAgICByZXR1cm4gZ191dGY4X3N0cm5jcHko
b3V0cHV0LCBzdGFydFB0ciwgZW5kIC0gc3RhcnQgKyAxKTsKK30KKworLy8gVGhpcyBmdW5jdGlv
biBpcyBub3QgY29tcGxldGVseSBnZW5lcmFsLCBpcyBpdCdzIHRpZWQgdG8gdGhlCisvLyBpbnRl
cm5hbHMgb2YgV2ViQ29yZSdzIHRleHQgcHJlc2VudGF0aW9uLgorc3RhdGljIGdjaGFyKiBjb252
ZXJ0VW5pQ2hhclRvVVRGOChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgZ2ludCBsZW5ndGgsIGlu
dCBmcm9tLCBpbnQgdG8pCit7CisgICAgQ1N0cmluZyBzdHJpbmdVVEY4ID0gVVRGOEVuY29kaW5n
KCkuZW5jb2RlKGNoYXJhY3RlcnMsIGxlbmd0aCwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxl
cyk7CisgICAgZ2NoYXIqIHV0ZjhTdHJpbmcgPSB1dGY4U3Vic3RyKHN0cmluZ1VURjguZGF0YSgp
LCBmcm9tLCB0byk7CisgICAgaWYgKCFnX3V0ZjhfdmFsaWRhdGUodXRmOFN0cmluZywgLTEsIDAp
KSB7CisgICAgICAgIGdfZnJlZSh1dGY4U3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIGdzaXplIGxlbiA9IHN0cmxlbih1dGY4U3RyaW5nKTsKKyAgICBHU3RyaW5nKiByZXQg
PSBnX3N0cmluZ19uZXdfbGVuKDAsIGxlbik7CisgICAgZ2NoYXIqIHB0ciA9IHV0ZjhTdHJpbmc7
CisKKyAgICAvLyBXZWJDb3JlIGludHJvZHVjZXMgbGluZSBicmVha3MgaW4gdGhlIHRleHQgdGhh
dCBkbyBub3QgcmVmbGVjdAorICAgIC8vIHRoZSBsYXlvdXQgeW91IHNlZSBvbiB0aGUgc2NyZWVu
LCByZXBsYWNlIHRoZW0gd2l0aCBzcGFjZXMKKyAgICB3aGlsZSAobGVuID4gMCkgeworICAgICAg
ICBnaW50IGluZGV4LCBzdGFydDsKKyAgICAgICAgcGFuZ29fZmluZF9wYXJhZ3JhcGhfYm91bmRh
cnkocHRyLCBsZW4sICZpbmRleCwgJnN0YXJ0KTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2xl
bihyZXQsIHB0ciwgaW5kZXgpOworICAgICAgICBpZiAoaW5kZXggPT0gc3RhcnQpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MocmV0LCAnICcpOworICAgICAg
ICBwdHIgKz0gc3RhcnQ7CisgICAgICAgIGxlbiAtPSBzdGFydDsKKyAgICB9CisKKyAgICBnX2Zy
ZWUodXRmOFN0cmluZyk7CisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmV0LCBGQUxTRSk7Cit9
CisKK2djaGFyKiB0ZXh0Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAg
ICBHU3RyaW5nKiByZXN1bHRUZXh0ID0gZ19zdHJpbmdfbmV3KDApOworCisgICAgaWYgKCFyZW5k
ZXJlcikKKyAgICAgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0UpOwor
CisgICAgLy8gRm9yIFJlbmRlckJsb2NrcywgcGllY2UgdG9nZXRoZXIgdGhlIHRleHQgZnJvbSB0
aGUgUmVuZGVyVGV4dCBvYmplY3RzIHRoZXkgY29udGFpbi4KKyAgICBmb3IgKFJlbmRlck9iamVj
dCogb2JqZWN0ID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgb2JqZWN0OyBvYmplY3QgPSBvYmpl
Y3QtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNCUigpKSB7CisgICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgIlxuIik7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlclRleHQqIHJlbmRlclRleHQ7Cisg
ICAgICAgIGlmIChvYmplY3QtPmlzVGV4dCgpKQorICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHRv
UmVuZGVyVGV4dChvYmplY3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChvYmpl
Y3QtPmlzUmVwbGFjZWQoKSkKKyAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfdW5pY2hh
cihyZXN1bHRUZXh0LCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcik7CisKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgY2hpbGRyZW4sIGlmIGFueSwgdG8gY29uc2lkZXIgd2hlbgor
ICAgICAgICAgICAgLy8gY3VycmVudCBvYmplY3QgaXMgbm90IGEgdGV4dCBvYmplY3QgYnV0IHNv
bWUgb2YgaXRzCisgICAgICAgICAgICAvLyBjaGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBt
aXNzIHRob3NlIHBvcnRpb25zIG9mCisgICAgICAgICAgICAvLyB0ZXh0IGJ5IG5vdCBwcm9wZXJs
eSBoYW5kbGluZyB0aG9zZSBzaXR1YXRpb25zCisgICAgICAgICAgICBpZiAob2JqZWN0LT5maXJz
dENoaWxkKCkpCisgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIHRl
eHRGb3JSZW5kZXJlcihvYmplY3QpKTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSByZW5kZXJUZXh0ID8gcmVuZGVyVGV4
dC0+Zmlyc3RUZXh0Qm94KCkgOiAwOworICAgICAgICB3aGlsZSAoYm94KSB7CisgICAgICAgICAg
ICBnY2hhciogdGV4dCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJlbmRlclRleHQtPmNoYXJhY3Rl
cnMoKSwgcmVuZGVyVGV4dC0+dGV4dExlbmd0aCgpLCBib3gtPnN0YXJ0KCksIGJveC0+ZW5kKCkp
OworICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIHRleHQpOworICAgICAg
ICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0
ZXh0IGJveGVzLCBzbyBjaGVjaworICAgICAgICAgICAgLy8gYmVmb3JlIGFkZGluZyBhIG5ld2xp
bmUgaW4gdGhlIGxheW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50ICM3OC4KKyAgICAgICAgICAg
IC8vIElmIHRoZSBuZXh0IHNpYmxpbmcgaXMgYSBCUiwgd2UnbGwgYWRkIHRoZSBuZXdsaW5lIHdo
ZW4gd2UgZXhhbWluZSB0aGF0IGNoaWxkLgorCisgICAgICAgICAgICBpZiAoIWJveC0+bmV4dE9u
TGluZUV4aXN0cygpICYmICghb2JqZWN0LT5uZXh0U2libGluZygpIHx8ICFvYmplY3QtPm5leHRT
aWJsaW5nKCktPmlzQlIoKSkpCisgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3Vs
dFRleHQsICJcbiIpOworICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBtYXJrZXIgZm9y
IGxpc3QgaXRlbSBpbiB0aGUgcmlnaHQgcGxhY2UsIGlmIHByZXNlbnQKKyAgICBpZiAocmVuZGVy
ZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVy
TGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBpZiAo
cmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAgIGdfc3Ry
aW5nX3ByZXBlbmQocmVzdWx0VGV4dCwgbWFya2VyVGV4dC51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIG1hcmtlclRl
eHQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVz
dWx0VGV4dCwgRkFMU0UpOworfQorCitnY2hhciogdGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0KQoreworICAgIEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygw
KTsKKworICAgIC8vIEZvciB0ZXh0IGNvbnRyb2xzLCB3ZSBjYW4gZ2V0IHRoZSB0ZXh0IGxpbmUg
YnkgbGluZS4KKyAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKSB7CisgICAgICAg
IHVuc2lnbmVkIHRleHRMZW5ndGggPSBjb3JlT2JqZWN0LT50ZXh0TGVuZ3RoKCk7CisgICAgICAg
IGludCBsaW5lTnVtYmVyID0gMDsKKyAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcmFuZ2UgPSBjb3Jl
T2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICB3aGlsZSAocmFu
Z2UubGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBXaGVuIGEgbGluZSBvZiB0ZXh0IHdyYXBzIGlu
IGEgdGV4dCBhcmVhLCB0aGUgZmluYWwgc3BhY2UgaXMgcmVtb3ZlZC4KKyAgICAgICAgICAgIGlm
IChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCA8IHRleHRMZW5ndGgpCisgICAgICAgICAgICAg
ICAgcmFuZ2UubGVuZ3RoIC09IDE7CisgICAgICAgICAgICBTdHJpbmcgbGluZVRleHQgPSBjb3Jl
T2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgZ19zdHJpbmdf
YXBwZW5kKHN0ciwgbGluZVRleHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBnX3N0cmlu
Z19hcHBlbmQoc3RyLCAiXG4iKTsKKyAgICAgICAgICAgIHJhbmdlID0gY29yZU9iamVjdC0+ZG9B
WFJhbmdlRm9yTGluZSgrK2xpbmVOdW1iZXIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChj
b3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICBHT3du
UHRyPGdjaGFyPiByZW5kZXJlclRleHQodGV4dEZvclJlbmRlcmVyKGNvcmVPYmplY3QtPnJlbmRl
cmVyKCkpKTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgcmVuZGVyZXJUZXh0LmdldCgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKK30KKwor
c3RhdGljIEdhaWxUZXh0VXRpbCogZ2V0R2FpbFRleHRVdGlsRm9yQXRrKEF0a1RleHQqIHRleHRP
YmplY3QpCit7CisgICAgR2FpbFRleHRVdGlsKiBnYWlsVGV4dFV0aWwgPSBnYWlsX3RleHRfdXRp
bF9uZXcoKTsKKyAgICBnYWlsX3RleHRfdXRpbF90ZXh0X3NldHVwKGdhaWxUZXh0VXRpbCwgd2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KHRleHRPYmplY3QsIDAsIC0xKSk7CisgICAgcmV0dXJu
IGdhaWxUZXh0VXRpbDsKK30KKworc3RhdGljIFBhbmdvTGF5b3V0KiBnZXRQYW5nb0xheW91dEZv
ckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QgPSBjb3JlKHRleHRPYmplY3QpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
Y29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC0+dmlldygpLT5o
b3N0V2luZG93KCk7CisgICAgaWYgKCFob3N0V2luZG93KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBQbGF0Zm9ybVBhZ2VDbGllbnQgd2ViVmlldyA9IGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNs
aWVudCgpOworICAgIGlmICghd2ViVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBD
cmVhdGUgYSBzdHJpbmcgd2l0aCB0aGUgbGF5b3V0IGFzIGl0IGFwcGVhcnMgb24gdGhlIHNjcmVl
bgorICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBndGtfd2lkZ2V0X2NyZWF0ZV9wYW5nb19sYXlv
dXQoc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4od2ViVmlldyksIHRleHRGb3JPYmplY3QoY29yZU9i
amVjdCkpOworICAgIHJldHVybiBsYXlvdXQ7Cit9CisKK3N0YXRpYyBpbnQgYmFzZWxpbmVQb3Np
dGlvbkZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCkKK3sKKyAgICAv
LyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlbGluZVBvc2l0aW9uIG9yaWdpbmF0
ZXMgZnJvbSBSZW5kZXJPYmplY3QuY3BwIGFuZCB3YXMKKyAgICAvLyByZW1vdmVkIGluIHI3MDA3
Mi4gVGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGluY29ycmVjdCB0aG91Z2gsIGJlY2F1c2UgdGhp
cyBpcyBub3QgdGhlCisgICAgLy8gYmFzZWxpbmUgb2YgdGhlIHVuZGVybHlpbmcgUmVuZGVyT2Jq
ZWN0LCBidXQgb2YgdGhlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCisgICAgY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyT2JqZWN0LT5maXJzdExpbmVTdHlsZSgpLT5m
b250TWV0cmljcygpOworICAgIHJldHVybiBmb250TWV0cmljcy5hc2NlbnQoKSArIChyZW5kZXJP
YmplY3QtPmZpcnN0TGluZVN0eWxlKCktPmNvbXB1dGVkTGluZUhlaWdodCgpIC0gZm9udE1ldHJp
Y3MuaGVpZ2h0KCkpIC8gMjsKK30KKworc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmli
dXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBvYmpl
Y3QtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CisKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IDA7CisgICAgR093blB0cjxnY2hh
cj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9udFNpemUoKSkpOworICAg
IHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfU0laRSksIGJ1ZmZlci5nZXQoKSk7CisKKyAgICBDb2xvciBi
Z0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CisgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGJ1ZmZlci5z
ZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJnQ29sb3IucmVkKCksIGJnQ29sb3IuZ3JlZW4oKSwgYmdDb2xvci5ibHVlKCkp
KTsKKyAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9h
dHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9CR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7
CisgICAgfQorCisgICAgQ29sb3IgZmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvcik7CisgICAgaWYgKGZnQ29sb3IuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZnQ29sb3IucmVkKCksIGZnQ29sb3IuZ3JlZW4oKSwgZmdD
b2xvci5ibHVlKCkpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0
LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9GR19DT0xPUiksIGJ1
ZmZlci5nZXQoKSk7CisgICAgfQorCisgICAgaW50IGJhc2VsaW5lUG9zaXRpb247CisgICAgYm9v
bCBpbmNsdWRlUmlzZSA9IHRydWU7CisgICAgc3dpdGNoIChzdHlsZS0+dmVydGljYWxBbGlnbigp
KSB7CisgICAgY2FzZSBTVUI6CisgICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAtMSAqIGJhc2Vs
aW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFNVUEVSOgorICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gYmFzZWxpbmVQb3NpdGlv
bkZvclJlbmRlck9iamVjdChyZW5kZXJlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQkFT
RUxJTkU6CisgICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAwOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBpbmNsdWRlUmlzZSA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAoaW5jbHVkZVJpc2UpIHsKKyAgICAgICAgYnVmZmVyLnNldChnX3N0
cmR1cF9wcmludGYoIiVpIiwgYmFzZWxpbmVQb3NpdGlvbikpOworICAgICAgICByZXN1bHQgPSBh
ZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtf
VEVYVF9BVFRSX1JJU0UpLCBidWZmZXIuZ2V0KCkpOworICAgIH0KKworICAgIGlmICghc3R5bGUt
PnRleHRJbmRlbnQoKS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGludCBpbmRlbnRhdGlvbiA9
IHN0eWxlLT50ZXh0SW5kZW50KCkuY2FsY1ZhbHVlKG9iamVjdC0+c2l6ZSgpLndpZHRoKCkpOwor
ICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBpbmRlbnRhdGlvbikpOwor
ICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJp
YnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZlci5nZXQoKSk7CisgICAg
fQorCisgICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZvbnQoKS5mYW1pbHkoKS5m
YW1pbHkoKS5zdHJpbmcoKTsKKyAgICBpZiAoZm9udEZhbWlseU5hbWUubGVmdCg4KSA9PSAiLXdl
YmtpdC0iKQorICAgICAgICBmb250RmFtaWx5TmFtZSA9IGZvbnRGYW1pbHlOYW1lLnN1YnN0cmlu
Zyg4KTsKKworICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkFNSUxZX05BTUUpLCBmb250RmFtaWx5
TmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGludCBmb250V2VpZ2h0ID0gLTE7CisgICAgc3dp
dGNoIChzdHlsZS0+Zm9udCgpLndlaWdodCgpKSB7CisgICAgY2FzZSBGb250V2VpZ2h0MTAwOgor
ICAgICAgICBmb250V2VpZ2h0ID0gMTAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRX
ZWlnaHQyMDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSAyMDA7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRm9udFdlaWdodDMwMDoKKyAgICAgICAgZm9udFdlaWdodCA9IDMwMDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250V2VpZ2h0NDAwOgorICAgICAgICBmb250V2VpZ2h0ID0gNDAw
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6CisgICAgICAgIGZvbnRX
ZWlnaHQgPSA1MDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAg
ICAgICAgZm9udFdlaWdodCA9IDYwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250V2Vp
Z2h0NzAwOgorICAgICAgICBmb250V2VpZ2h0ID0gNzAwOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZvbnRXZWlnaHQ4MDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSA4MDA7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRm9udFdlaWdodDkwMDoKKyAgICAgICAgZm9udFdlaWdodCA9IDkwMDsK
KyAgICB9CisgICAgaWYgKGZvbnRXZWlnaHQgPiAwKSB7CisgICAgICAgIGJ1ZmZlci5zZXQoZ19z
dHJkdXBfcHJpbnRmKCIlaSIsIGZvbnRXZWlnaHQpKTsKKyAgICAgICAgcmVzdWx0ID0gYWRkQXR0
cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRf
QVRUUl9XRUlHSFQpLCBidWZmZXIuZ2V0KCkpOworICAgIH0KKworICAgIHN3aXRjaCAoc3R5bGUt
PnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUQUFVVE86CisgICAgY2FzZSBUQVNUQVJUOgorICAg
IGNhc2UgVEFFTkQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTEVGVDoKKyAgICBjYXNlIFdF
QktJVF9MRUZUOgorICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0
a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04pLCAi
bGVmdCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJJR0hUOgorICAgIGNhc2UgV0VCS0lU
X1JJR0hUOgorICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04pLCAicmln
aHQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDRU5URVI6CisgICAgY2FzZSBXRUJLSVRf
Q0VOVEVSOgorICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04pLCAiY2Vu
dGVyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlVTVElGWToKKyAgICAgICAgcmVzdWx0
ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUo
QVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgImZpbGwiKTsKKyAgICB9CisKKyAgICByZXN1
bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShBVEtfVEVYVF9BVFRSX1VOREVSTElORSksIChzdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIFVO
REVSTElORSkgPyAic2luZ2xlIiA6ICJub25lIik7CisKKyAgICByZXN1bHQgPSBhZGRBdHRyaWJ1
dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRS
X1NUWUxFKSwgc3R5bGUtPmZvbnQoKS5pdGFsaWMoKSA/ICJpdGFsaWMiIDogIm5vcm1hbCIpOwor
CisgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1
dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdIKSwgKHN0eWxlLT50ZXh0RGVj
b3JhdGlvbigpICYgTElORV9USFJPVUdIKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisgICAgcmVz
dWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoQVRLX1RFWFRfQVRUUl9JTlZJU0lCTEUpLCAoc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBISURE
RU4pID8gInRydWUiIDogImZhbHNlIik7CisKKyAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1Nl
dChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0VESVRB
QkxFKSwgb2JqZWN0LT5pc1JlYWRPbmx5KCkgPyAiZmFsc2UiIDogInRydWUiKTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnaW50IGNvbXBhcmVBdHRyaWJ1dGUoY29uc3QgQXRr
QXR0cmlidXRlKiBhLCBjb25zdCBBdGtBdHRyaWJ1dGUqIGIpCit7CisgICAgcmV0dXJuIGdfc3Ry
Y21wMChhLT5uYW1lLCBiLT5uYW1lKSB8fCBnX3N0cmNtcDAoYS0+dmFsdWUsIGItPnZhbHVlKTsK
K30KKworLy8gUmV0dXJucyBhbiBBdGtBdHRyaWJ1dGVTZXQgd2l0aCB0aGUgZWxlbWVudHMgb2Yg
YXR0cmlidXRlU2V0MSB3aGljaAorLy8gYXJlIGVpdGhlciBub3QgcHJlc2VudCBvciBkaWZmZXJl
bnQgaW4gYXR0cmlidXRlU2V0Mi4gTmVpdGhlcgorLy8gYXR0cmlidXRlU2V0MSBub3IgYXR0cmli
dXRlU2V0MiBzaG91bGQgYmUgdXNlZCBhZnRlciBjYWxsaW5nIHRoaXMuCitzdGF0aWMgQXRrQXR0
cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXREaWZmZXJlbmNlKEF0a0F0dHJpYnV0ZVNldCogYXR0cmli
dXRlU2V0MSwgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQyKQoreworICAgIGlmICghYXR0
cmlidXRlU2V0MikKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDE7CisKKyAgICBBdGtBdHRy
aWJ1dGVTZXQqIGN1cnJlbnRTZXQgPSBhdHRyaWJ1dGVTZXQxOworICAgIEF0a0F0dHJpYnV0ZVNl
dCogZm91bmQ7CisgICAgQXRrQXR0cmlidXRlU2V0KiB0b0RlbGV0ZSA9IDA7CisKKyAgICB3aGls
ZSAoY3VycmVudFNldCkgeworICAgICAgICBmb3VuZCA9IGdfc2xpc3RfZmluZF9jdXN0b20oYXR0
cmlidXRlU2V0MiwgY3VycmVudFNldC0+ZGF0YSwgKEdDb21wYXJlRnVuYyljb21wYXJlQXR0cmli
dXRlKTsKKyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBBdGtBdHRyaWJ1dGVTZXQq
IG5leHRTZXQgPSBjdXJyZW50U2V0LT5uZXh0OworICAgICAgICAgICAgdG9EZWxldGUgPSBnX3Ns
aXN0X3ByZXBlbmQodG9EZWxldGUsIGN1cnJlbnRTZXQtPmRhdGEpOworICAgICAgICAgICAgYXR0
cmlidXRlU2V0MSA9IGdfc2xpc3RfZGVsZXRlX2xpbmsoYXR0cmlidXRlU2V0MSwgY3VycmVudFNl
dCk7CisgICAgICAgICAgICBjdXJyZW50U2V0ID0gbmV4dFNldDsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBjdXJyZW50U2V0ID0gY3VycmVudFNldC0+bmV4dDsKKyAgICB9CisKKyAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKGF0dHJpYnV0ZVNldDIpOworICAgIGF0a19hdHRyaWJ1dGVf
c2V0X2ZyZWUodG9EZWxldGUpOworICAgIHJldHVybiBhdHRyaWJ1dGVTZXQxOworfQorCitzdGF0
aWMgZ3VpbnQgYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgLy8gTm9uIHJlbmRlciBvYmplY3RzIGFyZSBub3QgdGFrZW4g
aW50byBhY2NvdW50CisgICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZvciB0aG9zZSBvYmplY3RzIGltcGxl
bWVudGluZyB0aGUgQXRrVGV4dCBpbnRlcmZhY2Ugd2UgdXNlIHRoZQorICAgIC8vIHdlbGwga25v
d24gQVBJIHRvIGFsd2F5cyBnZXQgdGhlIHRleHQgaW4gYSBjb25zaXN0ZW50IHdheQorICAgIEF0
a09iamVjdCogYXRrT2JqID0gQVRLX09CSkVDVChvYmplY3QtPndyYXBwZXIoKSk7CisgICAgaWYg
KEFUS19JU19URVhUKGF0a09iaikpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gdGV4dCh3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQVRLX1RFWFQoYXRrT2JqKSwgMCwgLTEpKTsKKyAgICAg
ICAgcmV0dXJuIGdfdXRmOF9zdHJsZW4odGV4dC5nZXQoKSwgLTEpOworICAgIH0KKworICAgIC8v
IEV2ZW4gaWYgd2UgZG9uJ3QgZXhwb3NlIGxpc3QgbWFya2VycyB0byBBc3Npc3RpdmUKKyAgICAv
LyBUZWNobm9sb2dpZXMsIHdlIG5lZWQgdG8gaGF2ZSBhIHdheSB0byBtZWFzdXJlIHRoZWlyIGxl
bmd0aAorICAgIC8vIGZvciB0aG9zZSBjYXNlcyB3aGVuIGl0J3MgbmVlZGVkIHRvIHRha2UgaXQg
aW50byBhY2NvdW50CisgICAgLy8gc2VwYXJhdGVseSAoYXMgaW4gZ2V0QWNjZXNzaWJpbGl0eU9i
amVjdEZvck9mZnNldCkKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5k
ZXJlcigpOworICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0TWFya2VyKCkpIHsK
KyAgICAgICAgUmVuZGVyTGlzdE1hcmtlciogbWFya2VyID0gdG9SZW5kZXJMaXN0TWFya2VyKHJl
bmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIG1hcmtlci0+dGV4dCgpLmxlbmd0aCgpICsgbWFya2Vy
LT5zdWZmaXgoKS5sZW5ndGgoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZz
ZXQoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBndWludCBvZmZzZXQsIGdpbnQq
IHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCit7CisgICAgY29uc3QgQWNjZXNzaWJpbGl0
eU9iamVjdCogcmVzdWx0OworICAgIGd1aW50IGxlbmd0aCA9IGFjY2Vzc2liaWxpdHlPYmplY3RM
ZW5ndGgob2JqZWN0KTsKKyAgICBpZiAobGVuZ3RoID4gb2Zmc2V0KSB7CisgICAgICAgICpzdGFy
dE9mZnNldCA9IDA7CisgICAgICAgICplbmRPZmZzZXQgPSBsZW5ndGg7CisgICAgICAgIHJlc3Vs
dCA9IG9iamVjdDsKKyAgICB9IGVsc2UgeworICAgICAgICAqc3RhcnRPZmZzZXQgPSAtMTsKKyAg
ICAgICAgKmVuZE9mZnNldCA9IC0xOworICAgICAgICByZXN1bHQgPSAwOworICAgIH0KKworICAg
IGlmICghb2JqZWN0LT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOworICAg
IGd1aW50IGN1cnJlbnRPZmZzZXQgPSAwOworICAgIGd1aW50IGNoaWxkUG9zaXRpb24gPSAwOwor
ICAgIHdoaWxlIChjaGlsZCAmJiBjdXJyZW50T2Zmc2V0IDw9IG9mZnNldCkgeworICAgICAgICBn
dWludCBjaGlsZExlbmd0aCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY2hpbGQpOworICAg
ICAgICBjdXJyZW50T2Zmc2V0ID0gY2hpbGRMZW5ndGggKyBjaGlsZFBvc2l0aW9uOworICAgICAg
ICBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkgeworICAgICAgICAgICAgZ2ludCBjaGlsZFN0
YXJ0T2Zmc2V0OworICAgICAgICAgICAgZ2ludCBjaGlsZEVuZE9mZnNldDsKKyAgICAgICAgICAg
IGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGdyYW5kQ2hpbGQgPSBnZXRBY2Nlc3NpYmlsaXR5
T2JqZWN0Rm9yT2Zmc2V0KGNoaWxkLCBvZmZzZXQtY2hpbGRQb3NpdGlvbiwgICZjaGlsZFN0YXJ0
T2Zmc2V0LCAmY2hpbGRFbmRPZmZzZXQpOworICAgICAgICAgICAgaWYgKGNoaWxkU3RhcnRPZmZz
ZXQgPj0gMCkgeworICAgICAgICAgICAgICAgICpzdGFydE9mZnNldCA9IGNoaWxkU3RhcnRPZmZz
ZXQgKyBjaGlsZFBvc2l0aW9uOworICAgICAgICAgICAgICAgICplbmRPZmZzZXQgPSBjaGlsZEVu
ZE9mZnNldCArIGNoaWxkUG9zaXRpb247CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ3JhbmRD
aGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoaWxk
UG9zaXRpb24gKz0gY2hpbGRMZW5ndGg7CisgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldFJ1bkF0dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5T2Jq
ZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGVsZW1lbnQsIGdpbnQgb2Zmc2V0LCBnaW50
KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIGNvbnN0IEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNoaWxkID0gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldChlbGVtZW50
LCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIGlmICghY2hpbGQpIHsKKyAg
ICAgICAgKnN0YXJ0T2Zmc2V0ID0gLTE7CisgICAgICAgICplbmRPZmZzZXQgPSAtMTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQXRrQXR0cmlidXRlU2V0KiBkZWZhdWx0QXR0cmli
dXRlcyA9IGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoZWxlbWVudCk7Cisg
ICAgQXRrQXR0cmlidXRlU2V0KiBjaGlsZEF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVTZXRGb3JB
Y2Nlc3NpYmlsaXR5T2JqZWN0KGNoaWxkKTsKKworICAgIHJldHVybiBhdHRyaWJ1dGVTZXREaWZm
ZXJlbmNlKGNoaWxkQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpOworfQorCitzdGF0aWMg
SW50UmVjdCB0ZXh0RXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50
IGxlbmd0aCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKK3sKKyAgICBnY2hhciogdGV4dENvbnRlbnQg
PSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgc3RhcnRPZmZzZXQsIC0xKTsKKyAg
ICBnaW50IHRleHRMZW5ndGggPSBnX3V0Zjhfc3RybGVuKHRleHRDb250ZW50LCAtMSk7CisKKyAg
ICAvLyBUaGUgZmlyc3QgY2FzZSAoZW5kT2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywgYnV0IHNl
ZW1zIGJyb2tlbiBmb3IgYWxsIEd0aysgYXBwcy4KKyAgICBnaW50IHJhbmdlTGVuZ3RoID0gbGVu
Z3RoOworICAgIGlmIChyYW5nZUxlbmd0aCA8IDAgfHwgcmFuZ2VMZW5ndGggPiB0ZXh0TGVuZ3Ro
KQorICAgICAgICByYW5nZUxlbmd0aCA9IHRleHRMZW5ndGg7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisKKyAgICBJbnRSZWN0IGV4dGVudHMgPSBj
b3JlT2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRPZmZzZXQs
IHJhbmdlTGVuZ3RoKSk7CisgICAgc3dpdGNoIChjb29yZHMpIHsKKyAgICBjYXNlIEFUS19YWV9T
Q1JFRU46CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1
bWVudCgpKQorICAgICAgICAgICAgZXh0ZW50cyA9IGRvY3VtZW50LT52aWV3KCktPmNvbnRlbnRz
VG9TY3JlZW4oZXh0ZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVRLX1hZX1dJTkRP
VzoKKyAgICAgICAgLy8gTm8tb3AKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IGV4dGVudHM7Cit9CisKK3N0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3Qo
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uLCBnaW50JiBzdGFydE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0KQoreworICAgIGlmICghY29y
ZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgc2VsZWN0aW9uIGRvZXNuJ3QgYWZmZWN0IHRo
ZSBzZWxlY3RlZCBub2RlLgorICAgIGlmICghc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNvcmVP
YmplY3QsIHNlbGVjdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIG5lZWQgdG8g
ZmluZCB0aGUgZXhhY3Qgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgaW4gdGhlCisgICAgLy8gc2Vs
ZWN0ZWQgbm9kZSB0aGF0IGludGVyc2VjdHMgdGhlIHNlbGVjdGlvbiwgdG8gbGF0ZXIgb24gZ2V0
CisgICAgLy8gdGhlIHJpZ2h0IHZhbHVlcyBmb3IgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5k
IG9mZnNldHMuCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUG9zaXRpb24gbm9kZVJh
bmdlU3RhcnQ7CisgICAgUG9zaXRpb24gbm9kZVJhbmdlRW5kOworICAgIE5vZGUqIG5vZGUgPSBj
b3JlT2JqZWN0LT5ub2RlKCk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWxSYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOworCisgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3Rz
IHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgZmlyc3QKKyAgICAvLyBwb3NzaWJsZSBwb3NpdGlv
biBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0CisgICAgLy8gbm9kZVJhbmdl
U3RhcnQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncworICAg
IC8vIHN0YXJ0IHBvc2l0aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8gdGhlIG5vZGUgYW55d2F5KS4K
KyAgICBOb2RlKiBmaXJzdExlYWZOb2RlID0gbm9kZS0+Zmlyc3REZXNjZW5kYW50KCk7CisgICAg
aWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShmaXJzdExlYWZOb2RlLCAwLCBlYykpCisgICAg
ICAgIG5vZGVSYW5nZVN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGZpcnN0TGVh
Zk5vZGUpOworICAgIGVsc2UKKyAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBzZWxSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpOworCisgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxl
Y3RlZCBub2RlIGFuZCBpdHMgbGFzdAorICAgIC8vIHBvc3NpYmxlIHBvc2l0aW9uIGlzIGFsc28g
aW4gdGhlIHNlbGVjdGlvbiwgd2UgbXVzdCBzZXQKKyAgICAvLyBub2RlUmFuZ2VFbmQgdG8gdGhh
dCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncworICAgIC8vIGVuZCBwb3Np
dGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCisgICAgTm9kZSogbGFz
dExlYWZOb2RlID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKKyAgICBpZiAoc2VsUmFuZ2UtPmlz
UG9pbnRJblJhbmdlKGxhc3RMZWFmTm9kZSwgbGFzdE9mZnNldEluTm9kZShsYXN0TGVhZk5vZGUp
LCBlYykpCisgICAgICAgIG5vZGVSYW5nZUVuZCA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUo
bGFzdExlYWZOb2RlKTsKKyAgICBlbHNlCisgICAgICAgIG5vZGVSYW5nZUVuZCA9IHNlbFJhbmdl
LT5lbmRQb3NpdGlvbigpOworCisgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIG9mIHRoZSBzZWxl
Y3RlZCByYW5nZSBpbnNpZGUgdGhlIG9iamVjdC4KKyAgICBQb3NpdGlvbiBwYXJlbnRGaXJzdFBv
c2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOworICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2VJblBhcmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgcGFy
ZW50Rmlyc3RQb3NpdGlvbiwgbm9kZVJhbmdlU3RhcnQpOworCisgICAgLy8gU2V0IHZhbHVlcyBm
b3Igc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgorICAgIHN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZUluUGFyZW50LmdldCgpLCB0cnVlKTsKKworICAgIC8vIFdlIG5l
ZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAo
cmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFy
a2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZp
eCgpOworICAgICAgICBzdGFydE9mZnNldCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOworICAgIH0K
KworICAgIFJlZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1
bWVudCgpLCBub2RlUmFuZ2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKKyAgICBlbmRPZmZzZXQgPSBz
dGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLmdldCgpLCB0
cnVlKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQoQXRrVGV4
dElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0X3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldFRleHQ7CisgICAgaWZhY2UtPmdldF90ZXh0X2FmdGVyX29mZnNldCA9IHdlYmtpdEFj
Y2Vzc2libGVUZXh0R2V0VGV4dEFmdGVyT2Zmc2V0OworICAgIGlmYWNlLT5nZXRfdGV4dF9hdF9v
ZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBdE9mZnNldDsKKyAgICBpZmFjZS0+
Z2V0X3RleHRfYmVmb3JlX29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEJlZm9y
ZU9mZnNldDsKKyAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9hdF9vZmZzZXQgPSB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldENoYXJhY3RlckF0T2Zmc2V0OworICAgIGlmYWNlLT5nZXRfY2FyZXRfb2Zm
c2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDYXJldE9mZnNldDsKKyAgICBpZmFjZS0+Z2V0
X3J1bl9hdHRyaWJ1dGVzID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVzOwor
ICAgIGlmYWNlLT5nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXREZWZhdWx0QXR0cmlidXRlczsKKyAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9leHRlbnRzID0g
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJFeHRlbnRzOworICAgIGlmYWNlLT5nZXRf
cmFuZ2VfZXh0ZW50cyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0UmFuZ2VFeHRlbnRzOworICAg
IGlmYWNlLT5nZXRfY2hhcmFjdGVyX2NvdW50ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFy
YWN0ZXJDb3VudDsKKyAgICBpZmFjZS0+Z2V0X29mZnNldF9hdF9wb2ludCA9IHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0T2Zmc2V0QXRQb2ludDsKKyAgICBpZmFjZS0+Z2V0X25fc2VsZWN0aW9ucyA9
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0TlNlbGVjdGlvbnM7CisgICAgaWZhY2UtPmdldF9zZWxl
Y3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFNlbGVjdGlvbjsKKyAgICBpZmFjZS0+YWRk
X3NlbGVjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVUZXh0QWRkU2VsZWN0aW9uOworICAgIGlmYWNl
LT5yZW1vdmVfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRSZW1vdmVTZWxlY3Rpb247
CisgICAgaWZhY2UtPnNldF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVj
dGlvbjsKKyAgICBpZmFjZS0+c2V0X2NhcmV0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0
U2V0Q2FyZXRPZmZzZXQ7Cit9CisKK2djaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQo
QXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpCit7CisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisKKyAgICBpbnQg
ZW5kID0gZW5kT2Zmc2V0OworICAgIGlmIChlbmRPZmZzZXQgPT0gLTEpIHsKKyAgICAgICAgZW5k
ID0gY29yZU9iamVjdC0+c3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFlbmQp
CisgICAgICAgICAgICBlbmQgPSBjb3JlT2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3Ro
KCk7CisgICAgfQorCisgICAgU3RyaW5nIHJldDsKKyAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0
Q29udHJvbCgpKQorICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2Uo
UGxhaW5UZXh0UmFuZ2UoMCwgZW5kT2Zmc2V0KSk7CisgICAgZWxzZSB7CisgICAgICAgIHJldCA9
IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisgICAgICAgIGlmICghcmV0KQorICAgICAgICAg
ICAgcmV0ID0gY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOworICAgIH0KKworICAgIGlm
ICghcmV0Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBhdCBsZWFzdCB3
aXRoIGFub255bW91cyBSZW5kZXJCbG9ja3MgKGUuZy4gYm9keSB0ZXh0IGFtb25nc3QgcGFyYWdy
YXBocykKKyAgICAgICAgcmV0ID0gU3RyaW5nKHRleHRGb3JPYmplY3QoY29yZU9iamVjdCkpOwor
ICAgICAgICBpZiAoIWVuZCkKKyAgICAgICAgICAgIGVuZCA9IHJldC5sZW5ndGgoKTsKKyAgICB9
CisKKyAgICAvLyBQcmVmaXggYSBpdGVtIG51bWJlci9idWxsZXQgaWYgbmVlZGVkCisgICAgaWYg
KGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IExpc3RJdGVtUm9sZSkgeworICAgICAgICBSZW5k
ZXJPYmplY3QqIG9ialJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICAgICAg
aWYgKG9ialJlbmRlcmVyICYmIG9ialJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAg
ICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShvYmpSZW5kZXJlciktPm1h
cmtlclRleHRXaXRoU3VmZml4KCk7CisgICAgICAgICAgICByZXQgPSBvYmpSZW5kZXJlci0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWFya2VyVGV4dCArIHJldCA6IHJldCArIG1hcmtl
clRleHQ7CisgICAgICAgICAgICBpZiAoZW5kT2Zmc2V0ID09IC0xKQorICAgICAgICAgICAgICAg
IGVuZCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
ID0gcmV0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kIC0gc3RhcnRPZmZzZXQpOworICAgIHJl
dHVybiBnX3N0cmR1cChyZXQudXRmOCgpLmRhdGEoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHRBZnRlck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwg
QXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVu
ZE9mZnNldCkKK3sKKyAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRl
eHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BRlRF
Ul9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
K30KKworZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zmc2V0KEF0a1RleHQq
IHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBz
dGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIHJldHVybiBnYWlsX3RleHRfdXRp
bF9nZXRfdGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0Rm9y
QXRrKHRleHQpLCBHQUlMX0FUX09GRlNFVCwgYm91bmRhcnlUeXBlLCBvZmZzZXQsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOworfQorCitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0
QmVmb3JlT2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkg
Ym91bmRhcnlUeXBlLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAg
IHJldHVybiBnYWlsX3RleHRfdXRpbF9nZXRfdGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4
dCksIGdldFBhbmdvTGF5b3V0Rm9yQXRrKHRleHQpLCBHQUlMX0JFRk9SRV9PRkZTRVQsIGJvdW5k
YXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKworZ3VuaWNoYXIg
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldChBdGtUZXh0KiwgZ2ludCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitnaW50IHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQoQXRrVGV4dCogdGV4dCkKK3sKKyAgICAvLyBj
b3JlT2JqZWN0IGlzIHRoZSB1bmlnbm9yZWQgb2JqZWN0IHdob3NlIG9mZnNldCB0aGUgY2FsbGVy
IGlzIHJlcXVlc3RpbmcuCisgICAgLy8gZm9jdXNlZE9iamVjdCBpcyB0aGUgb2JqZWN0IHdpdGgg
dGhlIGNhcmV0LiBJdCBpcyBsaWtlbHkgaWdub3JlZCAtLSB1bmxlc3MgaXQncyBhIGxpbmsuCisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgaWYg
KCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpbnQgb2Zmc2V0OworICAgIGlmICghb2JqZWN0Rm9jdXNlZEFuZENhcmV0
T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9mZnNldCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Cisg
ICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgU3Ry
aW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdp
dGhTdWZmaXgoKTsKKworICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZv
ciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICAgICAgb2Zmc2V0ICs9IG1hcmtlclRleHQubGVu
Z3RoKCk7CisgICAgfQorCisgICAgLy8gVE9ETzogVmVyaWZ5IHRoaXMgZm9yIFJUTCB0ZXh0Lgor
ICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK0F0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRSdW5BdHRyaWJ1dGVzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiBz
dGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIEF0a0F0dHJpYnV0ZVNldCogcmVzdWx0Owor
CisgICAgaWYgKCFjb3JlT2JqZWN0KSB7CisgICAgICAgICpzdGFydE9mZnNldCA9IDA7CisgICAg
ICAgICplbmRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRleHQpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0ID09IC0xKQorICAgICAgICBv
ZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHQpOworCisgICAgcmVzdWx0ID0g
Z2V0UnVuQXR0cmlidXRlc0Zyb21BY2Nlc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCwgb2Zmc2V0
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGlmICgqc3RhcnRPZmZzZXQgPCAwKSB7
CisgICAgICAgICpzdGFydE9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgKmVuZE9mZnNldCA9IG9m
ZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBdGtBdHRyaWJ1dGVTZXQq
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXMoQXRrVGV4dCogdGV4dCkK
K3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAg
ICBpZiAoIWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1dGVTZXRG
b3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOworfQorCit2b2lkIHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0Q2hhcmFjdGVyRXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwg
Z2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBl
IGNvb3JkcykKK3sKKyAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBvZmZz
ZXQsIDEsIGNvb3Jkcyk7CisgICAgKnggPSBleHRlbnRzLngoKTsKKyAgICAqeSA9IGV4dGVudHMu
eSgpOworICAgICp3aWR0aCA9IGV4dGVudHMud2lkdGgoKTsKKyAgICAqaGVpZ2h0ID0gZXh0ZW50
cy5oZWlnaHQoKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50
cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCwgQXRrQ29v
cmRUeXBlIGNvb3JkcywgQXRrVGV4dFJlY3RhbmdsZSogcmVjdCkKK3sKKyAgICBJbnRSZWN0IGV4
dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRP
ZmZzZXQsIGNvb3Jkcyk7CisgICAgcmVjdC0+eCA9IGV4dGVudHMueCgpOworICAgIHJlY3QtPnkg
PSBleHRlbnRzLnkoKTsKKyAgICByZWN0LT53aWR0aCA9IGV4dGVudHMud2lkdGgoKTsKKyAgICBy
ZWN0LT5oZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQoQXRrVGV4dCogdGV4dCkKK3sKKyAgICByZXR1cm4gYWNj
ZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlKHRleHQpKTsKK30KKworZ2ludCB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQoQXRrVGV4dCogdGV4dCwgZ2ludCB4LCBnaW50IHks
IEF0a0Nvb3JkVHlwZSBjb29yZHMpCit7CisgICAgLy8gRklYTUU6IFVzZSB0aGUgQXRrQ29vcmRU
eXBlCisgICAgLy8gVE9ETzogSXMgaXQgY29ycmVjdCB0byBpZ25vcmUgcmFuZ2UubGVuZ3RoPwor
ICAgIEludFBvaW50IHBvcyh4LCB5KTsKKyAgICBQbGFpblRleHRSYW5nZSByYW5nZSA9IGNvcmUo
dGV4dCktPmRvQVhSYW5nZUZvclBvc2l0aW9uKHBvcyk7CisgICAgcmV0dXJuIHJhbmdlLnN0YXJ0
OworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0TlNlbGVjdGlvbnMoQXRrVGV4dCog
dGV4dCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlv
bigpOworCisgICAgLy8gT25seSByYW5nZSBzZWxlY3Rpb25zIGFyZSBuZWVkZWQgZm9yIHRoZSBw
dXJwb3NlIG9mIHRoaXMgbWV0aG9kCisgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0
aW9ucyBmb3Igbm93LCBzbyB0aGVyZSdzIG9ubHkKKyAgICAvLyB0d28gcG9zc2liaWxpdGllcwor
ICAgIC8vIEFsc28sIHdlIGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgaWYgdGhlIHNlbGVjdGlv
biBkb2VzIG5vdAorICAgIC8vIGJlbG9uZyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9iamVj
dC4gV2UgaGF2ZSB0byBjaGVjayBzaW5jZQorICAgIC8vIHRoZXJlJ3Mgbm8gd2F5IHRvIGdldCB0
aGUgc2VsZWN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCwgb25seQorICAgIC8vIHRoZSBnbG9iYWwg
b25lICh0aGUgQVBJIGlzIGEgYml0IGNvbmZ1c2luZykKKyAgICByZXR1cm4gc2VsZWN0aW9uQmVs
b25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikgPyAxIDogMDsKK30KKworZ2NoYXIq
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2Vs
ZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAgIC8v
IERlZmF1bHQgdmFsdWVzLCB1bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZAorICAgICpzdGFy
dE9mZnNldCA9ICplbmRPZmZzZXQgPSAwOworCisgICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBw
b3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBz
ZW5zZSBmb3Igbm93LgorICAgIGlmIChzZWxlY3Rpb25OdW0pCisgICAgICAgIHJldHVybiAwOwor
CisgICAgLy8gR2V0IHRoZSBvZmZzZXRzIG9mIHRoZSBzZWxlY3Rpb24gZm9yIHRoZSBzZWxlY3Rl
ZCBvYmplY3QKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlv
bigpOworICAgIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVjdCwgc2VsZWN0
aW9uLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworCisgICAgLy8gUmV0dXJuIDAgaW5zdGVh
ZCBvZiAiIiwgYXMgdGhhdCdzIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yCisgICAgLy8gdGhpcyBB
dGtUZXh0IG1ldGhvZCB3aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uCisgICAgaWYgKCpzdGFydE9m
ZnNldCA9PSAqZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0KTsK
K30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRBZGRTZWxlY3Rpb24oQXRrVGV4dCos
IGdpbnQsIGdpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uKEF0a1Rl
eHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtKQoreworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qg
c3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1h
a2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4g
RkFMU0U7CisKKyAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgc2VsZWN0aW9uIGRvZXNuJ3Qg
YmVsb25nIHRvIHRoZSBvYmplY3QKKyAgICBpZiAoIXdlYmtpdEFjY2Vzc2libGVUZXh0R2V0TlNl
bGVjdGlvbnModGV4dCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8vIFNldCBhIG5l
dyAwLXNpemVkIHNlbGVjdGlvbiB0byB0aGUgY2FyZXQgcG9zaXRpb24sIGluIG9yZGVyCisgICAg
Ly8gdG8gc2ltdWxhdGUgc2VsZWN0aW9uIHJlbW92YWwgKEdBSUwgc3R5bGUpCisgICAgZ2ludCBj
YXJldE9mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQodGV4dCk7Cisg
ICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKHRleHQsIHNlbGVjdGlv
bk51bSwgY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNj
ZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0s
IGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQoreworICAgIC8vIFdlYkNvcmUgZG9l
cyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMg
bm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9uTnVtKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29y
ZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBDb25zaWRlciAtMSBhbmQgb3V0
LW9mLWJvdW5kIHZhbHVlcyBhbmQgY29ycmVjdCB0aGVtIHRvIGxlbmd0aAorICAgIGdpbnQgdGV4
dENvdW50ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJDb3VudCh0ZXh0KTsKKyAg
ICBpZiAoc3RhcnRPZmZzZXQgPCAwIHx8IHN0YXJ0T2Zmc2V0ID4gdGV4dENvdW50KQorICAgICAg
ICBzdGFydE9mZnNldCA9IHRleHRDb3VudDsKKyAgICBpZiAoZW5kT2Zmc2V0IDwgMCB8fCBlbmRP
ZmZzZXQgPiB0ZXh0Q291bnQpCisgICAgICAgIGVuZE9mZnNldCA9IHRleHRDb3VudDsKKworICAg
IC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtl
ci4KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsK
KyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBT
dHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0
V2l0aFN1ZmZpeCgpOworICAgICAgICBpbnQgbWFya2VyTGVuZ3RoID0gbWFya2VyVGV4dC5sZW5n
dGgoKTsKKyAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDwgbWFya2VyTGVuZ3RoIHx8IGVuZE9mZnNl
dCA8IG1hcmtlckxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBz
dGFydE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgICAgIGVuZE9mZnNldCAtPSBtYXJrZXJM
ZW5ndGg7CisgICAgfQorCisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFu
Z2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7
CisgICAgaWYgKHJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBj
b3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRDYXJldE9m
ZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKworICAgIGlmICghY29yZU9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigpOworICAgIGlm
IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAgIFN0cmluZyBt
YXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3Vm
Zml4KCk7CisgICAgICAgIGludCBtYXJrZXJMZW5ndGggPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwor
ICAgICAgICBpZiAob2Zmc2V0IDwgbWFya2VyTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIEZB
TFNFOworCisgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXQgZm9yIGxpc3Qg
aXRlbXMuCisgICAgICAgIG9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgfQorCisgICAgUGxh
aW5UZXh0UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7CisgICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRS
YW5nZSk7CisgICAgaWYgKHJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisK
KyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKTsK
KyAgICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcxMjk2N2I4NjI0MzUyNWM1M2UwNzcwMzczMGFhZmVlYjJjNTIwYTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dF9oCisjZGVmaW5lIFdlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUZXh0X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9pZCB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEludGVyZmFjZUluaXQoQXRrVGV4dElmYWNlKik7CitnY2hhciogd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9m
ZnNldCk7CitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0ZXJPZmZzZXQoQXRr
VGV4dCosIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnksIGdpbnQqIHN0YXJ0T2Zmc2V0LCBn
aW50KiBlbmRPZmZzZXQpOworZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zm
c2V0KEF0a1RleHQqLCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5LCBnaW50KiBzdGFydE9m
ZnNldCwgZ2ludCogZW5kT2Zmc2V0KTsKK2djaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRl
eHRCZWZvcmVPZmZzZXQoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnksIGdp
bnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpOworZ3VuaWNoYXIgd2Via2l0QWNjZXNz
aWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldChBdGtUZXh0KiwgZ2ludCBvZmZzZXQpOworZ2lu
dCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KEF0a1RleHQqKTsKK0F0a0F0dHJp
YnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVzKEF0a1RleHQqLCBn
aW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCk7CitBdGtBdHRy
aWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXMoQXRrVGV4
dCopOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckV4dGVudHMoQXRrVGV4
dCosIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVp
Z2h0LCBBdGtDb29yZFR5cGUpOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0
ZW50cyhBdGtUZXh0KiwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nvb3Jk
VHlwZSwgQXRrVGV4dFJlY3RhbmdsZSopOworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENo
YXJhY3RlckNvdW50KEF0a1RleHQqKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRPZmZz
ZXRBdFBvaW50KEF0a1RleHQqLCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlKTsKK2dpbnQg
d2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyhBdGtUZXh0Kik7CitnY2hhciogd2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24oQXRrVGV4dCosIGdpbnQgc2VsZWN0aW9uTnVt
LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KTsKK2dib29sZWFuIHdlYmtpdEFj
Y2Vzc2libGVUZXh0QWRkU2VsZWN0aW9uKEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50
IGVuZE9mZnNldCk7CitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbihB
dGtUZXh0KiwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zm
c2V0KTsKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uKEF0a1Rl
eHQqLCBnaW50IHNlbGVjdGlvbk51bSk7CitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNl
dENhcmV0T2Zmc2V0KEF0a1RleHQqLCBnaW50IG9mZnNldCk7CisKKyNlbmRpZiAvLyBXZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggNmZlMTZlM2Rj
NzE3MGU2ZTQ5ODM3N2RmMTAzNzViYzk4OTRlZGFlOC4uOWRlN2EzYTU1MTE0ZGQ4Y2E5Y2ViN2Fj
OTJmZjMwYjk3MTJmNjhiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMzQsNiArMzQsOSBAQAog
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJhbmdl
LmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtODEsMyAr
ODQsMjcgQEAgY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQogICAg
IHJldHVybmVkU3RyaW5nID0gc3RyLnV0ZjgoKTsKICAgICByZXR1cm4gcmV0dXJuZWRTdHJpbmcu
ZGF0YSgpOwogfQorCitib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7CisgICAg
aWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFdlIHdhbnQgdG8gY2hlY2sgdGhhdCBib3RoIHRoZSBzZWxl
Y3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQorICAgIC8vIEFORCB0aGF0IHRoZSBzZWxlY3Rpb24g
aXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUgb2YgdGhlCisgICAgLy8gYm91bmRhcmllcyBmb3Ig
dGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUKKyAgICAvLyBu
b2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHkuCisg
ICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKKyAgICBOb2RlKiBsYXN0RGVzY2Vu
ZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgcmV0dXJuIChyYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgZWMpCisgICAgICAgICAg
ICAmJiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IG5vZGUgfHwgcmFuZ2UtPmVuZE9mZnNldCgp
KQorICAgICAgICAgICAgJiYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IGxhc3REZXNjZW5k
YW50IHx8IHJhbmdlLT5zdGFydE9mZnNldCgpICE9IGxhc3RPZmZzZXRJbk5vZGUobGFzdERlc2Nl
bmRhbnQpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaAppbmRleCA4ZjgzMzZjMjllMjM0MTRiZWUyMWIwMDUy
MWJhZmZjZGI1ZmRhMmZjLi4zNGY2ODEyZGU4NmY0ZTg5ZmRkNWY4NGNkYTRiMmUyODI4M2U2Yjkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlVXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmgKQEAgLTI4LDYgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgVmlzaWJs
ZVNlbGVjdGlvbjsKIH0KIAogLy8gQWRkcyBhbiBhY2Nlc3NpYmlsaXR5IGF0dHJpYnV0ZSB0byBh
biBBdGtBdHRyaWJ1dGVTZXQsIGJ5IG5hbWUgYW5kIHZhbHVlLgpAQCAtMzksNCArNDAsNyBAQCB2
b2lkIGNvbnRlbnRzVG9BdGsoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCosIEF0a0Nvb3Jk
VHlwZSwgV2ViQ29yZTo6SW50UmVjdAogLy8gUmV0dXJucyBhIGNvbnN0IGNoYXIqIHBvaW50aW5n
IHRvIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLgogY29uc3QgY2hhciogcmV0dXJuU3Ry
aW5nKGNvbnN0IFN0cmluZyYpOwogCisvLyBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHNlbGVjdGlv
biBiZWxvbmdzIG9yIG5vdCB0byBhbiBBY2Nlc3NpYmlsaXR5T2JqZWN0J3Mgc2NvcGUuCitib29s
IHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Kiwg
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpOworCiAjZW5kaWYgLy8gV2ViS2l0QWNjZXNzaWJs
ZVV0aWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2Vi
S2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDI1M2U5M2NlN2RjMzAy
NWZmNmJlMjI1OTM0MWYyOGY1ZDljNTk4YmUuLjhiMjE3MjY4ZmM0OTBmOTAwZTcyODM4MjhlMzA3
NWJjOGQ0MTFkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTcxLDYgKzcx
LDcgQEAKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgiCiAj
aW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUZXh0LmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAg
LTExNSwxMSArMTE2LDYgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrT2Jq
ZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIGNvcmUoV0VCS0lUX0FDQ0VTU0lCTEUob2JqZWN0KSk7
CiB9CiAKLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RleHQqIHRleHQpCi17
Ci0gICAgcmV0dXJuIGNvcmUoQVRLX09CSkVDVCh0ZXh0KSk7Ci19Ci0KIHN0YXRpYyBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RhYmxlKiB0YWJsZSkKIHsKICAgICByZXR1cm4gY29yZShB
VEtfT0JKRUNUKHRhYmxlKSk7CkBAIC0xMzAsOCArMTI2LDYgQEAgc3RhdGljIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmUoQXRrVmFsdWUqIHZhbHVlKQogICAgIHJldHVybiBjb3JlKEFUS19PQkpF
Q1QodmFsdWUpKTsKIH0KIAotc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dl
dF90ZXh0KEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCk7Ci0KIHN0
YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWUoQXRrT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2Jq
ZWN0KTsKQEAgLTE0Myw3ICsxMzcsNyBAQCBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nl
c3NpYmxlX2dldF9uYW1lKEF0a09iamVjdCogb2JqZWN0KQogICAgICAgICBpZiAobGFiZWwpIHsK
ICAgICAgICAgICAgIEF0a09iamVjdCogYXRrT2JqZWN0ID0gbGFiZWwtPndyYXBwZXIoKTsKICAg
ICAgICAgICAgIGlmIChBVEtfSVNfVEVYVChhdGtPYmplY3QpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKGF0a09iamVjdCks
IDAsIC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRU
ZXh0KEFUS19URVhUKGF0a09iamVjdCksIDAsIC0xKTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IFRyeSB0ZXh0IHVuZGVyIHRoZSBub2RlLgpAQCAtNTg3LDMwICs1ODEsNiBAQCBzdGF0aWMgQXRr
Um9sZSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcm9sZShBdGtPYmplY3QqIG9iamVjdCkKICAgICBy
ZXR1cm4gYXRrUm9sZShjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSk7CiB9CiAKLXN0YXRpYyBib29s
IHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCi17Ci0gICAgaWYgKCFjb3JlT2JqZWN0IHx8
ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIFdlIHdhbnQgdG8gY2hlY2sgdGhhdCBib3RoIHRoZSBzZWxlY3Rpb24gaW50ZXJzZWN0cyB0
aGUgbm9kZQotICAgIC8vIEFORCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMgbm90IGp1c3QgInRvdWNo
aW5nIiBvbmUgb2YgdGhlCi0gICAgLy8gYm91bmRhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG5vZGUu
IFdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUKLSAgICAvLyBub2RlIGlzIGFjdHVhbGx5IGlu
c2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHkuCi0gICAgTm9kZSogbm9kZSA9IGNv
cmVPYmplY3QtPm5vZGUoKTsKLSAgICBOb2RlKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUtPmxhc3RE
ZXNjZW5kYW50KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcmV0dXJuIChyYW5n
ZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgZWMpCi0gICAgICAgICAgICAmJiAocmFuZ2UtPmVuZENv
bnRhaW5lcigpICE9IG5vZGUgfHwgcmFuZ2UtPmVuZE9mZnNldCgpKQotICAgICAgICAgICAgJiYg
KHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IGxhc3REZXNjZW5kYW50IHx8IHJhbmdlLT5zdGFy
dE9mZnNldCgpICE9IGxhc3RPZmZzZXRJbk5vZGUobGFzdERlc2NlbmRhbnQpKSk7Ci19Ci0KIHN0
YXRpYyBib29sIGlzVGV4dFdpdGhDYXJldChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
KQogewogICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCkpCkBAIC04MjcsNzk2ICs3OTcsNiBAQCB3ZWJraXRfYWNjZXNzaWJsZV9n
ZXRfdHlwZSh2b2lkKQogICAgIHJldHVybiB0eXBlX3ZvbGF0aWxlOwogfQogCi0vLyBUZXh0Ci0K
LXN0YXRpYyBnY2hhciogdXRmOFN1YnN0cihjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IHN0YXJ0
LCBnaW50IGVuZCkKLXsKLSAgICBBU1NFUlQoc3RyaW5nKTsKLSAgICBnbG9uZyBzdHJMZW4gPSBn
X3V0Zjhfc3RybGVuKHN0cmluZywgLTEpOwotICAgIGlmIChzdGFydCA+IHN0ckxlbiB8fCBlbmQg
PiBzdHJMZW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGdjaGFyKiBzdGFydFB0ciA9IGdfdXRm
OF9vZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIHN0YXJ0KTsKLSAgICBnc2l6ZSBsZW5JbkJ5dGVz
ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgZW5kICsgMSkgLSAgc3RhcnRQdHI7
Ci0gICAgZ2NoYXIqIG91dHB1dCA9IHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MwKGxlbklu
Qnl0ZXMgKyAxKSk7Ci0gICAgcmV0dXJuIGdfdXRmOF9zdHJuY3B5KG91dHB1dCwgc3RhcnRQdHIs
IGVuZCAtIHN0YXJ0ICsgMSk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbXBsZXRl
bHkgZ2VuZXJhbCwgaXMgaXQncyB0aWVkIHRvIHRoZQotLy8gaW50ZXJuYWxzIG9mIFdlYkNvcmUn
cyB0ZXh0IHByZXNlbnRhdGlvbi4KLXN0YXRpYyBnY2hhciogY29udmVydFVuaUNoYXJUb1VURjgo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGdpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50IHRvKQot
ewotICAgIENTdHJpbmcgc3RyaW5nVVRGOCA9IFVURjhFbmNvZGluZygpLmVuY29kZShjaGFyYWN0
ZXJzLCBsZW5ndGgsIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOwotICAgIGdjaGFyKiB1
dGY4U3RyaW5nID0gdXRmOFN1YnN0cihzdHJpbmdVVEY4LmRhdGEoKSwgZnJvbSwgdG8pOwotICAg
IGlmICghZ191dGY4X3ZhbGlkYXRlKHV0ZjhTdHJpbmcsIC0xLCAwKSkgewotICAgICAgICBnX2Zy
ZWUodXRmOFN0cmluZyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBnc2l6ZSBsZW4g
PSBzdHJsZW4odXRmOFN0cmluZyk7Ci0gICAgR1N0cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xl
bigwLCBsZW4pOwotICAgIGdjaGFyKiBwdHIgPSB1dGY4U3RyaW5nOwotCi0gICAgLy8gV2ViQ29y
ZSBpbnRyb2R1Y2VzIGxpbmUgYnJlYWtzIGluIHRoZSB0ZXh0IHRoYXQgZG8gbm90IHJlZmxlY3QK
LSAgICAvLyB0aGUgbGF5b3V0IHlvdSBzZWUgb24gdGhlIHNjcmVlbiwgcmVwbGFjZSB0aGVtIHdp
dGggc3BhY2VzCi0gICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgICAgZ2ludCBpbmRleCwgc3Rh
cnQ7Ci0gICAgICAgIHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHB0ciwgbGVuLCAmaW5k
ZXgsICZzdGFydCk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwdHIsIGluZGV4
KTsKLSAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGdfc3RyaW5nX2FwcGVuZF9jKHJldCwgJyAnKTsKLSAgICAgICAgcHRyICs9IHN0YXJ0Owot
ICAgICAgICBsZW4gLT0gc3RhcnQ7Ci0gICAgfQotCi0gICAgZ19mcmVlKHV0ZjhTdHJpbmcpOwot
ICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOwotfQotCi1nY2hhciogdGV4dEZv
clJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgR1N0cmluZyogcmVzdWx0
VGV4dCA9IGdfc3RyaW5nX25ldygwKTsKLQotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJl
dHVybiBnX3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNFKTsKLQotICAgIC8vIEZvciBSZW5k
ZXJCbG9ja3MsIHBpZWNlIHRvZ2V0aGVyIHRoZSB0ZXh0IGZyb20gdGhlIFJlbmRlclRleHQgb2Jq
ZWN0cyB0aGV5IGNvbnRhaW4uCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRl
cmVyLT5maXJzdENoaWxkKCk7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgIGlmIChvYmplY3QtPmlzQlIoKSkgewotICAgICAgICAgICAgZ19zdHJpbmdf
YXBwZW5kKHJlc3VsdFRleHQsICJcbiIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0OwotICAgICAgICBpZiAob2JqZWN0
LT5pc1RleHQoKSkKLSAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqZWN0
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAob2JqZWN0LT5pc1JlcGxhY2VkKCkp
Ci0gICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3VuaWNoYXIocmVzdWx0VGV4dCwgb2Jq
ZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotCi0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNo
ZWNrIGNoaWxkcmVuLCBpZiBhbnksIHRvIGNvbnNpZGVyIHdoZW4KLSAgICAgICAgICAgIC8vIGN1
cnJlbnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lIG9mIGl0cwotICAgICAg
ICAgICAgLy8gY2hpbGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlzcyB0aG9zZSBwb3J0aW9u
cyBvZgotICAgICAgICAgICAgLy8gdGV4dCBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhvc2Ug
c2l0dWF0aW9ucwotICAgICAgICAgICAgaWYgKG9iamVjdC0+Zmlyc3RDaGlsZCgpKQotICAgICAg
ICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0Rm9yUmVuZGVyZXIob2Jq
ZWN0KSk7Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5s
aW5lVGV4dEJveCogYm94ID0gcmVuZGVyVGV4dCA/IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgp
IDogMDsKLSAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAgZ2NoYXIqIHRleHQgPSBj
b252ZXJ0VW5pQ2hhclRvVVRGOChyZW5kZXJUZXh0LT5jaGFyYWN0ZXJzKCksIHJlbmRlclRleHQt
PnRleHRMZW5ndGgoKSwgYm94LT5zdGFydCgpLCBib3gtPmVuZCgpKTsKLSAgICAgICAgICAgIGdf
c3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0KTsKLSAgICAgICAgICAgIC8vIE5ld2xpbmUg
Y2hhcnMgaW4gdGhlIHNvdXJjZSByZXN1bHQgaW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28gY2hl
Y2sKLSAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlvdXQu
IFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzguCi0gICAgICAgICAgICAvLyBJZiB0aGUgbmV4dCBz
aWJsaW5nIGlzIGEgQlIsIHdlJ2xsIGFkZCB0aGUgbmV3bGluZSB3aGVuIHdlIGV4YW1pbmUgdGhh
dCBjaGlsZC4KLSAgICAgICAgICAgIGlmICghYm94LT5uZXh0T25MaW5lRXhpc3RzKCkgJiYgKCFv
YmplY3QtPm5leHRTaWJsaW5nKCkgfHwgIW9iamVjdC0+bmV4dFNpYmxpbmcoKS0+aXNCUigpKSkK
LSAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgIlxuIik7Ci0gICAg
ICAgICAgICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBJbnNlcnQgdGhlIHRleHQgb2YgdGhlIG1hcmtlciBmb3IgbGlzdCBpdGVtIGluIHRoZSBy
aWdodCBwbGFjZSwgaWYgcHJlc2VudAotICAgIGlmIChyZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7
Ci0gICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcikt
Pm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgZ19zdHJpbmdfcHJlcGVuZChyZXN1bHRU
ZXh0LCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgbWFya2VyVGV4dC51dGY4KCkuZGF0YSgpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXN1bHRUZXh0LCBGQUxTRSk7Ci19
Ci0KLWdjaGFyKiB0ZXh0Rm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qp
Ci17Ci0gICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOwotCi0gICAgLy8gRm9yIHRl
eHQgY29udHJvbHMsIHdlIGNhbiBnZXQgdGhlIHRleHQgbGluZSBieSBsaW5lLgotICAgIGlmIChj
b3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkpIHsKLSAgICAgICAgdW5zaWduZWQgdGV4dExlbmd0
aCA9IGNvcmVPYmplY3QtPnRleHRMZW5ndGgoKTsKLSAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAw
OwotICAgICAgICBQbGFpblRleHRSYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPmRvQVhSYW5nZUZv
ckxpbmUobGluZU51bWJlcik7Ci0gICAgICAgIHdoaWxlIChyYW5nZS5sZW5ndGgpIHsKLSAgICAg
ICAgICAgIC8vIFdoZW4gYSBsaW5lIG9mIHRleHQgd3JhcHMgaW4gYSB0ZXh0IGFyZWEsIHRoZSBm
aW5hbCBzcGFjZSBpcyByZW1vdmVkLgotICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFu
Z2UubGVuZ3RoIDwgdGV4dExlbmd0aCkKLSAgICAgICAgICAgICAgICByYW5nZS5sZW5ndGggLT0g
MTsKLSAgICAgICAgICAgIFN0cmluZyBsaW5lVGV4dCA9IGNvcmVPYmplY3QtPmRvQVhTdHJpbmdG
b3JSYW5nZShyYW5nZSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBsaW5lVGV4
dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIp
OwotICAgICAgICAgICAgcmFuZ2UgPSBjb3JlT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGlu
ZU51bWJlcik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHJlbmRlcmVy
VGV4dCh0ZXh0Rm9yUmVuZGVyZXIoY29yZU9iamVjdC0+cmVuZGVyZXIoKSkpOwotICAgICAgICBn
X3N0cmluZ19hcHBlbmQoc3RyLCByZW5kZXJlclRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0UpOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNl
dCwgZ2ludCBlbmRPZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCA9IGNvcmUodGV4dCk7Ci0KLSAgICBpbnQgZW5kID0gZW5kT2Zmc2V0OwotICAgIGlmIChlbmRP
ZmZzZXQgPT0gLTEpIHsKLSAgICAgICAgZW5kID0gY29yZU9iamVjdC0+c3RyaW5nVmFsdWUoKS5s
ZW5ndGgoKTsKLSAgICAgICAgaWYgKCFlbmQpCi0gICAgICAgICAgICBlbmQgPSBjb3JlT2JqZWN0
LT50ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJldDsK
LSAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICByZXQgPSBjb3Jl
T2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UoMCwgZW5kT2Zmc2V0KSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCk7Ci0g
ICAgICAgIGlmICghcmV0KQotICAgICAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+dGV4dFVuZGVy
RWxlbWVudCgpOwotICAgIH0KLQotICAgIGlmICghcmV0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiBhdCBsZWFzdCB3aXRoIGFub255bW91cyBSZW5kZXJCbG9ja3MgKGUu
Zy4gYm9keSB0ZXh0IGFtb25nc3QgcGFyYWdyYXBocykKLSAgICAgICAgcmV0ID0gU3RyaW5nKHRl
eHRGb3JPYmplY3QoY29yZU9iamVjdCkpOwotICAgICAgICBpZiAoIWVuZCkKLSAgICAgICAgICAg
IGVuZCA9IHJldC5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVmaXggYSBpdGVtIG51bWJl
ci9idWxsZXQgaWYgbmVlZGVkCi0gICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IExp
c3RJdGVtUm9sZSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9ialJlbmRlcmVyID0gY29yZU9i
amVjdC0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKG9ialJlbmRlcmVyICYmIG9ialJlbmRlcmVy
LT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5k
ZXJMaXN0SXRlbShvYmpSZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAg
ICAgICByZXQgPSBvYmpSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWFy
a2VyVGV4dCArIHJldCA6IHJldCArIG1hcmtlclRleHQ7Ci0gICAgICAgICAgICBpZiAoZW5kT2Zm
c2V0ID09IC0xKQotICAgICAgICAgICAgICAgIGVuZCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0ID0gcmV0LnN1YnN0cmluZyhzdGFydE9mZnNldCwg
ZW5kIC0gc3RhcnRPZmZzZXQpOwotICAgIHJldHVybiBnX3N0cmR1cChyZXQudXRmOCgpLmRhdGEo
KSk7Ci19Ci0KLXN0YXRpYyBHYWlsVGV4dFV0aWwqIGdldEdhaWxUZXh0VXRpbEZvckF0ayhBdGtU
ZXh0KiB0ZXh0T2JqZWN0KQotewotICAgIEdhaWxUZXh0VXRpbCogZ2FpbFRleHRVdGlsID0gZ2Fp
bF90ZXh0X3V0aWxfbmV3KCk7Ci0gICAgZ2FpbF90ZXh0X3V0aWxfdGV4dF9zZXR1cChnYWlsVGV4
dFV0aWwsIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQodGV4dE9iamVjdCwgMCwgLTEp
KTsKLSAgICByZXR1cm4gZ2FpbFRleHRVdGlsOwotfQotCi1zdGF0aWMgUGFuZ29MYXlvdXQqIGdl
dFBhbmdvTGF5b3V0Rm9yQXRrKEF0a1RleHQqIHRleHRPYmplY3QpCi17Ci0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dE9iamVjdCk7Ci0KLSAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3Vt
ZW50LT52aWV3KCktPmhvc3RXaW5kb3coKTsKLSAgICBpZiAoIWhvc3RXaW5kb3cpCi0gICAgICAg
IHJldHVybiAwOwotICAgIFBsYXRmb3JtUGFnZUNsaWVudCB3ZWJWaWV3ID0gaG9zdFdpbmRvdy0+
cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgaWYgKCF3ZWJWaWV3KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIENyZWF0ZSBhIHN0cmluZyB3aXRoIHRoZSBsYXlvdXQgYXMgaXQgYXBwZWFy
cyBvbiB0aGUgc2NyZWVuCi0gICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IGd0a193aWRnZXRfY3Jl
YXRlX3BhbmdvX2xheW91dChzdGF0aWNfY2FzdDxHdGtXaWRnZXQqPih3ZWJWaWV3KSwgdGV4dEZv
ck9iamVjdChjb3JlT2JqZWN0KSk7Ci0gICAgcmV0dXJuIGxheW91dDsKLX0KLQotc3RhdGljIGdj
aGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldChBdGtUZXh0
KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCog
c3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICByZXR1cm4gZ2FpbF90ZXh0X3V0
aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZv
ckF0ayh0ZXh0KSwgR0FJTF9BRlRFUl9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQotc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF90ZXh0X2F0X29mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRr
VGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9m
ZnNldCkKLXsKLSAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRV
dGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BVF9PRkZT
RVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQot
c3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZz
ZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5
cGUsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgcmV0dXJuIGdh
aWxfdGV4dF91dGlsX2dldF90ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0ZXh0KSwgZ2V0UGFu
Z29MYXlvdXRGb3JBdGsodGV4dCksIEdBSUxfQkVGT1JFX09GRlNFVCwgYm91bmRhcnlUeXBlLCBv
ZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ3VuaWNoYXIgd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2F0X29mZnNldChBdGtUZXh0KiB0ZXh0
LCBnaW50IG9mZnNldCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwot
fQotCi1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQo
QXRrVGV4dCogdGV4dCkKLXsKLSAgICAvLyBjb3JlT2JqZWN0IGlzIHRoZSB1bmlnbm9yZWQgb2Jq
ZWN0IHdob3NlIG9mZnNldCB0aGUgY2FsbGVyIGlzIHJlcXVlc3RpbmcuCi0gICAgLy8gZm9jdXNl
ZE9iamVjdCBpcyB0aGUgb2JqZWN0IHdpdGggdGhlIGNhcmV0LiBJdCBpcyBsaWtlbHkgaWdub3Jl
ZCAtLSB1bmxlc3MgaXQncyBhIGxpbmsuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCA9IGNvcmUodGV4dCk7Ci0gICAgaWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgb2Zmc2V0OwotICAg
IGlmICghb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9m
ZnNldCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5p
c0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJ
dGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLQotICAgICAgICAvLyBXZSBu
ZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KLSAgICAg
ICAgb2Zmc2V0ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgLy8gVE9ETzog
VmVyaWZ5IHRoaXMgZm9yIFJUTCB0ZXh0LgotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRp
YyBpbnQgYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlbGlu
ZVBvc2l0aW9uIG9yaWdpbmF0ZXMgZnJvbSBSZW5kZXJPYmplY3QuY3BwIGFuZCB3YXMKLSAgICAv
LyByZW1vdmVkIGluIHI3MDA3Mi4gVGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGluY29ycmVjdCB0
aG91Z2gsIGJlY2F1c2UgdGhpcyBpcyBub3QgdGhlCi0gICAgLy8gYmFzZWxpbmUgb2YgdGhlIHVu
ZGVybHlpbmcgUmVuZGVyT2JqZWN0LCBidXQgb2YgdGhlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuCi0gICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyT2JqZWN0LT5m
aXJzdExpbmVTdHlsZSgpLT5mb250TWV0cmljcygpOwotICAgIHJldHVybiBmb250TWV0cmljcy5h
c2NlbnQoKSArIChyZW5kZXJPYmplY3QtPmZpcnN0TGluZVN0eWxlKCktPmNvbXB1dGVkTGluZUhl
aWdodCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsKLX0KLQotc3RhdGljIEF0a0F0dHJp
YnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IDA7
Ci0gICAgR093blB0cjxnY2hhcj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+
Zm9udFNpemUoKSkpOwotICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRr
X3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU0laRSksIGJ1ZmZlci5nZXQo
KSk7Ci0KLSAgICBDb2xvciBiZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnQ29sb3IucmVkKCksIGJnQ29sb3IuZ3JlZW4o
KSwgYmdDb2xvci5ibHVlKCkpKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQo
cmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9CR19DT0xP
UiksIGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgZmdDb2xvciA9IHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKGZnQ29sb3Iu
aXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwl
aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnQ29sb3IucmVkKCksIGZn
Q29sb3IuZ3JlZW4oKSwgZmdDb2xvci5ibHVlKCkpKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0
cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRf
QVRUUl9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGJhc2VsaW5l
UG9zaXRpb247Ci0gICAgYm9vbCBpbmNsdWRlUmlzZSA9IHRydWU7Ci0gICAgc3dpdGNoIChzdHls
ZS0+dmVydGljYWxBbGlnbigpKSB7Ci0gICAgY2FzZSBTVUI6Ci0gICAgICAgIGJhc2VsaW5lUG9z
aXRpb24gPSAtMSAqIGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNVUEVSOgotICAgICAgICBiYXNlbGluZVBvc2l0aW9u
ID0gYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChyZW5kZXJlcik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQkFTRUxJTkU6Ci0gICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAwOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBpbmNsdWRlUmlzZSA9IGZhbHNl
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaW5jbHVkZVJpc2UpIHsKLSAgICAg
ICAgYnVmZmVyLnNldChnX3N0cmR1cF9wcmludGYoIiVpIiwgYmFzZWxpbmVQb3NpdGlvbikpOwot
ICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJp
YnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1JJU0UpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0K
LQotICAgIGlmICghc3R5bGUtPnRleHRJbmRlbnQoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IGludCBpbmRlbnRhdGlvbiA9IHN0eWxlLT50ZXh0SW5kZW50KCkuY2FsY1ZhbHVlKG9iamVjdC0+
c2l6ZSgpLndpZHRoKCkpOwotICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWki
LCBpbmRlbnRhdGlvbikpOwotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1
bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1
ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUt
PmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKTsKLSAgICBpZiAoZm9udEZhbWlseU5h
bWUubGVmdCg4KSA9PSAiLXdlYmtpdC0iKQotICAgICAgICBmb250RmFtaWx5TmFtZSA9IGZvbnRG
YW1pbHlOYW1lLnN1YnN0cmluZyg4KTsKLQotICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0
KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkFNSUxZ
X05BTUUpLCBmb250RmFtaWx5TmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGludCBmb250V2Vp
Z2h0ID0gLTE7Ci0gICAgc3dpdGNoIChzdHlsZS0+Zm9udCgpLndlaWdodCgpKSB7Ci0gICAgY2Fz
ZSBGb250V2VpZ2h0MTAwOgotICAgICAgICBmb250V2VpZ2h0ID0gMTAwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSAyMDA7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDMwMDoKLSAgICAgICAgZm9udFdlaWdo
dCA9IDMwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAg
ICBmb250V2VpZ2h0ID0gNDAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ1
MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSA1MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFdlaWdodDYwMDoKLSAgICAgICAgZm9udFdlaWdodCA9IDYwMDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250V2VpZ2h0NzAwOgotICAgICAgICBmb250V2VpZ2h0ID0gNzAwOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQg
PSA4MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDkwMDoKLSAgICAgICAg
Zm9udFdlaWdodCA9IDkwMDsKLSAgICB9Ci0gICAgaWYgKGZvbnRXZWlnaHQgPiAwKSB7Ci0gICAg
ICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGZvbnRXZWlnaHQpKTsKLSAgICAg
ICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9XRUlHSFQpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQot
ICAgIHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7Ci0gICAgY2FzZSBUQUFVVE86Ci0gICAg
Y2FzZSBUQVNUQVJUOgotICAgIGNhc2UgVEFFTkQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TEVGVDoKLSAgICBjYXNlIFdFQktJVF9MRUZUOgotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1
dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRS
X0pVU1RJRklDQVRJT04pLCAibGVmdCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJJR0hU
OgotICAgIGNhc2UgV0VCS0lUX1JJR0hUOgotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVU
b1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pV
U1RJRklDQVRJT04pLCAicmlnaHQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDRU5URVI6
Ci0gICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgotICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVU
b1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0pV
U1RJRklDQVRJT04pLCAiY2VudGVyIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSlVTVElG
WToKLSAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9h
dHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgImZpbGwiKTsK
LSAgICB9Ci0KLSAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0
X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1VOREVSTElORSksIChzdHlsZS0+dGV4
dERlY29yYXRpb24oKSAmIFVOREVSTElORSkgPyAic2luZ2xlIiA6ICJub25lIik7Ci0KLSAgICBy
ZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRf
bmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwgc3R5bGUtPmZvbnQoKS5pdGFsaWMoKSA/ICJpdGFs
aWMiIDogIm5vcm1hbCIpOwotCi0gICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0
LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdI
KSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpICYgTElORV9USFJPVUdIKSA/ICJ0cnVlIiA6ICJm
YWxzZSIpOwotCi0gICAgcmVzdWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4
dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9JTlZJU0lCTEUpLCAoc3R5bGUtPnZp
c2liaWxpdHkoKSA9PSBISURERU4pID8gInRydWUiIDogImZhbHNlIik7Ci0KLSAgICByZXN1bHQg
PSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShB
VEtfVEVYVF9BVFRSX0VESVRBQkxFKSwgb2JqZWN0LT5pc1JlYWRPbmx5KCkgPyAiZmFsc2UiIDog
InRydWUiKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnaW50IGNvbXBhcmVB
dHRyaWJ1dGUoY29uc3QgQXRrQXR0cmlidXRlKiBhLCBjb25zdCBBdGtBdHRyaWJ1dGUqIGIpCi17
Ci0gICAgcmV0dXJuIGdfc3RyY21wMChhLT5uYW1lLCBiLT5uYW1lKSB8fCBnX3N0cmNtcDAoYS0+
dmFsdWUsIGItPnZhbHVlKTsKLX0KLQotLy8gUmV0dXJucyBhbiBBdGtBdHRyaWJ1dGVTZXQgd2l0
aCB0aGUgZWxlbWVudHMgb2YgYTEgd2hpY2ggYXJlIGVpdGhlcgotLy8gbm90IHByZXNlbnQgb3Ig
ZGlmZmVyZW50IGluIGEyLiBOZWl0aGVyIGExIG5vciBhMiBzaG91bGQgYmUgdXNlZAotLy8gYWZ0
ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogYXR0cmli
dXRlU2V0RGlmZmVyZW5jZShBdGtBdHRyaWJ1dGVTZXQqIGExLCBBdGtBdHRyaWJ1dGVTZXQqIGEy
KQotewotICAgIGlmICghYTIpCi0gICAgICAgIHJldHVybiBhMTsKLQotICAgIEF0a0F0dHJpYnV0
ZVNldCogaSA9IGExOwotICAgIEF0a0F0dHJpYnV0ZVNldCogZm91bmQ7Ci0gICAgQXRrQXR0cmli
dXRlU2V0KiB0b0RlbGV0ZSA9IDA7Ci0KLSAgICB3aGlsZSAoaSkgewotICAgICAgICBmb3VuZCA9
IGdfc2xpc3RfZmluZF9jdXN0b20oYTIsIGktPmRhdGEsIChHQ29tcGFyZUZ1bmMpY29tcGFyZUF0
dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgQXRrQXR0cmlidXRl
U2V0KiB0ID0gaS0+bmV4dDsKLSAgICAgICAgICAgIHRvRGVsZXRlID0gZ19zbGlzdF9wcmVwZW5k
KHRvRGVsZXRlLCBpLT5kYXRhKTsKLSAgICAgICAgICAgIGExID0gZ19zbGlzdF9kZWxldGVfbGlu
ayhhMSwgaSk7Ci0gICAgICAgICAgICBpID0gdDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBpID0gaS0+bmV4dDsKLSAgICB9Ci0KLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKGEyKTsK
LSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHRvRGVsZXRlKTsKLSAgICByZXR1cm4gYTE7Ci19
Ci0KLXN0YXRpYyBndWludCBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCkKLXsKLSAgICAvLyBOb24gcmVuZGVyIG9iamVjdHMgYXJlIG5v
dCB0YWtlbiBpbnRvIGFjY291bnQKLSAgICBpZiAoIW9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRm9yIHRob3NlIG9iamVj
dHMgaW1wbGVtZW50aW5nIHRoZSBBdGtUZXh0IGludGVyZmFjZSB3ZSB1c2UgdGhlCi0gICAgLy8g
d2VsbCBrbm93biBBUEkgdG8gYWx3YXlzIGdldCB0aGUgdGV4dCBpbiBhIGNvbnNpc3RlbnQgd2F5
Ci0gICAgQXRrT2JqZWN0KiBhdGtPYmogPSBBVEtfT0JKRUNUKG9iamVjdC0+d3JhcHBlcigpKTsK
LSAgICBpZiAoQVRLX0lTX1RFWFQoYXRrT2JqKSkgewotICAgICAgICBHT3duUHRyPGdjaGFyPiB0
ZXh0KHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQoYXRrT2JqKSwgMCwg
LTEpKTsKLSAgICAgICAgcmV0dXJuIGdfdXRmOF9zdHJsZW4odGV4dC5nZXQoKSwgLTEpOwotICAg
IH0KLQotICAgIC8vIEV2ZW4gaWYgd2UgZG9uJ3QgZXhwb3NlIGxpc3QgbWFya2VycyB0byBBc3Np
c3RpdmUKLSAgICAvLyBUZWNobm9sb2dpZXMsIHdlIG5lZWQgdG8gaGF2ZSBhIHdheSB0byBtZWFz
dXJlIHRoZWlyIGxlbmd0aAotICAgIC8vIGZvciB0aG9zZSBjYXNlcyB3aGVuIGl0J3MgbmVlZGVk
IHRvIHRha2UgaXQgaW50byBhY2NvdW50Ci0gICAgLy8gc2VwYXJhdGVseSAoYXMgaW4gZ2V0QWNj
ZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldCkKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
b2JqZWN0LT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0
TWFya2VyKCkpIHsKLSAgICAgICAgUmVuZGVyTGlzdE1hcmtlciogbWFya2VyID0gdG9SZW5kZXJM
aXN0TWFya2VyKHJlbmRlcmVyKTsKLSAgICAgICAgcmV0dXJuIG1hcmtlci0+dGV4dCgpLmxlbmd0
aCgpICsgbWFya2VyLT5zdWZmaXgoKS5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldEFjY2Vzc2liaWxpdHlP
YmplY3RGb3JPZmZzZXQoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBndWludCBv
ZmZzZXQsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCogcmVzdWx0OwotICAgIGd1aW50IGxlbmd0aCA9IGFjY2Vzc2li
aWxpdHlPYmplY3RMZW5ndGgob2JqZWN0KTsKLSAgICBpZiAobGVuZ3RoID4gb2Zmc2V0KSB7Ci0g
ICAgICAgICpzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgICplbmRPZmZzZXQgPSBsZW5ndGg7Ci0g
ICAgICAgIHJlc3VsdCA9IG9iamVjdDsKLSAgICB9IGVsc2UgewotICAgICAgICAqc3RhcnRPZmZz
ZXQgPSAtMTsKLSAgICAgICAgKmVuZE9mZnNldCA9IC0xOwotICAgICAgICByZXN1bHQgPSAwOwot
ICAgIH0KLQotICAgIGlmICghb2JqZWN0LT5maXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RD
aGlsZCgpOwotICAgIGd1aW50IGN1cnJlbnRPZmZzZXQgPSAwOwotICAgIGd1aW50IGNoaWxkUG9z
aXRpb24gPSAwOwotICAgIHdoaWxlIChjaGlsZCAmJiBjdXJyZW50T2Zmc2V0IDw9IG9mZnNldCkg
ewotICAgICAgICBndWludCBjaGlsZExlbmd0aCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgo
Y2hpbGQpOwotICAgICAgICBjdXJyZW50T2Zmc2V0ID0gY2hpbGRMZW5ndGggKyBjaGlsZFBvc2l0
aW9uOwotICAgICAgICBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkgewotICAgICAgICAgICAg
Z2ludCBjaGlsZFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgZ2ludCBjaGlsZEVuZE9mZnNldDsK
LSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGdyYW5kQ2hpbGQgPSBnZXRB
Y2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KGNoaWxkLCBvZmZzZXQtY2hpbGRQb3NpdGlvbiwg
ICZjaGlsZFN0YXJ0T2Zmc2V0LCAmY2hpbGRFbmRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNo
aWxkU3RhcnRPZmZzZXQgPj0gMCkgewotICAgICAgICAgICAgICAgICpzdGFydE9mZnNldCA9IGNo
aWxkU3RhcnRPZmZzZXQgKyBjaGlsZFBvc2l0aW9uOwotICAgICAgICAgICAgICAgICplbmRPZmZz
ZXQgPSBjaGlsZEVuZE9mZnNldCArIGNoaWxkUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gZ3JhbmRDaGlsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNoaWxkUG9zaXRpb24gKz0gY2hpbGRMZW5ndGg7Ci0gICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldFJ1bkF0dHJpYnV0ZXNGcm9tQWNj
ZXNpYmlsaXR5T2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGVsZW1lbnQsIGdpbnQg
b2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3QgKmNoaWxkID0gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9m
ZnNldChlbGVtZW50LCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgIGlmICgh
Y2hpbGQpIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gLTE7Ci0gICAgICAgICplbmRPZmZzZXQg
PSAtMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBk
ZWZhdWx0QXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3Qo
ZWxlbWVudCk7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBjaGlsZEF0dHJpYnV0ZXMgPSBnZXRBdHRy
aWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNoaWxkKTsKLQotICAgIHJldHVybiBhdHRy
aWJ1dGVTZXREaWZmZXJlbmNlKGNoaWxkQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpOwot
fQotCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9y
dW5fYXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZz
ZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdDsKLQotICAgIGlm
ICghY29yZU9iamVjdCkgewotICAgICAgICAqc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICAqZW5k
T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudCh0ZXh0KTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKG9mZnNldCA9PSAtMSkKLSAgICAgICAgb2Zmc2V0ID0g
YXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0KTsKLQotICAgIHJlc3VsdCA9IGdldFJ1bkF0
dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QsIG9mZnNldCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7Ci0KLSAgICBpZiAoKnN0YXJ0T2Zmc2V0IDwgMCkgewotICAgICAg
ICAqc3RhcnRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICplbmRPZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCog
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEF0a1RleHQqIHRl
eHQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7
Ci0gICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
U2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb3JlT2JqZWN0KTsKLX0KLQotc3RhdGljIEludFJl
Y3QgdGV4dEV4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBsZW5n
dGgsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCi17Ci0gICAgZ2NoYXIqIHRleHRDb250ZW50ID0gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCh0ZXh0LCBzdGFydE9mZnNldCwgLTEpOwotICAg
IGdpbnQgdGV4dExlbmd0aCA9IGdfdXRmOF9zdHJsZW4odGV4dENvbnRlbnQsIC0xKTsKLQotICAg
IC8vIFRoZSBmaXJzdCBjYXNlIChlbmRPZmZzZXQgb2YgLTEpIHNob3VsZCB3b3JrLCBidXQgc2Vl
bXMgYnJva2VuIGZvciBhbGwgR3RrKyBhcHBzLgotICAgIGdpbnQgcmFuZ2VMZW5ndGggPSBsZW5n
dGg7Ci0gICAgaWYgKHJhbmdlTGVuZ3RoIDwgMCB8fCByYW5nZUxlbmd0aCA+IHRleHRMZW5ndGgp
Ci0gICAgICAgIHJhbmdlTGVuZ3RoID0gdGV4dExlbmd0aDsKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLQotICAgIEludFJlY3QgZXh0ZW50cyA9IGNv
cmVPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFydE9mZnNldCwg
cmFuZ2VMZW5ndGgpKTsKLSAgICBzd2l0Y2ggKGNvb3JkcykgewotICAgIGNhc2UgQVRLX1hZX1ND
UkVFTjoKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICBleHRlbnRzID0gZG9jdW1lbnQtPnZpZXcoKS0+Y29udGVudHNU
b1NjcmVlbihleHRlbnRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVEtfWFlfV0lORE9X
OgotICAgICAgICAvLyBOby1vcAotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZXh0ZW50czsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hh
cmFjdGVyX2V4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHgsIGdpbnQq
IHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCi17Ci0g
ICAgSW50UmVjdCBleHRlbnRzID0gdGV4dEV4dGVudHModGV4dCwgb2Zmc2V0LCAxLCBjb29yZHMp
OwotICAgICp4ID0gZXh0ZW50cy54KCk7Ci0gICAgKnkgPSBleHRlbnRzLnkoKTsKLSAgICAqd2lk
dGggPSBleHRlbnRzLndpZHRoKCk7Ci0gICAgKmhlaWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMo
QXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nvb3Jk
VHlwZSBjb29yZHMsIEF0a1RleHRSZWN0YW5nbGUqIHJlY3QpCi17Ci0gICAgSW50UmVjdCBleHRl
bnRzID0gdGV4dEV4dGVudHModGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zm
c2V0LCBjb29yZHMpOwotICAgIHJlY3QtPnggPSBleHRlbnRzLngoKTsKLSAgICByZWN0LT55ID0g
ZXh0ZW50cy55KCk7Ci0gICAgcmVjdC0+d2lkdGggPSBleHRlbnRzLndpZHRoKCk7Ci0gICAgcmVj
dC0+aGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KEF0a1RleHQqIHRleHQpCi17Ci0gICAg
cmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY29yZSh0ZXh0KSk7Ci19Ci0KLXN0YXRp
YyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludChBdGtUZXh0
KiB0ZXh0LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlIGNvb3JkcykKLXsKLSAgICAvLyBG
SVhNRTogVXNlIHRoZSBBdGtDb29yZFR5cGUKLSAgICAvLyBUT0RPOiBJcyBpdCBjb3JyZWN0IHRv
IGlnbm9yZSByYW5nZS5sZW5ndGg/Ci0gICAgSW50UG9pbnQgcG9zKHgsIHkpOwotICAgIFBsYWlu
VGV4dFJhbmdlIHJhbmdlID0gY29yZSh0ZXh0KS0+ZG9BWFJhbmdlRm9yUG9zaXRpb24ocG9zKTsK
LSAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9m
ZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uLCBnaW50JiBzdGFydE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0KQot
ewotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgc2VsZWN0aW9uIGRv
ZXNuJ3QgYWZmZWN0IHRoZSBzZWxlY3RlZCBub2RlLgotICAgIGlmICghc2VsZWN0aW9uQmVsb25n
c1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgZXhhY3Qgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgaW4g
dGhlCi0gICAgLy8gc2VsZWN0ZWQgbm9kZSB0aGF0IGludGVyc2VjdHMgdGhlIHNlbGVjdGlvbiwg
dG8gbGF0ZXIgb24gZ2V0Ci0gICAgLy8gdGhlIHJpZ2h0IHZhbHVlcyBmb3IgdGhlIGVmZmVjdGl2
ZSBzdGFydCBhbmQgZW5kIG9mZnNldHMuCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
UG9zaXRpb24gbm9kZVJhbmdlU3RhcnQ7Ci0gICAgUG9zaXRpb24gbm9kZVJhbmdlRW5kOwotICAg
IE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0LT5ub2RlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxS
YW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotCi0gICAgLy8gSWYgdGhlIHNl
bGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgZmlyc3QKLSAgICAvLyBw
b3NzaWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0Ci0g
ICAgLy8gbm9kZVJhbmdlU3RhcnQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBz
ZWxlY3Rpb24ncwotICAgIC8vIHN0YXJ0IHBvc2l0aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8gdGhl
IG5vZGUgYW55d2F5KS4KLSAgICBOb2RlKiBmaXJzdExlYWZOb2RlID0gbm9kZS0+Zmlyc3REZXNj
ZW5kYW50KCk7Ci0gICAgaWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShmaXJzdExlYWZOb2Rl
LCAwLCBlYykpCi0gICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlKGZpcnN0TGVhZk5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgbm9kZVJhbmdlU3RhcnQg
PSBzZWxSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBh
ZmZlY3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgbGFzdAotICAgIC8vIHBvc3NpYmxlIHBv
c2l0aW9uIGlzIGFsc28gaW4gdGhlIHNlbGVjdGlvbiwgd2UgbXVzdCBzZXQKLSAgICAvLyBub2Rl
UmFuZ2VFbmQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncwot
ICAgIC8vIGVuZCBwb3NpdGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSku
Ci0gICAgTm9kZSogbGFzdExlYWZOb2RlID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBp
ZiAoc2VsUmFuZ2UtPmlzUG9pbnRJblJhbmdlKGxhc3RMZWFmTm9kZSwgbGFzdE9mZnNldEluTm9k
ZShsYXN0TGVhZk5vZGUpLCBlYykpCi0gICAgICAgIG5vZGVSYW5nZUVuZCA9IGxhc3RQb3NpdGlv
bkluT3JBZnRlck5vZGUobGFzdExlYWZOb2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG5vZGVSYW5n
ZUVuZCA9IHNlbFJhbmdlLT5lbmRQb3NpdGlvbigpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHBvc2l0
aW9uIG9mIHRoZSBzZWxlY3RlZCByYW5nZSBpbnNpZGUgdGhlIG9iamVjdC4KLSAgICBQb3NpdGlv
biBwYXJlbnRGaXJzdFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUp
OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VJblBhcmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+
ZG9jdW1lbnQoKSwgcGFyZW50Rmlyc3RQb3NpdGlvbiwgbm9kZVJhbmdlU3RhcnQpOwotCi0gICAg
Ly8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgotICAgIHN0YXJ0T2Zmc2V0
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZUluUGFyZW50LmdldCgpLCB0cnVlKTsK
LQotICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVt
IG1hcmtlci4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVy
ZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAg
ICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJr
ZXJUZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICBzdGFydE9mZnNldCArPSBtYXJrZXJUZXh0Lmxl
bmd0aCgpOwotICAgIH0KLQotICAgIFJlZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFuZ2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKLSAg
ICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9k
ZVJhbmdlLmdldCgpLCB0cnVlKTsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVf
dGV4dF9nZXRfbl9zZWxlY3Rpb25zKEF0a1RleHQqIHRleHQpCi17Ci0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKTsKLQotICAgIC8vIE9ubHkgcmFuZ2Ug
c2VsZWN0aW9ucyBhcmUgbmVlZGVkIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZAotICAg
IGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMgZm9yIG5vdywgc28gdGhlcmUncyBv
bmx5Ci0gICAgLy8gdHdvIHBvc3NpYmlsaXRpZXMKLSAgICAvLyBBbHNvLCB3ZSBkb24ndCB3YW50
IHRvIGRvIGFueXRoaW5nIGlmIHRoZSBzZWxlY3Rpb24gZG9lcyBub3QKLSAgICAvLyBiZWxvbmcg
dG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvYmplY3QuIFdlIGhhdmUgdG8gY2hlY2sgc2luY2UK
LSAgICAvLyB0aGVyZSdzIG5vIHdheSB0byBnZXQgdGhlIHNlbGVjdGlvbiBmb3IgYSBnaXZlbiBv
YmplY3QsIG9ubHkKLSAgICAvLyB0aGUgZ2xvYmFsIG9uZSAodGhlIEFQSSBpcyBhIGJpdCBjb25m
dXNpbmcpCi0gICAgcmV0dXJuIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBz
ZWxlY3Rpb24pID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVf
dGV4dF9nZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50
KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIC8vIERlZmF1bHQgdmFsdWVz
LCB1bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3ZlZAotICAgICpzdGFydE9mZnNldCA9ICplbmRP
ZmZzZXQgPSAwOwotCi0gICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNl
bGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93Lgot
ICAgIGlmIChzZWxlY3Rpb25OdW0pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gR2V0IHRo
ZSBvZmZzZXRzIG9mIHRoZSBzZWxlY3Rpb24gZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOwotICAgIGdldFNl
bGVjdGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uLCAqc3RhcnRPZmZz
ZXQsICplbmRPZmZzZXQpOwotCi0gICAgLy8gUmV0dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMgdGhh
dCdzIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yCi0gICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhvZCB3
aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uCi0gICAgaWYgKCpzdGFydE9mZnNldCA9PSAqZW5kT2Zm
c2V0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF90ZXh0KHRleHQsICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCk7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rpb24oQXRrVGV4dCog
dGV4dCwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQgZW5kX29mZnNldCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVj
dGlvbk51bSwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpCi17Ci0gICAgLy8gV2Vi
Q29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0
IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAgIGlmIChzZWxlY3Rpb25OdW0pCi0g
ICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QgPSBjb3JlKHRleHQpOwotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8vIENvbnNpZGVyIC0x
IGFuZCBvdXQtb2YtYm91bmQgdmFsdWVzIGFuZCBjb3JyZWN0IHRoZW0gdG8gbGVuZ3RoCi0gICAg
Z2ludCB0ZXh0Q291bnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291
bnQodGV4dCk7Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0IDwgMCB8fCBzdGFydE9mZnNldCA+IHRleHRD
b3VudCkKLSAgICAgICAgc3RhcnRPZmZzZXQgPSB0ZXh0Q291bnQ7Ci0gICAgaWYgKGVuZE9mZnNl
dCA8IDAgfHwgZW5kT2Zmc2V0ID4gdGV4dENvdW50KQotICAgICAgICBlbmRPZmZzZXQgPSB0ZXh0
Q291bnQ7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0cyBmb3IgdGhlIGxp
c3QgaXRlbSBtYXJrZXIuCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3Qt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkp
IHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVy
KS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgaW50IG1hcmtlckxlbmd0aCA9IG1h
cmtlclRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChzdGFydE9mZnNldCA8IG1hcmtlckxlbmd0
aCB8fCBlbmRPZmZzZXQgPCBtYXJrZXJMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7
Ci0KLSAgICAgICAgc3RhcnRPZmZzZXQgLT0gbWFya2VyTGVuZ3RoOwotICAgICAgICBlbmRPZmZz
ZXQgLT0gbWFya2VyTGVuZ3RoOwotICAgIH0KLQotICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5n
ZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwotICAgIFZpc2libGVQb3Np
dGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5n
ZSh0ZXh0UmFuZ2UpOwotICAgIGlmIChyYW5nZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotCi0gICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShy
YW5nZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rp
b25OdW0pCi17Ci0gICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVj
dGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAg
IGlmIChzZWxlY3Rpb25OdW0pCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8vIERvIG5v
dGhpbmcgaWYgY3VycmVudCBzZWxlY3Rpb24gZG9lc24ndCBiZWxvbmcgdG8gdGhlIG9iamVjdAot
ICAgIGlmICghd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHRleHQpKQot
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBTZXQgYSBuZXcgMC1zaXplZCBzZWxlY3Rp
b24gdG8gdGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBvcmRlcgotICAgIC8vIHRvIHNpbXVsYXRlIHNl
bGVjdGlvbiByZW1vdmFsIChHQUlMIHN0eWxlKQotICAgIGdpbnQgY2FyZXRPZmZzZXQgPSB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dCk7Ci0gICAgcmV0dXJuIHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbih0ZXh0LCBzZWxlY3Rpb25OdW0sIGNh
cmV0T2Zmc2V0LCBjYXJldE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQp
Ci17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0K
LSAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9i
amVjdC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0
ZW0oKSkgewotICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVu
ZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICBpbnQgbWFya2VyTGVuZ3Ro
ID0gbWFya2VyVGV4dC5sZW5ndGgoKTsKLSAgICAgICAgaWYgKG9mZnNldCA8IG1hcmtlckxlbmd0
aCkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGFk
anVzdCB0aGUgb2Zmc2V0IGZvciBsaXN0IGl0ZW1zLgotICAgICAgICBvZmZzZXQgLT0gbWFya2Vy
TGVuZ3RoOwotICAgIH0KLQotICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZShvZmZzZXQsIDAp
OwotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBv
c2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOwotICAgIGlmIChyYW5nZS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNp
YmxlUG9zaXRpb25SYW5nZShyYW5nZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2
b2lkIGF0a190ZXh0X2ludGVyZmFjZV9pbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCi17Ci0gICAg
aWZhY2UtPmdldF90ZXh0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dDsKLSAgICBp
ZmFjZS0+Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
dGV4dF9hZnRlcl9vZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF90ZXh0X2F0X29mZnNldCA9IHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfY2hh
cmFjdGVyX2F0X29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9h
dF9vZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF90ZXh0X2JlZm9yZV9vZmZzZXQgPSB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF9jYXJl
dF9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9vZmZzZXQ7Ci0gICAg
aWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1
bl9hdHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRf
Y2hhcmFjdGVyX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJf
ZXh0ZW50czsKLSAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJs
ZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzOwotICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2NvdW50
ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50OwotICAgIGlmYWNl
LT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfb2Zmc2V0
X2F0X3BvaW50OwotICAgIGlmYWNlLT5nZXRfbl9zZWxlY3Rpb25zID0gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zOwotICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uID0gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfc2VsZWN0aW9uOwotCi0gICAgLy8gc2V0IG1ldGhvZHMK
LSAgICBpZmFjZS0+YWRkX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfYWRkX3Nl
bGVjdGlvbjsKLSAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfcmVtb3ZlX3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+c2V0X3NlbGVjdGlvbiA9IHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+c2V0X2NhcmV0X29m
ZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X2NhcmV0X29mZnNldDsKLX0KLQogLy8g
VGFibGUKIAogc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwoQXRrVGFibGUqIHRh
YmxlLCBndWludCByb3csIGd1aW50IGNvbHVtbikKQEAgLTE3ODMsNyArOTYzLDcgQEAgc3RhdGlj
IGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2Rlc2NyaXB0
aW9uKEF0a1RhYmxlKiB0YWIKIHsKICAgICBBdGtPYmplY3QqIGNvbHVtbkhlYWRlciA9IGF0a190
YWJsZV9nZXRfY29sdW1uX2hlYWRlcih0YWJsZSwgY29sdW1uKTsKICAgICBpZiAoY29sdW1uSGVh
ZGVyICYmIEFUS19JU19URVhUKGNvbHVtbkhlYWRlcikpCi0gICAgICAgIHJldHVybiB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKGNvbHVtbkhlYWRlciksIDAsIC0xKTsK
KyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dChBVEtfVEVYVChjb2x1
bW5IZWFkZXIpLCAwLCAtMSk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTE3OTIsNyArOTcyLDcg
QEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2Rl
c2NyaXB0aW9uKEF0a1RhYmxlKiB0YWJsZSwKIHsKICAgICBBdGtPYmplY3QqIHJvd0hlYWRlciA9
IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcih0YWJsZSwgcm93KTsKICAgICBpZiAocm93SGVhZGVy
ICYmIEFUS19JU19URVhUKHJvd0hlYWRlcikpCi0gICAgICAgIHJldHVybiB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKHJvd0hlYWRlciksIDAsIC0xKTsKKyAgICAgICAg
cmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dChBVEtfVEVYVChyb3dIZWFkZXIpLCAw
LCAtMSk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTE4NzQsOCArMTA1NCw3IEBAIHN0YXRpYyBj
b25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAg
IHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZUFj
dGlvbkludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJm
YWNlSW5pdEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25JbnRlcmZhY2VJbml0KSwgMCwg
MH0sCiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nl
c3NpYmxlRWRpdGFibGVUZXh0SW50ZXJmYWNlSW5pdCksIDAsIDB9LAotICAgIHsoR0ludGVyZmFj
ZUluaXRGdW5jKWF0a190ZXh0X2ludGVyZmFjZV9pbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFs
aXplRnVuYykgMCwgMH0sCisgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5j
Pih3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRl
cnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJ
bnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUlu
aXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VJbnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAg
eyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX3RhYmxlX2ludGVyZmFjZV9pbml0LAo=
</data>
<flag name="review"
          id="124567"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123494</attachid>
            <date>2012-01-22 11:16:15 -0800</date>
            <delta_ts>2012-01-23 10:17:39 -0800</delta_ts>
            <desc>14. New files for the implementation of the AtkTable interface</desc>
            <filename>bug-76783-20120122201613.patch</filename>
            <type>text/plain</type>
            <size>25313</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk3ZjUzN2FlZGZiMjYy
MmE4OWExMDM1MzQwYmU2YjQ2MTEwMjk2Yi4uZDVjNTRhMTljNDE5ZDcwMGY4N2Q4OTI3NDVkMDg1
YjBlNTE4YjYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDQ0IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a1RhYmxlIGludGVyZmFjZSwKKyAgICAgICAgY29udGFpbmluZyB0
aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxl
LmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKGNlbGwpOgorICAgICAgICAo
Y2VsbEluZGV4KToKKyAgICAgICAgKGNlbGxBdEluZGV4KToKKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUYWJsZUludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxl
UmVmQXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0SW5kZXhBdCk6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5BdEluZGV4KToKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0F0SW5kZXgpOgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRhYmxlR2V0TkNvbHVtbnMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0
TlJvd3MpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uRXh0ZW50QXQp
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93RXh0ZW50QXQpOgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVyKToKKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVUYWJsZUdldFJvd0hlYWRlcik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRDYXB0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVt
bkRlc2NyaXB0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0Rlc2Ny
aXB0aW9uKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGFibGUuaDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOiBSZW1vdmUgY29kZQorICAgICAgICByZWxhdGVkIHRv
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrVGFibGUgaW50ZXJmYWNlLgorCisgICAgICAg
IEFkZCBuZXcgZmlsZXMgdG8gYnVpbGQgZmlsZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOiBBZGQgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLltofGNwcF0uCisgICAg
ICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKworMjAxMi0wMS0yMiAgTWFyaW8gU2FuY2hleiBQ
cmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVmYWN0b3IgR1RL
J3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIE5ldyBmaWxlcyBmb3IgdGhlIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBBdGtUZXh0IGludGVyZmFjZSwKICAgICAgICAgY29udGFpbmluZyB0
aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyNWU2YWYzZTM5MzcxOGE1M2VmM2NlZjM3
YmRkYzNkYzg1MjE1NGVkLi5lZmI4ZDQyOWRmZTY0MDA2YzcxNTFmOGNjYjRmMmU2OGUzNTkwZTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ0NDAsNiArNDQ0MCw4IEBAIHdl
YmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
U2VsZWN0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VUZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2I1ZjgxYjBlZjU5N2U5YjczNDA4
MTJkYTZmZGZkMDIzMTdlYWFjOS4uZWNkNDRjNjNiMWY1YzViZDYyZDZjY2Q3NTA2NGFjMDk2ZDhl
N2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTc4NCw2ICsxNzg0LDggQEAKICAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCcsCiAg
ICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNl
bGVjdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcCcsCisgICAgICAgICAgICAnYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmgnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmViMTYyNjA3MWI3ZmEzZGVlMmJjMWM0YWEyNTJmMGQ0YTlhNTUxZTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGFibGUuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICoK
KyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIElu
aXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0
ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBh
cmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGFibGUuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94Lmgi
CisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlUYWJsZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIKKyNpbmNsdWRl
ICJIVE1MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmgiCisjaW5jbHVk
ZSAiV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RhYmxlKiB0YWJsZSkK
K3sKKyAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKHRhYmxlKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3Qo
V0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpKTsKK30KKworc3RhdGljIEFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwqIGNlbGwoQXRrVGFibGUqIHRhYmxlLCBndWludCByb3csIGd1aW50IGNvbHVtbikKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOworICAgIGlm
IChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSktPmNlbGxGb3JDb2x1
bW5BbmRSb3coY29sdW1uLCByb3cpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgZ2ludCBj
ZWxsSW5kZXgoQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsLCBBY2Nlc3NpYmlsaXR5VGFi
bGUqIGF4VGFibGUpCit7CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBjZWxsJ3MgaW5kZXggYXMgaWYg
d2UgaGFkIGEgdHJhZGl0aW9uYWwgR3RrKyB0YWJsZSBpbgorICAgIC8vIHdoaWNoIGNlbGxzIGFy
ZSBhbGwgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZSB0YWJsZSwgYXJyYW5nZWQgcm93LWZpcnN0Lgor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhbGxD
ZWxsczsKKyAgICBheFRhYmxlLT5jZWxscyhhbGxDZWxscyk7CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yOjppdGVyYXRvciBwb3NpdGlvbjsKKyAg
ICBwb3NpdGlvbiA9IHN0ZDo6ZmluZChhbGxDZWxscy5iZWdpbigpLCBhbGxDZWxscy5lbmQoKSwg
YXhDZWxsKTsKKyAgICBpZiAocG9zaXRpb24gPT0gYWxsQ2VsbHMuZW5kKCkpCisgICAgICAgIHJl
dHVybiAtMTsKKyAgICByZXR1cm4gcG9zaXRpb24gLSBhbGxDZWxscy5iZWdpbigpOworfQorCitz
dGF0aWMgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbEF0SW5kZXgoQXRrVGFibGUqIHRhYmxl
LCBnaW50IGluZGV4KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29y
ZSh0YWJsZSk7CisgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qo
KSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgYWxsQ2VsbHM7CisgICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+
KGFjY1RhYmxlKS0+Y2VsbHMoYWxsQ2VsbHMpOworICAgICAgICBpZiAoMCA8PSBpbmRleCAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgYWxsQ2VsbHMuc2l6ZSgpKSB7CisgICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NDZWxsID0gYWxsQ2VsbHMuYXQoaW5kZXgpLmdl
dCgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqPihhY2NDZWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVJbnRlcmZhY2VJbml0KEF0a1RhYmxlSWZhY2UqIGlmYWNl
KQoreworICAgIGlmYWNlLT5yZWZfYXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVSZWZBdDsKKyAg
ICBpZmFjZS0+Z2V0X2luZGV4X2F0ID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0SW5kZXhBdDsK
KyAgICBpZmFjZS0+Z2V0X2NvbHVtbl9hdF9pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdl
dENvbHVtbkF0SW5kZXg7CisgICAgaWZhY2UtPmdldF9yb3dfYXRfaW5kZXggPSB3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXRSb3dBdEluZGV4OworICAgIGlmYWNlLT5nZXRfbl9jb2x1bW5zID0gd2Vi
a2l0QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnM7CisgICAgaWZhY2UtPmdldF9uX3Jvd3MgPSB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROUm93czsKKyAgICBpZmFjZS0+Z2V0X2NvbHVtbl9leHRl
bnRfYXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5FeHRlbnRBdDsKKyAgICBpZmFj
ZS0+Z2V0X3Jvd19leHRlbnRfYXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dFeHRlbnRB
dDsKKyAgICBpZmFjZS0+Z2V0X2NvbHVtbl9oZWFkZXIgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVH
ZXRDb2x1bW5IZWFkZXI7CisgICAgaWZhY2UtPmdldF9yb3dfaGVhZGVyID0gd2Via2l0QWNjZXNz
aWJsZVRhYmxlR2V0Um93SGVhZGVyOworICAgIGlmYWNlLT5nZXRfY2FwdGlvbiA9IHdlYmtpdEFj
Y2Vzc2libGVUYWJsZUdldENhcHRpb247CisgICAgaWZhY2UtPmdldF9jb2x1bW5fZGVzY3JpcHRp
b24gPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5EZXNjcmlwdGlvbjsKKyAgICBpZmFj
ZS0+Z2V0X3Jvd19kZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0Rlc2Ny
aXB0aW9uOworfQorCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZVJlZkF0KEF0a1Rh
YmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQoreworICAgIEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwqIGF4Q2VsbCA9IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsKKyAgICBpZiAoIWF4
Q2VsbCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGF4Q2VsbC0+d3JhcHBlcigpOwor
fQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldEluZGV4QXQoQXRrVGFibGUqIHRhYmxl
LCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCit7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCog
YXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4pOworICAgIEFjY2Vzc2liaWxpdHlUYWJs
ZSogYXhUYWJsZSA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KGNvcmUodGFibGUp
KTsKKyAgICByZXR1cm4gY2VsbEluZGV4KGF4Q2VsbCwgYXhUYWJsZSk7Cit9CisKK2dpbnQgd2Vi
a2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uQXRJbmRleChBdGtUYWJsZSogdGFibGUsIGdpbnQg
aW5kZXgpCit7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbEF0SW5k
ZXgodGFibGUsIGluZGV4KTsKKyAgICBpZiAoYXhDZWxsKSB7CisgICAgICAgIHBhaXI8aW50LCBp
bnQ+IGNvbHVtblJhbmdlOworICAgICAgICBheENlbGwtPmNvbHVtbkluZGV4UmFuZ2UoY29sdW1u
UmFuZ2UpOworICAgICAgICByZXR1cm4gY29sdW1uUmFuZ2UuZmlyc3Q7CisgICAgfQorICAgIHJl
dHVybiAtMTsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dBdEluZGV4KEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxs
KiBheENlbGwgPSBjZWxsQXRJbmRleCh0YWJsZSwgaW5kZXgpOworICAgIGlmIChheENlbGwpIHsK
KyAgICAgICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7CisgICAgICAgIGF4Q2VsbC0+cm93SW5k
ZXhSYW5nZShyb3dSYW5nZSk7CisgICAgICAgIHJldHVybiByb3dSYW5nZS5maXJzdDsKKyAgICB9
CisgICAgcmV0dXJuIC0xOworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2x1
bW5zKEF0a1RhYmxlKiB0YWJsZSkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJs
ZSA9IGNvcmUodGFibGUpOworICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUq
PihhY2NUYWJsZSktPmNvbHVtbkNvdW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2dpbnQgd2Vi
a2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvd3MoQXRrVGFibGUqIHRhYmxlKQoreworICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CisgICAgaWYgKGFjY1RhYmxl
LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KGFjY1RhYmxlKS0+cm93Q291bnQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5FeHRlbnRBdChB
dGtUYWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50IGNvbHVtbikKK3sKKyAgICBBY2Nlc3NpYmls
aXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNvbHVtbik7CisgICAgaWYg
KGF4Q2VsbCkgeworICAgICAgICBwYWlyPGludCwgaW50PiBjb2x1bW5SYW5nZTsKKyAgICAgICAg
YXhDZWxsLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJhbmdlKTsKKyAgICAgICAgcmV0dXJuIGNv
bHVtblJhbmdlLnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2dpbnQgd2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0Um93RXh0ZW50QXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdywg
Z2ludCBjb2x1bW4pCit7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2Vs
bCh0YWJsZSwgcm93LCBjb2x1bW4pOworICAgIGlmIChheENlbGwpIHsKKyAgICAgICAgcGFpcjxp
bnQsIGludD4gcm93UmFuZ2U7CisgICAgICAgIGF4Q2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5n
ZSk7CisgICAgICAgIHJldHVybiByb3dSYW5nZS5zZWNvbmQ7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRlcihB
dGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CisgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgYWxsQ29sdW1uSGVhZGVyczsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5jb2x1bW5IZWFkZXJzKGFsbENvbHVt
bkhlYWRlcnMpOworICAgICAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCA9IGFsbENvbHVtbkhlYWRl
cnMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY29sdW1uQ291bnQ7
ICsraykgeworICAgICAgICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFuZ2U7CisgICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbCo+KGFsbENvbHVtbkhlYWRlcnMuYXQoaykuZ2V0KCkpOworICAgICAgICAg
ICAgY2VsbC0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7CisgICAgICAgICAgICBpZiAo
Y29sdW1uUmFuZ2UuZmlyc3QgPD0gY29sdW1uICYmIGNvbHVtbiA8IGNvbHVtblJhbmdlLmZpcnN0
ICsgY29sdW1uUmFuZ2Uuc2Vjb25kKQorICAgICAgICAgICAgICAgIHJldHVybiBhbGxDb2x1bW5I
ZWFkZXJzW2tdLT53cmFwcGVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK0F0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKEF0a1RhYmxl
KiB0YWJsZSwgZ2ludCByb3cpCit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUg
PSBjb3JlKHRhYmxlKTsKKyAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBhbGxSb3dIZWFkZXJzOworICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGUqPihhY2NUYWJsZSktPnJvd0hlYWRlcnMoYWxsUm93SGVhZGVycyk7CisgICAgICAg
IHVuc2lnbmVkIHJvd0NvdW50ID0gYWxsUm93SGVhZGVycy5zaXplKCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCByb3dDb3VudDsgKytrKSB7CisgICAgICAgICAgICBwYWlyPGlu
dCwgaW50PiByb3dSYW5nZTsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNl
bGwgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4oYWxsUm93SGVhZGVycy5h
dChrKS5nZXQoKSk7CisgICAgICAgICAgICBjZWxsLT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsK
KyAgICAgICAgICAgIGlmIChyb3dSYW5nZS5maXJzdCA8PSByb3cgJiYgcm93IDwgcm93UmFuZ2Uu
Zmlyc3QgKyByb3dSYW5nZS5zZWNvbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFsbFJvd0hl
YWRlcnNba10tPndyYXBwZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30K
KworQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0
YWJsZSkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUp
OworICAgIGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGFjY1RhYmxlLT5ub2RlKCk7CisgICAgICAgIGlmIChub2RlICYm
IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykpIHsKKyAgICAgICAgICAgIEhU
TUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxl
bWVudCo+KG5vZGUpLT5jYXB0aW9uKCk7CisgICAgICAgICAgICBpZiAoY2FwdGlvbikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Zmlyc3RBY2Nlc3NpYmxlT2Jq
ZWN0RnJvbU5vZGUoY2FwdGlvbi0+cmVuZGVyZXIoKS0+bm9kZSgpKS0+d3JhcHBlcigpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitjb25zdCBnY2hhciogd2Via2l0QWNj
ZXNzaWJsZVRhYmxlR2V0Q29sdW1uRGVzY3JpcHRpb24oQXRrVGFibGUqIHRhYmxlLCBnaW50IGNv
bHVtbikKK3sKKyAgICBBdGtPYmplY3QqIGNvbHVtbkhlYWRlciA9IGF0a190YWJsZV9nZXRfY29s
dW1uX2hlYWRlcih0YWJsZSwgY29sdW1uKTsKKyAgICBpZiAoY29sdW1uSGVhZGVyICYmIEFUS19J
U19URVhUKGNvbHVtbkhlYWRlcikpCisgICAgICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFRleHQoQVRLX1RFWFQoY29sdW1uSGVhZGVyKSwgMCwgLTEpOworCisgICAgcmV0dXJuIDA7
Cit9CisKK2NvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dEZXNjcmlwdGlv
bihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQoreworICAgIEF0a09iamVjdCogcm93SGVhZGVy
ID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKHRhYmxlLCByb3cpOworICAgIGlmIChyb3dIZWFk
ZXIgJiYgQVRLX0lTX1RFWFQocm93SGVhZGVyKSkKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0VGV4dChBVEtfVEVYVChyb3dIZWFkZXIpLCAwLCAtMSk7CisKKyAgICByZXR1
cm4gMDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRj
OTYzZjY1ZjQ0MDAzY2Q5NzU2MTM0NTdlYzlkODRiYjg0YTEyMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VUYWJsZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVh
bnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGFibGVfaAorI2RlZmluZSBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGFibGVfaAorCisjaW5jbHVkZSA8YXRrL2F0ay5oPgorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVU
YWJsZUludGVyZmFjZUluaXQoQXRrVGFibGVJZmFjZSopOworQXRrT2JqZWN0KiB3ZWJraXRBY2Nl
c3NpYmxlVGFibGVSZWZBdChBdGtUYWJsZSosIGdpbnQgcm93LCBnaW50IGNvbHVtbik7CitnaW50
IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldEluZGV4QXQoQXRrVGFibGUqLCBnaW50IHJvdywgZ2lu
dCBjb2x1bW4pOworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5BdEluZGV4KEF0
a1RhYmxlKiwgZ2ludCBpbmRleCk7CitnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0F0
SW5kZXgoQXRrVGFibGUqLCBnaW50IGluZGV4KTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxl
R2V0TkNvbHVtbnMoQXRrVGFibGUqKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJv
d3MoQXRrVGFibGUqKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uRXh0ZW50
QXQoQXRrVGFibGUqLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pOworZ2ludCB3ZWJraXRBY2Nlc3Np
YmxlVGFibGVHZXRSb3dFeHRlbnRBdChBdGtUYWJsZSosIGdpbnQgcm93LCBnaW50IGNvbHVtbik7
CitBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRlcihBdGtUYWJs
ZSosIGdpbnQgY29sdW1uKTsKK0F0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93
SGVhZGVyKEF0a1RhYmxlKiwgZ2ludCByb3cpOworQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKik7Citjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJs
ZVRhYmxlR2V0Q29sdW1uRGVzY3JpcHRpb24oQXRrVGFibGUqLCBnaW50IGNvbHVtbik7Citjb25z
dCBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93RGVzY3JpcHRpb24oQXRrVGFibGUq
LCBnaW50IHJvdyk7CisKKyNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCmluZGV4IDhiMjE3MjY4ZmM0OTBmOTAwZTcy
ODM4MjhlMzA3NWJjOGQ0MTFkZjUuLjM3MmE3NzlhNDFjN2IzMWIwOTBlYmQzMTQxNjMxNjRmMzJi
OTcyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTcxLDYgKzcxLDcgQEAK
ICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUYWJsZS5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKICNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgpAQCAtMTE2LDExICsxMTcsNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZShBdGtPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gY29yZShXRUJLSVRfQUNDRVNTSUJM
RShvYmplY3QpKTsKIH0KIAotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrVGFi
bGUqIHRhYmxlKQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGFibGUpKTsKLX0KLQog
c3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrVmFsdWUqIHZhbHVlKQogewogICAg
IHJldHVybiBjb3JlKEFUS19PQkpFQ1QodmFsdWUpKTsKQEAgLTc5NywyMDMgKzc5Myw2IEBAIHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKHZvaWQpCiAgICAgcmV0dXJuIHR5cGVfdm9sYXRpbGU7
CiB9CiAKLS8vIFRhYmxlCi0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsKEF0
a1RhYmxlKiB0YWJsZSwgZ3VpbnQgcm93LCBndWludCBjb2x1bW4pCi17Ci0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoYWNjVGFibGUtPmlz
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QWNjZXNzaWJpbGl0eVRhYmxlKj4oYWNjVGFibGUpLT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVt
biwgcm93KTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGdpbnQgY2VsbEluZGV4KEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCwgQWNjZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxlKQot
ewotICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VsbCdzIGluZGV4IGFzIGlmIHdlIGhhZCBhIHRyYWRp
dGlvbmFsIEd0aysgdGFibGUgaW4KLSAgICAvLyB3aGljaCBjZWxscyBhcmUgYWxsIGRpcmVjdCBj
aGlsZHJlbiBvZiB0aGUgdGFibGUsIGFycmFuZ2VkIHJvdy1maXJzdC4KLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYWxsQ2VsbHM7Ci0gICAgYXhU
YWJsZS0+Y2VsbHMoYWxsQ2VsbHMpOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3Rvcjo6aXRlcmF0b3IgcG9zaXRpb247Ci0gICAgcG9zaXRpb24gPSBz
dGQ6OmZpbmQoYWxsQ2VsbHMuYmVnaW4oKSwgYWxsQ2VsbHMuZW5kKCksIGF4Q2VsbCk7Ci0gICAg
aWYgKHBvc2l0aW9uID09IGFsbENlbGxzLmVuZCgpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
cmV0dXJuIHBvc2l0aW9uIC0gYWxsQ2VsbHMuYmVnaW4oKTsKLX0KLQotc3RhdGljIEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGwqIGNlbGxBdEluZGV4KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkK
LXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAg
IGlmIChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFsbENlbGxz
OwotICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSktPmNl
bGxzKGFsbENlbGxzKTsKLSAgICAgICAgaWYgKDAgPD0gaW5kZXggJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4KSA8IGFsbENlbGxzLnNpemUoKSkgewotICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogYWNjQ2VsbCA9IGFsbENlbGxzLmF0KGluZGV4KS5nZXQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4oYWNjQ2VsbCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3Qq
IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX3JlZl9hdChBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93
LCBnaW50IGNvbHVtbikKLXsKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBj
ZWxsKHRhYmxlLCByb3csIGNvbHVtbik7Ci0gICAgaWYgKCFheENlbGwpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBheENlbGwtPndyYXBwZXIoKTsKLX0KLQotc3RhdGljIGdpbnQgd2Vi
a2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2luZGV4X2F0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBy
b3csIGdpbnQgY29sdW1uKQotewotICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9
IGNlbGwodGFibGUsIHJvdywgY29sdW1uKTsKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIGF4VGFi
bGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihjb3JlKHRhYmxlKSk7Ci0gICAg
cmV0dXJuIGNlbGxJbmRleChheENlbGwsIGF4VGFibGUpOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJr
aXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4KEF0a1RhYmxlKiB0YWJsZSwg
Z2ludCBpbmRleCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxs
QXRJbmRleCh0YWJsZSwgaW5kZXgpOwotICAgIGlmIChheENlbGwpIHsKLSAgICAgICAgcGFpcjxp
bnQsIGludD4gY29sdW1uUmFuZ2U7Ci0gICAgICAgIGF4Q2VsbC0+Y29sdW1uSW5kZXhSYW5nZShj
b2x1bW5SYW5nZSk7Ci0gICAgICAgIHJldHVybiBjb2x1bW5SYW5nZS5maXJzdDsKLSAgICB9Ci0g
ICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9n
ZXRfcm93X2F0X2luZGV4KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKLXsKLSAgICBBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsQXRJbmRleCh0YWJsZSwgaW5kZXgpOwot
ICAgIGlmIChheENlbGwpIHsKLSAgICAgICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7Ci0gICAg
ICAgIGF4Q2VsbC0+cm93SW5kZXhSYW5nZShyb3dSYW5nZSk7Ci0gICAgICAgIHJldHVybiByb3dS
YW5nZS5maXJzdDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJr
aXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfbl9jb2x1bW5zKEF0a1RhYmxlKiB0YWJsZSkKLXsKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlmIChh
Y2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSktPmNvbHVtbkNvdW50KCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxl
X2dldF9uX3Jvd3MoQXRrVGFibGUqIHRhYmxlKQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGFjY1RhYmxlID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZSo+KGFjY1RhYmxlKS0+cm93Q291bnQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh
dGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVtbl9leHRlbnRfYXQoQXRr
VGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCi17Ci0gICAgQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4pOwotICAgIGlmIChh
eENlbGwpIHsKLSAgICAgICAgcGFpcjxpbnQsIGludD4gY29sdW1uUmFuZ2U7Ci0gICAgICAgIGF4
Q2VsbC0+Y29sdW1uSW5kZXhSYW5nZShjb2x1bW5SYW5nZSk7Ci0gICAgICAgIHJldHVybiBjb2x1
bW5SYW5nZS5zZWNvbmQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgZ2ludCB3
ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2V4dGVudF9hdChBdGtUYWJsZSogdGFibGUs
IGdpbnQgcm93LCBnaW50IGNvbHVtbikKLXsKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBh
eENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNvbHVtbik7Ci0gICAgaWYgKGF4Q2VsbCkgewotICAg
ICAgICBwYWlyPGludCwgaW50PiByb3dSYW5nZTsKLSAgICAgICAgYXhDZWxsLT5yb3dJbmRleFJh
bmdlKHJvd1JhbmdlKTsKLSAgICAgICAgcmV0dXJuIHJvd1JhbmdlLnNlY29uZDsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3Rh
YmxlX2dldF9jb2x1bW5faGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBjb2x1bW4pCi17Ci0g
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAo
YWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7Ci0gICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhbGxDb2x1bW5IZWFk
ZXJzOwotICAgICAgICBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihhY2NUYWJsZSkt
PmNvbHVtbkhlYWRlcnMoYWxsQ29sdW1uSGVhZGVycyk7Ci0gICAgICAgIHVuc2lnbmVkIGNvbHVt
bkNvdW50ID0gYWxsQ29sdW1uSGVhZGVycy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBjb2x1bW5Db3VudDsgKytrKSB7Ci0gICAgICAgICAgICBwYWlyPGludCwgaW50
PiBjb2x1bW5SYW5nZTsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGNlbGwg
PSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKj4oYWxsQ29sdW1uSGVhZGVycy5h
dChrKS5nZXQoKSk7Ci0gICAgICAgICAgICBjZWxsLT5jb2x1bW5JbmRleFJhbmdlKGNvbHVtblJh
bmdlKTsKLSAgICAgICAgICAgIGlmIChjb2x1bW5SYW5nZS5maXJzdCA8PSBjb2x1bW4gJiYgY29s
dW1uIDwgY29sdW1uUmFuZ2UuZmlyc3QgKyBjb2x1bW5SYW5nZS5zZWNvbmQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGFsbENvbHVtbkhlYWRlcnNba10tPndyYXBwZXIoKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vz
c2libGVfdGFibGVfZ2V0X3Jvd19oZWFkZXIoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdykKLXsK
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlm
IChhY2NUYWJsZS0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFsbFJvd0hlYWRl
cnM7Ci0gICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KGFjY1RhYmxlKS0+
cm93SGVhZGVycyhhbGxSb3dIZWFkZXJzKTsKLSAgICAgICAgdW5zaWduZWQgcm93Q291bnQgPSBh
bGxSb3dIZWFkZXJzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IHJv
d0NvdW50OyArK2spIHsKLSAgICAgICAgICAgIHBhaXI8aW50LCBpbnQ+IHJvd1JhbmdlOwotICAg
ICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwqPihhbGxSb3dIZWFkZXJzLmF0KGspLmdldCgpKTsKLSAgICAgICAg
ICAgIGNlbGwtPnJvd0luZGV4UmFuZ2Uocm93UmFuZ2UpOwotICAgICAgICAgICAgaWYgKHJvd1Jh
bmdlLmZpcnN0IDw9IHJvdyAmJiByb3cgPCByb3dSYW5nZS5maXJzdCArIHJvd1JhbmdlLnNlY29u
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gYWxsUm93SGVhZGVyc1trXS0+d3JhcHBlcigpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3
ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY2FwdGlvbihBdGtUYWJsZSogdGFibGUpCi17Ci0g
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAo
YWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7Ci0gICAgICAgIE5vZGUq
IG5vZGUgPSBhY2NUYWJsZS0+bm9kZSgpOwotICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGFibGVUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MVGFibGVDYXB0
aW9uRWxlbWVudCogY2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihub2Rl
KS0+Y2FwdGlvbigpOwotICAgICAgICAgICAgaWYgKGNhcHRpb24pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2Rl
KGNhcHRpb24tPnJlbmRlcmVyKCktPm5vZGUoKSktPndyYXBwZXIoKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNz
aWJsZV90YWJsZV9nZXRfY29sdW1uX2Rlc2NyaXB0aW9uKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBj
b2x1bW4pCi17Ci0gICAgQXRrT2JqZWN0KiBjb2x1bW5IZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2Nv
bHVtbl9oZWFkZXIodGFibGUsIGNvbHVtbik7Ci0gICAgaWYgKGNvbHVtbkhlYWRlciAmJiBBVEtf
SVNfVEVYVChjb2x1bW5IZWFkZXIpKQotICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRl
eHRHZXRUZXh0KEFUS19URVhUKGNvbHVtbkhlYWRlciksIDAsIC0xKTsKLQotICAgIHJldHVybiAw
OwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9y
b3dfZGVzY3JpcHRpb24oQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdykKLXsKLSAgICBBdGtPYmpl
Y3QqIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcih0YWJsZSwgcm93KTsKLSAg
ICBpZiAocm93SGVhZGVyICYmIEFUS19JU19URVhUKHJvd0hlYWRlcikpCi0gICAgICAgIHJldHVy
biB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQVRLX1RFWFQocm93SGVhZGVyKSwgMCwgLTEp
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a190YWJsZV9pbnRlcmZhY2Vf
aW5pdChBdGtUYWJsZUlmYWNlKiBpZmFjZSkKLXsKLSAgICBpZmFjZS0+cmVmX2F0ID0gd2Via2l0
X2FjY2Vzc2libGVfdGFibGVfcmVmX2F0OwotICAgIGlmYWNlLT5nZXRfaW5kZXhfYXQgPSB3ZWJr
aXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfaW5kZXhfYXQ7Ci0gICAgaWZhY2UtPmdldF9jb2x1bW5f
YXRfaW5kZXggPSB3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2F0X2luZGV4Owot
ICAgIGlmYWNlLT5nZXRfcm93X2F0X2luZGV4ID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0
X3Jvd19hdF9pbmRleDsKLSAgICBpZmFjZS0+Z2V0X25fY29sdW1ucyA9IHdlYmtpdF9hY2Nlc3Np
YmxlX3RhYmxlX2dldF9uX2NvbHVtbnM7Ci0gICAgaWZhY2UtPmdldF9uX3Jvd3MgPSB3ZWJraXRf
YWNjZXNzaWJsZV90YWJsZV9nZXRfbl9yb3dzOwotICAgIGlmYWNlLT5nZXRfY29sdW1uX2V4dGVu
dF9hdCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZXh0ZW50X2F0OwotICAg
IGlmYWNlLT5nZXRfcm93X2V4dGVudF9hdCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9y
b3dfZXh0ZW50X2F0OwotICAgIGlmYWNlLT5nZXRfY29sdW1uX2hlYWRlciA9IHdlYmtpdF9hY2Nl
c3NpYmxlX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyOwotICAgIGlmYWNlLT5nZXRfcm93X2hlYWRl
ciA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfaGVhZGVyOwotICAgIGlmYWNlLT5n
ZXRfY2FwdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jYXB0aW9uOwotICAgIGlm
YWNlLT5nZXRfY29sdW1uX2Rlc2NyaXB0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0
X2NvbHVtbl9kZXNjcmlwdGlvbjsKLSAgICBpZmFjZS0+Z2V0X3Jvd19kZXNjcmlwdGlvbiA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfZGVzY3JpcHRpb247Ci19Ci0KIHN0YXRpYyB2
b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldEN1cnJlbnRWYWx1ZShBdGtWYWx1ZSogdmFsdWUs
IEdWYWx1ZSogZ1ZhbHVlKQogewogICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVl
KSk7CkBAIC0xMDU3LDggKzg1Niw3IEBAIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJ
bnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRl
cmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KSwgMCwgMH0s
CiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3Np
YmxlQ29tcG9uZW50SW50ZXJmYWNlSW5pdCksIDAsIDB9LAogICAgIHtyZWludGVycHJldF9jYXN0
PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZUltYWdlSW50ZXJmYWNlSW5pdCks
IDAsIDB9LAotICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a190YWJsZV9pbnRlcmZhY2VfaW5p
dCwKLSAgICAgKEdJbnRlcmZhY2VGaW5hbGl6ZUZ1bmMpIDAsIDB9LAorICAgIHtyZWludGVycHJl
dF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZVRhYmxlSW50ZXJmYWNl
SW5pdCksIDAsIDB9LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4o
d2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7cmVp
bnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVIeXBlcmxp
bmtJbXBsSW50ZXJmYWNlSW5pdCksIDAsIDB9LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRl
cmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJmYWNlSW5pdCksIDAs
IDB9LAo=
</data>
<flag name="review"
          id="124568"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123495</attachid>
            <date>2012-01-22 11:17:50 -0800</date>
            <delta_ts>2012-01-23 10:18:07 -0800</delta_ts>
            <desc>15. New files for the implementation of the AtkValue interface</desc>
            <filename>bug-76783-20120122201748.patch</filename>
            <type>text/plain</type>
            <size>12332</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDVjNTRhMTljNDE5ZDcw
MGY4N2Q4OTI3NDVkMDg1YjBlNTE4YjYyMC4uN2E0MWM0ODM2Mzc0MjNhM2ZjNGIwZWVkODAzM2M5
OGQ4MjAxYzdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMzIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a1ZhbHVlIGludGVyZmFjZSwKKyAgICAgICAgY29udGFpbmluZyB0
aGUgcmVsYXRlZCBjb2RlIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVW
YWx1ZUludGVyZmFjZUluaXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3Vy
cmVudFZhbHVlKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1heGltdW1WYWx1
ZSk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWUpOgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVlKToKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1lbnQpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6
IFJlbW92ZSBjb2RlCisgICAgICAgIHJlbGF0ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBBdGtWYWx1ZSBpbnRlcmZhY2UuCisKKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBidWlsZCBm
aWxlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVmFsdWUuW2h8Y3BwXS4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRv
LgorCisyMDEyLTAxLTIyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBSZWZhY3RvciBHVEsncyBhY2Nlc3NpYmlsaXRpdHkgY29kZSB0
byBiZSBtb3JlIG1vZHVsYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc2NzgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
ICAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RhYmxl
IGludGVyZmFjZSwKICAgICAgICAgY29udGFpbmluZyB0aGUgcmVsYXRlZCBjb2RlIGZyb20gV2Vi
S2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBlZmI4ZDQyOWRmZTY0MDA2YzcxNTFmOGNjYjRmMmU2OGUzNTkwZTJkLi5jMzExMWU1
ZjEzYzEzNWJkYmNhMTI1NmFjN2JhOTc5NGM4MDk4MzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTQ0NDQsNiArNDQ0NCw4IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVRhYmxlLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuaCBcCisJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZh
bHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVVdGlsLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlY2Q0NGM2M2Ix
ZjVjNWJkNjJkNmNjZDc1MDY0YWMwOTZkOGU3ZGFlLi5mYmJmYzIxOTgwYjY0YTMwYzYwYTI4MDQz
MjllMTRiZDEyM2MwNjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNzg4LDYgKzE3ODgsOCBAQAog
ICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
YWJsZS5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmgnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkv
Z3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5jcHAnLAorICAgICAgICAgICAgJ2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5oJywKICAgICAg
ICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAnLAogICAg
ICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmgnLAogICAg
ICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OGU5
OTE2ZGQ1MzNlZmZkN2MzOTMzMGZhMDcwOGM5ODU0MGM4YmE5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVZhbHVlLmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVmFsdWUuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrVmFs
dWUqIHZhbHVlKQoreworICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUodmFsdWUpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJp
bGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRSh2YWx1ZSkpOworfQorCit2b2lkIHdlYmtpdEFj
Y2Vzc2libGVWYWx1ZUludGVyZmFjZUluaXQoQXRrVmFsdWVJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmdldF9jdXJyZW50X3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVu
dFZhbHVlOworICAgIGlmYWNlLT5nZXRfbWF4aW11bV92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVW
YWx1ZUdldE1heGltdW1WYWx1ZTsKKyAgICBpZmFjZS0+Z2V0X21pbmltdW1fdmFsdWUgPSB3ZWJr
aXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWU7CisgICAgaWZhY2UtPnNldF9jdXJyZW50
X3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVlOworICAgIGlmYWNl
LT5nZXRfbWluaW11bV9pbmNyZW1lbnQgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVt
SW5jcmVtZW50OworfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldEN1cnJlbnRWYWx1
ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQoreworICAgIG1lbXNldChnVmFsdWUs
ICAwLCBzaXplb2YoR1ZhbHVlKSk7CisgICAgZ192YWx1ZV9pbml0KGdWYWx1ZSwgR19UWVBFX0RP
VUJMRSk7CisgICAgZ192YWx1ZV9zZXRfZG91YmxlKGdWYWx1ZSwgY29yZSh2YWx1ZSktPnZhbHVl
Rm9yUmFuZ2UoKSk7Cit9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWF4aW11bVZh
bHVlKEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCit7CisgICAgbWVtc2V0KGdWYWx1
ZSwgIDAsIHNpemVvZihHVmFsdWUpKTsKKyAgICBnX3ZhbHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVf
RE9VQkxFKTsKKyAgICBnX3ZhbHVlX3NldF9kb3VibGUoZ1ZhbHVlLCBjb3JlKHZhbHVlKS0+bWF4
VmFsdWVGb3JSYW5nZSgpKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5p
bXVtVmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKK3sKKyAgICBtZW1zZXQo
Z1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOworICAgIGdfdmFsdWVfaW5pdChnVmFsdWUsIEdf
VFlQRV9ET1VCTEUpOworICAgIGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUsIGNvcmUodmFsdWUp
LT5taW5WYWx1ZUZvclJhbmdlKCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVmFs
dWVTZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBjb25zdCBHVmFsdWUqIGdWYWx1ZSkK
K3sKKyAgICBpZiAoIUdfVkFMVUVfSE9MRFNfRE9VQkxFKGdWYWx1ZSkgJiYgIUdfVkFMVUVfSE9M
RFNfSU5UKGdWYWx1ZSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHZhbHVlKTsKKyAgICBpZiAoIWNvcmVPYmplY3Qt
PmNhblNldFZhbHVlQXR0cmlidXRlKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlm
IChHX1ZBTFVFX0hPTERTX0RPVUJMRShnVmFsdWUpKQorICAgICAgICBjb3JlT2JqZWN0LT5zZXRW
YWx1ZShTdHJpbmc6Om51bWJlcihnX3ZhbHVlX2dldF9kb3VibGUoZ1ZhbHVlKSkpOworICAgIGVs
c2UKKyAgICAgICAgY29yZU9iamVjdC0+c2V0VmFsdWUoU3RyaW5nOjpudW1iZXIoZ192YWx1ZV9n
ZXRfaW50KGdWYWx1ZSkpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIHdlYmtpdEFj
Y2Vzc2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1lbnQoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUq
IGdWYWx1ZSkKK3sKKyAgICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOworICAg
IGdfdmFsdWVfaW5pdChnVmFsdWUsIEdfVFlQRV9ET1VCTEUpOworCisgICAgLy8gVGhlcmUncyBu
b3Qgc3VjaCBhIHRoaW5nIGluIHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0aW9uLCB0aHVzIHJldHVy
biB6ZXJvLgorICAgIGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUsIDAuMCk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyNmM1YmRhZTRlYzcxMDc5M2Mz
ZWUzYjI1ZDM1ZDM2MjlhODUyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaApAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlX2gKKyNkZWZpbmUgV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVZhbHVlX2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9pZCB3
ZWJraXRBY2Nlc3NpYmxlVmFsdWVJbnRlcmZhY2VJbml0KEF0a1ZhbHVlSWZhY2UqKTsKK3ZvaWQg
d2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiwgR1ZhbHVlKik7
Cit2b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1heGltdW1WYWx1ZShBdGtWYWx1ZSosIEdW
YWx1ZSopOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWUoQXRrVmFs
dWUqLCBHVmFsdWUqKTsKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVWYWx1ZVNldEN1cnJlbnRW
YWx1ZShBdGtWYWx1ZSosIGNvbnN0IEdWYWx1ZSopOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFs
dWVHZXRNaW5pbXVtSW5jcmVtZW50KEF0a1ZhbHVlKiwgR1ZhbHVlKik7CisKKyNlbmRpZiAvLyBX
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsu
Y3BwCmluZGV4IDM3MmE3NzlhNDFjN2IzMWIwOTBlYmQzMTQxNjMxNjRmMzJiOTcyYTYuLmFjZWIz
MDRhYzdmYjY1NzA2NGQ3OWZhNDBhMjNiY2NmNTc4NzQwNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3Jh
cHBlckF0ay5jcHAKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVRhYmxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuaCIKKyNp
bmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaCIKICNpbmNsdWRlICJXZWJL
aXRBY2Nlc3NpYmxlVXRpbC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAi
dmlzaWJsZV91bml0cy5oIgpAQCAtMTE3LDExICsxMTgsNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZShBdGtPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gY29yZShXRUJLSVRf
QUNDRVNTSUJMRShvYmplY3QpKTsKIH0KIAotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmUoQXRrVmFsdWUqIHZhbHVlKQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodmFsdWUp
KTsKLX0KLQogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZShB
dGtPYmplY3QqIG9iamVjdCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
ID0gY29yZShvYmplY3QpOwpAQCAtNzkzLDYyICs3ODksNiBAQCB3ZWJraXRfYWNjZXNzaWJsZV9n
ZXRfdHlwZSh2b2lkKQogICAgIHJldHVybiB0eXBlX3ZvbGF0aWxlOwogfQogCi1zdGF0aWMgdm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBH
VmFsdWUqIGdWYWx1ZSkKLXsKLSAgICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkp
OwotICAgIGdfdmFsdWVfaW5pdChnVmFsdWUsIEdfVFlQRV9ET1VCTEUpOwotICAgIGdfdmFsdWVf
c2V0X2RvdWJsZShnVmFsdWUsIGNvcmUodmFsdWUpLT52YWx1ZUZvclJhbmdlKCkpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNYXhpbXVtVmFsdWUoQXRrVmFsdWUq
IHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKLXsKLSAgICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9m
KEdWYWx1ZSkpOwotICAgIGdfdmFsdWVfaW5pdChnVmFsdWUsIEdfVFlQRV9ET1VCTEUpOwotICAg
IGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUsIGNvcmUodmFsdWUpLT5tYXhWYWx1ZUZvclJhbmdl
KCkpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFs
dWUoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKLXsKLSAgICBtZW1zZXQoZ1ZhbHVl
LCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOwotICAgIGdfdmFsdWVfaW5pdChnVmFsdWUsIEdfVFlQRV9E
T1VCTEUpOwotICAgIGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUsIGNvcmUodmFsdWUpLT5taW5W
YWx1ZUZvclJhbmdlKCkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVZh
bHVlU2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgY29uc3QgR1ZhbHVlKiBnVmFsdWUp
Ci17Ci0gICAgaWYgKCFHX1ZBTFVFX0hPTERTX0RPVUJMRShnVmFsdWUpICYmICFHX1ZBTFVFX0hP
TERTX0lOVChnVmFsdWUpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh2YWx1ZSk7Ci0gICAgaWYgKCFjb3JlT2JqZWN0
LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBp
ZiAoR19WQUxVRV9IT0xEU19ET1VCTEUoZ1ZhbHVlKSkKLSAgICAgICAgY29yZU9iamVjdC0+c2V0
VmFsdWUoU3RyaW5nOjpudW1iZXIoZ192YWx1ZV9nZXRfZG91YmxlKGdWYWx1ZSkpKTsKLSAgICBl
bHNlCi0gICAgICAgIGNvcmVPYmplY3QtPnNldFZhbHVlKFN0cmluZzo6bnVtYmVyKGdfdmFsdWVf
Z2V0X2ludChnVmFsdWUpKSk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bUluY3JlbWVudChBdGtWYWx1ZSogdmFsdWUs
IEdWYWx1ZSogZ1ZhbHVlKQotewotICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVl
KSk7Ci0gICAgZ192YWx1ZV9pbml0KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7Ci0KLSAgICAvLyBU
aGVyZSdzIG5vdCBzdWNoIGEgdGhpbmcgaW4gdGhlIFdBSS1BUklBIHNwZWNpZmljYXRpb24sIHRo
dXMgcmV0dXJuIHplcm8uCi0gICAgZ192YWx1ZV9zZXRfZG91YmxlKGdWYWx1ZSwgMC4wKTsKLX0K
LQotc3RhdGljIHZvaWQgYXRrVmFsdWVJbnRlcmZhY2VJbml0KEF0a1ZhbHVlSWZhY2UqIGlmYWNl
KQotewotICAgIGlmYWNlLT5nZXRfY3VycmVudF92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVWYWx1
ZUdldEN1cnJlbnRWYWx1ZTsKLSAgICBpZmFjZS0+Z2V0X21heGltdW1fdmFsdWUgPSB3ZWJraXRB
Y2Nlc3NpYmxlVmFsdWVHZXRNYXhpbXVtVmFsdWU7Ci0gICAgaWZhY2UtPmdldF9taW5pbXVtX3Zh
bHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bVZhbHVlOwotICAgIGlmYWNlLT5z
ZXRfY3VycmVudF92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVWYWx1ZVNldEN1cnJlbnRWYWx1ZTsK
LSAgICBpZmFjZS0+Z2V0X21pbmltdW1faW5jcmVtZW50ID0gd2Via2l0QWNjZXNzaWJsZVZhbHVl
R2V0TWluaW11bUluY3JlbWVudDsKLX0KLQogc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIEF0
a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW10gPSB7CiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0lu
dGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uSW50ZXJmYWNlSW5pdCksIDAs
IDB9LAogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNj
ZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUluaXQpLCAwLCAwfSwKQEAgLTg2MCw4ICs4MDAsNyBA
QCBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gQXRrSW50ZXJmYWNlc0luaXRGdW5jdGlvbnNb
XSA9IHsKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdlYmtpdEFj
Y2Vzc2libGVIeXBlcnRleHRJbnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAge3JlaW50ZXJwcmV0
X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbElu
dGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5p
dEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEludGVyZmFjZUluaXQpLCAwLCAwfSwKLSAg
ICB7KEdJbnRlcmZhY2VJbml0RnVuYylhdGtWYWx1ZUludGVyZmFjZUluaXQsCi0gICAgIChHSW50
ZXJmYWNlRmluYWxpemVGdW5jKSAwLCAwfQorICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZh
Y2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdCksIDAsIDB9CiB9
OwogCiBlbnVtIFdBSVR5cGUgewo=
</data>
<flag name="review"
          id="124569"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123496</attachid>
            <date>2012-01-22 11:20:13 -0800</date>
            <delta_ts>2012-01-23 10:18:41 -0800</delta_ts>
            <desc>16. Cleanup the list of includes in WebKitAccessibleWrapperAtk.cpp</desc>
            <filename>bug-76783-20120122202011.patch</filename>
            <type>text/plain</type>
            <size>2597</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2E0MWM0ODM2Mzc0MjNh
M2ZjNGIwZWVkODAzM2M5OGQ4MjAxYzdiOS4uYjdmYWQ4YjdhOTQ4Yjc4NDA3NWQwNjUzNGQ3OWYx
MjgzNzlhZTZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDE4IEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgQ2xlYW51cCB0aGUgbGlzdCBvZiBpbmNs
dWRlcyBpbiBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6IFJlbW92ZXMKKyAg
ICAgICAgJ2luY2x1ZGUnIGxpbmVzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgYWZ0ZXIgdGhl
IHJlZmFjdG9yLgorCisyMDEyLTAxLTIyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZWZhY3RvciBHVEsncyBhY2Nlc3NpYmlsaXRp
dHkgY29kZSB0byBiZSBtb3JlIG1vZHVsYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc2NzgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKICAgICAgICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEF0a1ZhbHVlIGludGVyZmFjZSwKICAgICAgICAgY29udGFpbmluZyB0aGUgcmVsYXRlZCBjb2Rl
IGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3Jh
cHBlckF0ay5jcHAKaW5kZXggYWNlYjMwNGFjN2ZiNjU3MDY0ZDc5ZmE0MGEyM2JjY2Y1Nzg3NDA1
Ny4uNjU0MzZlY2ZkN2M4MDE2NzRlNWFlOTIxODU3YTlhNGEyNDQwN2EwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcApAQCAtMzQsMzMgKzM0LDE0IEBACiAjaWYgSEFWRShBQ0NFU1NJ
QklMSVRZKQogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlMaXN0LmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKLSNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlU
YWJsZS5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVS
b3cuaCIKLSNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHT3duUHRyLmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUYWJs
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4
dEJveC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtl
ci5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsu
aCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmgiCkBAIC03OCwx
MyArNTksOCBAQAogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91
bml0cy5oIgogCi0jaW5jbHVkZSA8YXRrL2F0ay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNs
dWRlIDxnbGliL2dwcmludGYuaD4KLSNpbmNsdWRlIDxsaWJnYWlsLXV0aWwvZ2FpbC11dGlsLmg+
Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAo=
</data>
<flag name="review"
          id="124570"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123497</attachid>
            <date>2012-01-22 11:22:32 -0800</date>
            <delta_ts>2012-01-23 10:19:04 -0800</delta_ts>
            <desc>17. Fix coding style in the ATK AccessibilityObject wrapper</desc>
            <filename>bug-76783-20120122202230.patch</filename>
            <type>text/plain</type>
            <size>7801</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjdmYWQ4YjdhOTQ4Yjc4
NDA3NWQwNjUzNGQ3OWYxMjgzNzlhZTZlNS4uMzIxNmEyOWNlYzFmYjc2NjJmMDA4YTk0MzU3OGYy
ZTYwYjYwNWMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDMyIEBACiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgRml4IGNvZGluZyBzdHlsZSBpbiB0aGUg
QVRLIEFjY2Vzc2liaWxpdHlPYmplY3Qgd3JhcHBlci4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVHZXROYW1lKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlv
bik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0UGFyZW50KToKKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVHZXROQ2hpbGRyZW4pOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVJlZkNo
aWxkKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KToKKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKGF0a1JvbGUpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldFJvbGUpOgorICAgICAgICAoc2V0QXRrU3RhdGVT
ZXRGcm9tQ29yZU9iamVjdCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlUmVmU3RhdGVTZXQp
OgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVJlZlJlbGF0aW9uU2V0KToKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVJbml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVGaW5hbGl6ZSk6
CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9jbGFzc19pbml0KToKKworMjAxMi0wMS0yMiAg
TWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gUmVmYWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIENsZWFudXAg
dGhlIGxpc3Qgb2YgaW5jbHVkZXMgaW4gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgog
CiAgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsu
Y3BwOiBSZW1vdmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKaW5kZXggNjU0MzZlY2Zk
N2M4MDE2NzRlNWFlOTIxODU3YTlhNGEyNDQwN2EwYy4uZmRmYmI4OWVlZjQ5MjM0ZGY2OThkMzBk
ZTA4MzQ1ZTdhYjA2Zjg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcApAQCAtOTQs
NyArOTQsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtPYmplY3QqIG9i
amVjdCkKICAgICByZXR1cm4gY29yZShXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpKTsKIH0KIAot
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZShBdGtPYmplY3Qq
IG9iamVjdCkKK3N0YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUdldE5hbWUoQXRr
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9
IGNvcmUob2JqZWN0KTsKICAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdCgpKQpAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0
X2FjY2Vzc2libGVfZ2V0X25hbWUoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIHJldHVy
blN0cmluZyhjb3JlT2JqZWN0LT5zdHJpbmdWYWx1ZSgpKTsKIH0KIAotc3RhdGljIGNvbnN0IGdj
aGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZGVzY3JpcHRpb24oQXRrT2JqZWN0KiBvYmplY3Qp
CitzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbihBdGtP
YmplY3QqIG9iamVjdCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0g
Y29yZShvYmplY3QpOwogICAgIE5vZGUqIG5vZGUgPSAwOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0
YXRpYyBBdGtPYmplY3QqIGF0a1BhcmVudE9mUm9vdE9iamVjdChBdGtPYmplY3QqIG9iamVjdCkK
ICAgICByZXR1cm4gY29yZVBhcmVudC0+d3JhcHBlcigpOwogfQogCi1zdGF0aWMgQXRrT2JqZWN0
KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfcGFyZW50KEF0a09iamVjdCogb2JqZWN0KQorc3RhdGlj
IEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZUdldFBhcmVudChBdGtPYmplY3QqIG9iamVjdCkK
IHsKICAgICAvLyBDaGVjayBmaXJzdCBpZiB0aGUgcGFyZW50IGhhcyBiZWVuIGFscmVhZHkgc2V0
LgogICAgIEF0a09iamVjdCogYWNjZXNzaWJsZVBhcmVudCA9IEFUS19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+Z2V0X3BhcmVudChvYmplY3QpOwpAQCAtMjcx
LDcgKzI3MSw3IEBAIHN0YXRpYyBnaW50IGdldE5DaGlsZHJlbkZvclRhYmxlKEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgcmV0dXJuIGNlbGxzQ291bnQ7CiB9CiAKLXN0YXRp
YyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uX2NoaWxkcmVuKEF0a09iamVjdCogb2JqZWN0
KQorc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZUdldE5DaGlsZHJlbihBdGtPYmplY3QqIG9i
amVjdCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShvYmpl
Y3QpOwogCkBAIC0zMDgsNyArMzA4LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdl
dENoaWxkRm9yVGFibGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgZ2kKICAgICBy
ZXR1cm4gMDsKIH0KIAotc3RhdGljIEF0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfcmVmX2No
aWxkKEF0a09iamVjdCogb2JqZWN0LCBnaW50IGluZGV4KQorc3RhdGljIEF0a09iamVjdCogd2Vi
a2l0QWNjZXNzaWJsZVJlZkNoaWxkKEF0a09iamVjdCogb2JqZWN0LCBnaW50IGluZGV4KQogewog
ICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzcyLDggKzM3Miw3IEBA
IHN0YXRpYyBnaW50IGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3coQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCkKICAgICByZXR1cm4gLTE7CiB9CiAKLQotc3RhdGljIGdpbnQgd2Vi
a2l0X2FjY2Vzc2libGVfZ2V0X2luZGV4X2luX3BhcmVudChBdGtPYmplY3QqIG9iamVjdCkKK3N0
YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KEF0a09iamVjdCogb2Jq
ZWN0KQogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVj
dCk7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gY29yZU9iamVjdC0+cGFyZW50
T2JqZWN0VW5pZ25vcmVkKCk7CkBAIC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGdpbnQgd2Via2l0
X2FjY2Vzc2libGVfZ2V0X2luZGV4X2luX3BhcmVudChBdGtPYmplY3QqIG9iamVjdCkKICAgICBy
ZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9hdHRyaWJ1dGVzKEF0a09iamVjdCogb2JqZWN0KQorc3RhdGljIEF0a0F0dHJpYnV0ZVNl
dCogd2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCiB7CiAg
ICAgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSAwOwogICAgIGF0dHJpYnV0ZVNldCA9
IGFkZEF0dHJpYnV0ZVRvU2V0KGF0dHJpYnV0ZVNldCwgInRvb2xraXQiLCAiV2ViS2l0R3RrIik7
CkBAIC01MzUsNyArNTM0LDcgQEAgc3RhdGljIEF0a1JvbGUgYXRrUm9sZShBY2Nlc3NpYmlsaXR5
Um9sZSByb2xlKQogICAgIH0KIH0KIAotc3RhdGljIEF0a1JvbGUgd2Via2l0X2FjY2Vzc2libGVf
Z2V0X3JvbGUoQXRrT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgQXRrUm9sZSB3ZWJraXRBY2Nlc3Np
YmxlR2V0Um9sZShBdGtPYmplY3QqIG9iamVjdCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0ID0gY29yZShvYmplY3QpOwogCkBAIC02NzIsNyArNjcxLDcgQEAgc3RhdGlj
IHZvaWQgc2V0QXRrU3RhdGVTZXRGcm9tQ29yZU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0LCBBdGtTdGEKICAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9WSVNJVEVEKTsKIH0KIAotc3RhdGljIEF0a1N0YXRlU2V0KiB3ZWJraXRf
YWNjZXNzaWJsZV9yZWZfc3RhdGVfc2V0KEF0a09iamVjdCogb2JqZWN0KQorc3RhdGljIEF0a1N0
YXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxlUmVmU3RhdGVTZXQoQXRrT2JqZWN0KiBvYmplY3QpCiB7
CiAgICAgQXRrU3RhdGVTZXQqIHN0YXRlU2V0ID0gQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNj
ZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5yZWZfc3RhdGVfc2V0KG9iamVjdCk7CiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUob2JqZWN0KTsKQEAgLTY5MSw3ICs2OTAs
NyBAQCBzdGF0aWMgQXRrU3RhdGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9zdGF0ZV9zZXQo
QXRrT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIHN0YXRlU2V0OwogfQogCi1zdGF0aWMgQXRr
UmVsYXRpb25TZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9yZWxhdGlvbl9zZXQoQXRrT2JqZWN0
KiBvYmplY3QpCitzdGF0aWMgQXRrUmVsYXRpb25TZXQqIHdlYmtpdEFjY2Vzc2libGVSZWZSZWxh
dGlvblNldChBdGtPYmplY3QqIG9iamVjdCkKIHsKICAgICBBdGtSZWxhdGlvblNldCogcmVsYXRp
b25TZXQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcykt
PnJlZl9yZWxhdGlvbl9zZXQob2JqZWN0KTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0ID0gY29yZShvYmplY3QpOwpAQCAtNzAxLDcgKzcwMCw3IEBAIHN0YXRpYyBBdGtSZWxh
dGlvblNldCogd2Via2l0X2FjY2Vzc2libGVfcmVmX3JlbGF0aW9uX3NldChBdGtPYmplY3QqIG9i
amVjdCkKICAgICByZXR1cm4gcmVsYXRpb25TZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdF9h
Y2Nlc3NpYmxlX2luaXQoQXRrT2JqZWN0KiBvYmplY3QsIGdwb2ludGVyIGRhdGEpCitzdGF0aWMg
dm9pZCB3ZWJraXRBY2Nlc3NpYmxlSW5pdChBdGtPYmplY3QqIG9iamVjdCwgZ3BvaW50ZXIgZGF0
YSkKIHsKICAgICBpZiAoQVRLX09CSkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRf
Y2xhc3MpLT5pbml0aWFsaXplKQogICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nl
c3NpYmxlX3BhcmVudF9jbGFzcyktPmluaXRpYWxpemUob2JqZWN0LCBkYXRhKTsKQEAgLTcwOSw3
ICs3MDgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9pbml0KEF0a09iamVjdCog
b2JqZWN0LCBncG9pbnRlciBkYXRhKQogICAgIFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCktPm1f
b2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4oZGF0YSk7CiB9
CiAKLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3N0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2libGVGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
CiB7CiAgICAgLy8gVGhpcyBpcyBhIGdvb2QgdGltZSB0byBjbGVhciB0aGUgcmV0dXJuIGJ1ZmZl
ci4KICAgICByZXR1cm5TdHJpbmcoU3RyaW5nKCkpOwpAQCAtNzIzLDE5ICs3MjIsMTkgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfY2xhc3NfaW5pdChBdGtPYmplY3RDbGFzcyoga2xh
c3MpCiAKICAgICB3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3Nf
cGVla19wYXJlbnQoa2xhc3MpOwogCi0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9hY2Nlc3NpYmxlX2ZpbmFsaXplOwotCi0gICAga2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRf
YWNjZXNzaWJsZV9pbml0OwotICAgIGtsYXNzLT5nZXRfbmFtZSA9IHdlYmtpdF9hY2Nlc3NpYmxl
X2dldF9uYW1lOwotICAgIGtsYXNzLT5nZXRfZGVzY3JpcHRpb24gPSB3ZWJraXRfYWNjZXNzaWJs
ZV9nZXRfZGVzY3JpcHRpb247Ci0gICAga2xhc3MtPmdldF9wYXJlbnQgPSB3ZWJraXRfYWNjZXNz
aWJsZV9nZXRfcGFyZW50OwotICAgIGtsYXNzLT5nZXRfbl9jaGlsZHJlbiA9IHdlYmtpdF9hY2Nl
c3NpYmxlX2dldF9uX2NoaWxkcmVuOwotICAgIGtsYXNzLT5yZWZfY2hpbGQgPSB3ZWJraXRfYWNj
ZXNzaWJsZV9yZWZfY2hpbGQ7Ci0gICAga2xhc3MtPmdldF9yb2xlID0gd2Via2l0X2FjY2Vzc2li
bGVfZ2V0X3JvbGU7Ci0gICAga2xhc3MtPnJlZl9zdGF0ZV9zZXQgPSB3ZWJraXRfYWNjZXNzaWJs
ZV9yZWZfc3RhdGVfc2V0OwotICAgIGtsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0gd2Via2l0
X2FjY2Vzc2libGVfZ2V0X2luZGV4X2luX3BhcmVudDsKLSAgICBrbGFzcy0+Z2V0X2F0dHJpYnV0
ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfYXR0cmlidXRlczsKLSAgICBrbGFzcy0+cmVmX3Jl
bGF0aW9uX3NldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3JlZl9yZWxhdGlvbl9zZXQ7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEFjY2Vzc2libGVGaW5hbGl6ZTsKKworICAgIGts
YXNzLT5pbml0aWFsaXplID0gd2Via2l0QWNjZXNzaWJsZUluaXQ7CisgICAga2xhc3MtPmdldF9u
YW1lID0gd2Via2l0QWNjZXNzaWJsZUdldE5hbWU7CisgICAga2xhc3MtPmdldF9kZXNjcmlwdGlv
biA9IHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlvbjsKKyAgICBrbGFzcy0+Z2V0X3BhcmVu
dCA9IHdlYmtpdEFjY2Vzc2libGVHZXRQYXJlbnQ7CisgICAga2xhc3MtPmdldF9uX2NoaWxkcmVu
ID0gd2Via2l0QWNjZXNzaWJsZUdldE5DaGlsZHJlbjsKKyAgICBrbGFzcy0+cmVmX2NoaWxkID0g
d2Via2l0QWNjZXNzaWJsZVJlZkNoaWxkOworICAgIGtsYXNzLT5nZXRfcm9sZSA9IHdlYmtpdEFj
Y2Vzc2libGVHZXRSb2xlOworICAgIGtsYXNzLT5yZWZfc3RhdGVfc2V0ID0gd2Via2l0QWNjZXNz
aWJsZVJlZlN0YXRlU2V0OworICAgIGtsYXNzLT5nZXRfaW5kZXhfaW5fcGFyZW50ID0gd2Via2l0
QWNjZXNzaWJsZUdldEluZGV4SW5QYXJlbnQ7CisgICAga2xhc3MtPmdldF9hdHRyaWJ1dGVzID0g
d2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXM7CisgICAga2xhc3MtPnJlZl9yZWxhdGlvbl9z
ZXQgPSB3ZWJraXRBY2Nlc3NpYmxlUmVmUmVsYXRpb25TZXQ7CiB9CiAKIEdUeXBlCg==
</data>
<flag name="review"
          id="124571"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123720</attachid>
            <date>2012-01-24 05:54:14 -0800</date>
            <delta_ts>2012-01-24 09:28:58 -0800</delta_ts>
            <desc>13. New files for the implementation of the AtkText interface</desc>
            <filename>0001-2012-01-24-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>82908</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA1Y2Q2OWI1MTQ2NDUxMTM4MTJjMGUxZTQ4NjQwZmIyODhkMzJlMDI2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBTdW4sIDIyIEphbiAyMDEyIDIyOjMyOjI2ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0yNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJl
IG1vcmUgbW9kdWxhcgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Njc4MwoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
TmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNl
LAogICAgICAgIGNvbnRhaW5pbmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2li
bGVXcmFwcGVyQXRrLmNwcC4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6IEFkZGVkLgogICAgICAgIChjb3JlKToKICAgICAgICAo
dXRmOFN1YnN0cik6CiAgICAgICAgKGNvbnZlcnRVbmlDaGFyVG9VVEY4KToKICAgICAgICAodGV4
dEZvclJlbmRlcmVyKToKICAgICAgICAodGV4dEZvck9iamVjdCk6CiAgICAgICAgKGdldEdhaWxU
ZXh0VXRpbEZvckF0ayk6CiAgICAgICAgKGdldFBhbmdvTGF5b3V0Rm9yQXRrKToKICAgICAgICAo
YmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdCk6CiAgICAgICAgKGdldEF0dHJpYnV0ZVNl
dEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgogICAgICAgIChjb21wYXJlQXR0cmlidXRlKToKICAg
ICAgICAoYXR0cmlidXRlU2V0RGlmZmVyZW5jZSk6CiAgICAgICAgKGFjY2Vzc2liaWxpdHlPYmpl
Y3RMZW5ndGgpOgogICAgICAgIChnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KToKICAg
ICAgICAoZ2V0UnVuQXR0cmlidXRlc0Zyb21BY2Nlc2liaWxpdHlPYmplY3QpOgogICAgICAgICh0
ZXh0RXh0ZW50cyk6CiAgICAgICAgKGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QpOgogICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQpOgogICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFRleHQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRl
eHRBZnRlck9mZnNldCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zm
c2V0KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0KToK
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldCk6CiAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQpOgogICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFJ1bkF0dHJpYnV0ZXMpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldERlZmF1bHRBdHRyaWJ1dGVzKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRDaGFyYWN0ZXJFeHRlbnRzKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRSYW5n
ZUV4dGVudHMpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckNvdW50
KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRPZmZzZXRBdFBvaW50KToKICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyk6CiAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRB
ZGRTZWxlY3Rpb24pOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFJlbW92ZVNlbGVjdGlv
bik6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKToKICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZVRleHRTZXRDYXJldE9mZnNldCk6CiAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oOiBBZGRlZC4KCiAgICAgICAg
TW92ZSBjb21tb24gZnVuY3Rpb24gc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0IG91dCBmcm9tIHRo
ZSB3cmFwcGVyCiAgICAgICAgdG8gdGhlIHV0aWxpdHkgZmlsZSwgdXNlZCBmcm9tIFdlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcC4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHA6CiAgICAgICAgKHNlbGVjdGlvbkJlbG9uZ3NUb09iamVj
dCk6IFRha2VuIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgogICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaDoKICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDogUmVtb3ZlIGxvY2Fs
CiAgICAgICAgaW1wbGVtZW50YXRpb24gb2Ygc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0LCBhbmQg
dGhlIGNvZGUgcmVsYXRlZAogICAgICAgIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRr
VGV4dCBpbnRlcmZhY2UuCiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uYW1lKTogVXBk
YXRlIGNhbGwgdG8gdGhlIGZvcm1lciBmdW5jdGlvbgogICAgICAgIHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfZ2V0X3RleHQgYW5kIHVzZSB0aGUgbmV3IGZ1bmN0aW9uIG5hbWUuCiAgICAgICAgKHdl
YmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZGVzY3JpcHRpb24pOiBEaXR0by4KICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlwdGlvbik6IERpdHRv
LgoKICAgICAgICBBZGQgbmV3IGZpbGVzIHRvIGJ1aWxkIGZpbGVzLgoKICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5baHxjcHBd
LgogICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjcgKysKIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogLi4uL2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgICAgICAgICAgfCAgODU0ICsrKysr
KysrKysrKysrKysrKysrCiAuLi4vZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0Lmgg
ICAgICAgICAgICB8ICAgNDcgKysKIC4uLi9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5jcHAgICAgIHwgICAyNyArCiAuLi4vYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuaCAgICAgICB8ICAgIDQgKwogLi4uL2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3Jh
cHBlckF0ay5jcHAgICAgICAgICAgICAgfCAgODM3ICstLS0tLS0tLS0tLS0tLS0tLS0tCiA4IGZp
bGVzIGNoYW5nZWQsIDEwMDggaW5zZXJ0aW9ucygrKSwgODMyIGRlbGV0aW9ucygtKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUZXh0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmgKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZmM1ODUxZC4uZTVlNjViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMyw2ICszLDczIEBACiAg
ICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJlIG1v
cmUgbW9kdWxhcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzY3ODMKIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXcgZmlsZXMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrVGV4dCBpbnRlcmZh
Y2UsCisgICAgICAgIGNvbnRhaW5pbmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChjb3JlKToKKyAg
ICAgICAgKHV0ZjhTdWJzdHIpOgorICAgICAgICAoY29udmVydFVuaUNoYXJUb1VURjgpOgorICAg
ICAgICAodGV4dEZvclJlbmRlcmVyKToKKyAgICAgICAgKHRleHRGb3JPYmplY3QpOgorICAgICAg
ICAoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKToKKyAgICAgICAgKGdldFBhbmdvTGF5b3V0Rm9yQXRr
KToKKyAgICAgICAgKGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QpOgorICAgICAgICAo
Z2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgIChjb21wYXJl
QXR0cmlidXRlKToKKyAgICAgICAgKGF0dHJpYnV0ZVNldERpZmZlcmVuY2UpOgorICAgICAgICAo
YWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aCk6CisgICAgICAgIChnZXRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Rm9yT2Zmc2V0KToKKyAgICAgICAgKGdldFJ1bkF0dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5
T2JqZWN0KToKKyAgICAgICAgKHRleHRFeHRlbnRzKToKKyAgICAgICAgKGdldFNlbGVjdGlvbk9m
ZnNldHNGb3JPYmplY3QpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJ
bml0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCk6CisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRlck9mZnNldCk6CisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFRleHRBdE9mZnNldCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldFRleHRCZWZvcmVPZmZzZXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRDaGFyYWN0ZXJBdE9mZnNldCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENh
cmV0T2Zmc2V0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0UnVuQXR0cmlidXRl
cyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldERlZmF1bHRBdHRyaWJ1dGVzKToK
KyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyRXh0ZW50cyk6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50cyk6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckNvdW50KToKKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0T2Zmc2V0QXRQb2ludCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldE5TZWxlY3Rpb25zKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0
aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0QWRkU2VsZWN0aW9uKToKKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVU
ZXh0U2V0Q2FyZXRPZmZzZXQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUZXh0Lmg6IEFkZGVkLgorCisgICAgICAgIE1vdmUgY29tbW9uIGZ1
bmN0aW9uIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdCBvdXQgZnJvbSB0aGUgd3JhcHBlcgorICAg
ICAgICB0byB0aGUgdXRpbGl0eSBmaWxlLCB1c2VkIGZyb20gV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwOgorICAgICAgICAoc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KTogVGFrZW4g
ZnJvbSBXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6IFJlbW92ZSBsb2NhbAorICAgICAg
ICBpbXBsZW1lbnRhdGlvbiBvZiBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QsIGFuZCB0aGUgY29k
ZSByZWxhdGVkCisgICAgICAgIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrVGV4dCBp
bnRlcmZhY2UuCisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9nZXRfbmFtZSk6IFVwZGF0ZSBj
YWxsIHRvIHRoZSBmb3JtZXIgZnVuY3Rpb24KKyAgICAgICAgd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfdGV4dCBhbmQgdXNlIHRoZSBuZXcgZnVuY3Rpb24gbmFtZS4KKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9yb3dfZGVzY3JpcHRpb24pOiBEaXR0by4K
KworICAgICAgICBBZGQgbmV3IGZpbGVzIHRvIGJ1aWxkIGZpbGVzLgorCisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbTogQWRkIFdlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LltofGNw
cF0uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKworMjAxMi0wMS0yNCAgTWFyaW8g
U2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVm
YWN0b3IgR1RLJ3MgYWNjZXNzaWJpbGl0aXR5IGNvZGUgdG8gYmUgbW9yZSBtb2R1bGFyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4MworCiAgICAg
ICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KIAogICAgICAgICBOZXcgZmlsZXMgZm9y
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrU2VsZWN0aW9uIGludGVyZmFjZSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDYwYmY1YzUuLmYwNDdkMzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDQzNyw2ICs0NDM3LDggQEAgd2ViY29yZWd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSW1hZ2UuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaCBc
CisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNzc0NWFjNi4uYmI2ZjY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM2MSw2ICsx
MzYxLDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlSW1hZ2UuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaCcsCisgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3Bw
JywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVXcmFwcGVyQXRrLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI4ZGU4ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUZXh0LmNwcApAQCAtMCwwICsxLDg1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFBv
cnRpb25zIGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBU
aGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFs
IERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywg
SW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENv
cHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdPd25Q
dHIuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0u
aCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgor
I2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNz
aWJsZVdyYXBwZXJBdGsuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgPGxp
YmdhaWwtdXRpbC9nYWlsLXV0aWwuaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUo
QXRrVGV4dCogdGV4dCkKK3sKKyAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKHRleHQpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNz
aWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSk7Cit9CisKK3N0YXRpYyBnY2hh
ciogdXRmOFN1YnN0cihjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IHN0YXJ0LCBnaW50IGVuZCkK
K3sKKyAgICBBU1NFUlQoc3RyaW5nKTsKKyAgICBnbG9uZyBzdHJMZW4gPSBnX3V0Zjhfc3RybGVu
KHN0cmluZywgLTEpOworICAgIGlmIChzdGFydCA+IHN0ckxlbiB8fCBlbmQgPiBzdHJMZW4pCisg
ICAgICAgIHJldHVybiAwOworICAgIGdjaGFyKiBzdGFydFB0ciA9IGdfdXRmOF9vZmZzZXRfdG9f
cG9pbnRlcihzdHJpbmcsIHN0YXJ0KTsKKyAgICBnc2l6ZSBsZW5JbkJ5dGVzID0gZ191dGY4X29m
ZnNldF90b19wb2ludGVyKHN0cmluZywgZW5kICsgMSkgLSAgc3RhcnRQdHI7CisgICAgZ2NoYXIq
IG91dHB1dCA9IHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MwKGxlbkluQnl0ZXMgKyAxKSk7
CisgICAgcmV0dXJuIGdfdXRmOF9zdHJuY3B5KG91dHB1dCwgc3RhcnRQdHIsIGVuZCAtIHN0YXJ0
ICsgMSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbXBsZXRlbHkgZ2VuZXJhbCwg
aXMgaXQncyB0aWVkIHRvIHRoZQorLy8gaW50ZXJuYWxzIG9mIFdlYkNvcmUncyB0ZXh0IHByZXNl
bnRhdGlvbi4KK3N0YXRpYyBnY2hhciogY29udmVydFVuaUNoYXJUb1VURjgoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGdpbnQgbGVuZ3RoLCBpbnQgZnJvbSwgaW50IHRvKQoreworICAgIENTdHJp
bmcgc3RyaW5nVVRGOCA9IFVURjhFbmNvZGluZygpLmVuY29kZShjaGFyYWN0ZXJzLCBsZW5ndGgs
IFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOworICAgIGdjaGFyKiB1dGY4U3RyaW5nID0g
dXRmOFN1YnN0cihzdHJpbmdVVEY4LmRhdGEoKSwgZnJvbSwgdG8pOworICAgIGlmICghZ191dGY4
X3ZhbGlkYXRlKHV0ZjhTdHJpbmcsIC0xLCAwKSkgeworICAgICAgICBnX2ZyZWUodXRmOFN0cmlu
Zyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBnc2l6ZSBsZW4gPSBzdHJsZW4odXRm
OFN0cmluZyk7CisgICAgR1N0cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xlbigwLCBsZW4pOwor
ICAgIGdjaGFyKiBwdHIgPSB1dGY4U3RyaW5nOworCisgICAgLy8gV2ViQ29yZSBpbnRyb2R1Y2Vz
IGxpbmUgYnJlYWtzIGluIHRoZSB0ZXh0IHRoYXQgZG8gbm90IHJlZmxlY3QKKyAgICAvLyB0aGUg
bGF5b3V0IHlvdSBzZWUgb24gdGhlIHNjcmVlbiwgcmVwbGFjZSB0aGVtIHdpdGggc3BhY2VzCisg
ICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgZ2ludCBpbmRleCwgc3RhcnQ7CisgICAgICAg
IHBhbmdvX2ZpbmRfcGFyYWdyYXBoX2JvdW5kYXJ5KHB0ciwgbGVuLCAmaW5kZXgsICZzdGFydCk7
CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4ocmV0LCBwdHIsIGluZGV4KTsKKyAgICAgICAg
aWYgKGluZGV4ID09IHN0YXJ0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGdfc3RyaW5n
X2FwcGVuZF9jKHJldCwgJyAnKTsKKyAgICAgICAgcHRyICs9IHN0YXJ0OworICAgICAgICBsZW4g
LT0gc3RhcnQ7CisgICAgfQorCisgICAgZ19mcmVlKHV0ZjhTdHJpbmcpOworICAgIHJldHVybiBn
X3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOworfQorCitnY2hhciogdGV4dEZvclJlbmRlcmVyKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgR1N0cmluZyogcmVzdWx0VGV4dCA9IGdfc3Ry
aW5nX25ldygwKTsKKworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBnX3N0cmlu
Z19mcmVlKHJlc3VsdFRleHQsIEZBTFNFKTsKKworICAgIC8vIEZvciBSZW5kZXJCbG9ja3MsIHBp
ZWNlIHRvZ2V0aGVyIHRoZSB0ZXh0IGZyb20gdGhlIFJlbmRlclRleHQgb2JqZWN0cyB0aGV5IGNv
bnRhaW4uCisgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJlbmRlcmVyLT5maXJzdENo
aWxkKCk7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IGlmIChvYmplY3QtPmlzQlIoKSkgeworICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3Vs
dFRleHQsICJcbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0OworICAgICAgICBpZiAob2JqZWN0LT5pc1RleHQoKSkK
KyAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqZWN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5pc1JlcGxhY2VkKCkpCisgICAgICAgICAg
ICAgICAgZ19zdHJpbmdfYXBwZW5kX3VuaWNoYXIocmVzdWx0VGV4dCwgb2JqZWN0UmVwbGFjZW1l
bnRDaGFyYWN0ZXIpOworCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGNoaWxkcmVu
LCBpZiBhbnksIHRvIGNvbnNpZGVyIHdoZW4KKyAgICAgICAgICAgIC8vIGN1cnJlbnQgb2JqZWN0
IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lIG9mIGl0cworICAgICAgICAgICAgLy8gY2hp
bGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlzcyB0aG9zZSBwb3J0aW9ucyBvZgorICAgICAg
ICAgICAgLy8gdGV4dCBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhvc2Ugc2l0dWF0aW9ucwor
ICAgICAgICAgICAgaWYgKG9iamVjdC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgICAgIGdf
c3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0Rm9yUmVuZGVyZXIob2JqZWN0KSk7CisKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgSW5saW5lVGV4dEJveCog
Ym94ID0gcmVuZGVyVGV4dCA/IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpIDogMDsKKyAgICAg
ICAgd2hpbGUgKGJveCkgeworICAgICAgICAgICAgR093blB0cjxnY2hhcj4gdGV4dChjb252ZXJ0
VW5pQ2hhclRvVVRGOChyZW5kZXJUZXh0LT5jaGFyYWN0ZXJzKCksIHJlbmRlclRleHQtPnRleHRM
ZW5ndGgoKSwgYm94LT5zdGFydCgpLCBib3gtPmVuZCgpKSk7CisgICAgICAgICAgICBnX3N0cmlu
Z19hcHBlbmQocmVzdWx0VGV4dCwgdGV4dC5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIE5ld2xp
bmUgY2hhcnMgaW4gdGhlIHNvdXJjZSByZXN1bHQgaW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28g
Y2hlY2sKKyAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlv
dXQuIFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzguCisgICAgICAgICAgICAvLyBJZiB0aGUgbmV4
dCBzaWJsaW5nIGlzIGEgQlIsIHdlJ2xsIGFkZCB0aGUgbmV3bGluZSB3aGVuIHdlIGV4YW1pbmUg
dGhhdCBjaGlsZC4KKworICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAm
JiAoIW9iamVjdC0+bmV4dFNpYmxpbmcoKSB8fCAhb2JqZWN0LT5uZXh0U2libGluZygpLT5pc0JS
KCkpKQorICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCAiXG4iKTsK
KyAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEluc2VydCB0aGUgdGV4dCBvZiB0aGUgbWFya2VyIGZvciBsaXN0IGl0ZW0gaW4g
dGhlIHJpZ2h0IHBsYWNlLCBpZiBwcmVzZW50CisgICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RJdGVt
KCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRl
cmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgICAgICBnX3N0cmluZ19wcmVwZW5kKHJl
c3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRh
KCkpOworICAgIH0KKworICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNF
KTsKK30KKworZ2NoYXIqIHRleHRGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCkKK3sKKyAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7CisKKyAgICAvLyBG
b3IgdGV4dCBjb250cm9scywgd2UgY2FuIGdldCB0aGUgdGV4dCBsaW5lIGJ5IGxpbmUuCisgICAg
aWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICB1bnNpZ25lZCB0ZXh0
TGVuZ3RoID0gY29yZU9iamVjdC0+dGV4dExlbmd0aCgpOworICAgICAgICBpbnQgbGluZU51bWJl
ciA9IDA7CisgICAgICAgIFBsYWluVGV4dFJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+ZG9BWFJh
bmdlRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgd2hpbGUgKHJhbmdlLmxlbmd0aCkgewor
ICAgICAgICAgICAgLy8gV2hlbiBhIGxpbmUgb2YgdGV4dCB3cmFwcyBpbiBhIHRleHQgYXJlYSwg
dGhlIGZpbmFsIHNwYWNlIGlzIHJlbW92ZWQuCisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQg
KyByYW5nZS5sZW5ndGggPCB0ZXh0TGVuZ3RoKQorICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0
aCAtPSAxOworICAgICAgICAgICAgU3RyaW5nIGxpbmVUZXh0ID0gY29yZU9iamVjdC0+ZG9BWFN0
cmluZ0ZvclJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIGxp
bmVUZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwg
IlxuIik7CisgICAgICAgICAgICByYW5nZSA9IGNvcmVPYmplY3QtPmRvQVhSYW5nZUZvckxpbmUo
KytsaW5lTnVtYmVyKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoY29yZU9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gcmVu
ZGVyZXJUZXh0KHRleHRGb3JSZW5kZXJlcihjb3JlT2JqZWN0LT5yZW5kZXJlcigpKSk7CisgICAg
ICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIHJlbmRlcmVyVGV4dC5nZXQoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Cit9CisKK3N0YXRpYyBHYWlsVGV4
dFV0aWwqIGdldEdhaWxUZXh0VXRpbEZvckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQoreworICAg
IEdhaWxUZXh0VXRpbCogZ2FpbFRleHRVdGlsID0gZ2FpbF90ZXh0X3V0aWxfbmV3KCk7CisgICAg
Z2FpbF90ZXh0X3V0aWxfdGV4dF9zZXR1cChnYWlsVGV4dFV0aWwsIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0VGV4dCh0ZXh0T2JqZWN0LCAwLCAtMSkpOworICAgIHJldHVybiBnYWlsVGV4dFV0aWw7
Cit9CisKK3N0YXRpYyBQYW5nb0xheW91dCogZ2V0UGFuZ29MYXlvdXRGb3JBdGsoQXRrVGV4dCog
dGV4dE9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29y
ZSh0ZXh0T2JqZWN0KTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBI
b3N0V2luZG93KiBob3N0V2luZG93ID0gZG9jdW1lbnQtPnZpZXcoKS0+aG9zdFdpbmRvdygpOwor
ICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUGxhdGZvcm1QYWdl
Q2xpZW50IHdlYlZpZXcgPSBob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBp
ZiAoIXdlYlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQ3JlYXRlIGEgc3RyaW5n
IHdpdGggdGhlIGxheW91dCBhcyBpdCBhcHBlYXJzIG9uIHRoZSBzY3JlZW4KKyAgICBQYW5nb0xh
eW91dCogbGF5b3V0ID0gZ3RrX3dpZGdldF9jcmVhdGVfcGFuZ29fbGF5b3V0KHN0YXRpY19jYXN0
PEd0a1dpZGdldCo+KHdlYlZpZXcpLCB0ZXh0Rm9yT2JqZWN0KGNvcmVPYmplY3QpKTsKKyAgICBy
ZXR1cm4gbGF5b3V0OworfQorCitzdGF0aWMgaW50IGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJP
YmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCit7CisgICAgLy8gRklYTUU6IFRoaXMg
aW1wbGVtZW50YXRpb24gb2YgYmFzZWxpbmVQb3NpdGlvbiBvcmlnaW5hdGVzIGZyb20gUmVuZGVy
T2JqZWN0LmNwcCBhbmQgd2FzCisgICAgLy8gcmVtb3ZlZCBpbiByNzAwNzIuIFRoZSBpbXBsZW1l
bnRhdGlvbiBsb29rcyBpbmNvcnJlY3QgdGhvdWdoLCBiZWNhdXNlIHRoaXMgaXMgbm90IHRoZQor
ICAgIC8vIGJhc2VsaW5lIG9mIHRoZSB1bmRlcmx5aW5nIFJlbmRlck9iamVjdCwgYnV0IG9mIHRo
ZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LgorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcyA9IHJlbmRlck9iamVjdC0+Zmlyc3RMaW5lU3R5bGUoKS0+Zm9udE1ldHJpY3MoKTsK
KyAgICByZXR1cm4gZm9udE1ldHJpY3MuYXNjZW50KCkgKyAocmVuZGVyT2JqZWN0LT5maXJzdExp
bmVTdHlsZSgpLT5jb21wdXRlZExpbmVIZWlnaHQoKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpKSAv
IDI7Cit9CisKK3N0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vz
c2liaWxpdHlPYmplY3QoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQoreworICAg
IGlmICghb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5kZXJlcigp
OworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworCisgICAgQXRr
QXR0cmlidXRlU2V0KiByZXN1bHQgPSAwOworICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcihnX3N0
cmR1cF9wcmludGYoIiVpIiwgc3R5bGUtPmZvbnRTaXplKCkpKTsKKyAgICByZXN1bHQgPSBhZGRU
b0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtf
VEVYVF9BVFRSX1NJWkUpLCBidWZmZXIuZ2V0KCkpOworCisgICAgQ29sb3IgYmdDb2xvciA9IHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwor
ICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVw
X3ByaW50ZigiJWksJWksJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
Z0NvbG9yLnJlZCgpLCBiZ0NvbG9yLmdyZWVuKCksIGJnQ29sb3IuYmx1ZSgpKSk7CisgICAgICAg
IHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRl
X2dldF9uYW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOworICAgIH0K
KworICAgIENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpOworICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBidWZm
ZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmZ0NvbG9yLnJlZCgpLCBmZ0NvbG9yLmdyZWVuKCksIGZnQ29sb3IuYmx1
ZSgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRr
X3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIu
Z2V0KCkpOworICAgIH0KKworICAgIGludCBiYXNlbGluZVBvc2l0aW9uOworICAgIGJvb2wgaW5j
bHVkZVJpc2UgPSB0cnVlOworICAgIHN3aXRjaCAoc3R5bGUtPnZlcnRpY2FsQWxpZ24oKSkgewor
ICAgIGNhc2UgU1VCOgorICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gLTEgKiBiYXNlbGluZVBv
c2l0aW9uRm9yUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTVVBFUjoKKyAgICAgICAgYmFzZWxpbmVQb3NpdGlvbiA9IGJhc2VsaW5lUG9zaXRpb25Gb3JS
ZW5kZXJPYmplY3QocmVuZGVyZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJBU0VMSU5F
OgorICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgaW5jbHVkZVJpc2UgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaWYgKGluY2x1ZGVSaXNlKSB7CisgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBf
cHJpbnRmKCIlaSIsIGJhc2VsaW5lUG9zaXRpb24pKTsKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9B
dGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9SSVNFKSwgYnVmZmVyLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAoIXN0eWxlLT50
ZXh0SW5kZW50KCkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBpbnQgaW5kZW50YXRpb24gPSBz
dHlsZS0+dGV4dEluZGVudCgpLmNhbGNWYWx1ZShvYmplY3QtPnNpemUoKS53aWR0aCgpKTsKKyAg
ICAgICAgYnVmZmVyLnNldChnX3N0cmR1cF9wcmludGYoIiVpIiwgaW5kZW50YXRpb24pKTsKKyAg
ICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9JTkRFTlQpLCBidWZmZXIuZ2V0KCkpOworICAg
IH0KKworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5mb250KCkuZmFtaWx5KCku
ZmFtaWx5KCkuc3RyaW5nKCk7CisgICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQoOCkgPT0gIi13
ZWJraXQtIikKKyAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFtZS5zdWJzdHJp
bmcoOCk7CisKKyAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1FKSwgZm9udEZh
bWlseU5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpbnQgZm9udFdlaWdodCA9IC0xOworICAg
IHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgeworICAgIGNhc2UgRm9udFdlaWdodDEw
MDoKKyAgICAgICAgZm9udFdlaWdodCA9IDEwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b250V2VpZ2h0MjAwOgorICAgICAgICBmb250V2VpZ2h0ID0gMjAwOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvbnRXZWlnaHQzMDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSAzMDA7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRm9udFdlaWdodDQwMDoKKyAgICAgICAgZm9udFdlaWdodCA9
IDQwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICBm
b250V2VpZ2h0ID0gNTAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6
CisgICAgICAgIGZvbnRXZWlnaHQgPSA2MDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9u
dFdlaWdodDcwMDoKKyAgICAgICAgZm9udFdlaWdodCA9IDcwMDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGb250V2VpZ2h0ODAwOgorICAgICAgICBmb250V2VpZ2h0ID0gODAwOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSA5
MDA7CisgICAgfQorICAgIGlmIChmb250V2VpZ2h0ID4gMCkgeworICAgICAgICBidWZmZXIuc2V0
KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBmb250V2VpZ2h0KSk7CisgICAgICAgIHJlc3VsdCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFU
S19URVhUX0FUVFJfV0VJR0hUKSwgYnVmZmVyLmdldCgpKTsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KHN0eWxlLT50ZXh0QWxpZ24oKSkgeworICAgIGNhc2UgVEFBVVRPOgorICAgIGNhc2UgVEFTVEFS
VDoKKyAgICBjYXNlIFRBRU5EOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIExFRlQ6CisgICAg
Y2FzZSBXRUJLSVRfTEVGVDoKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
cmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJ
Q0FUSU9OKSwgImxlZnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSSUdIVDoKKyAgICBj
YXNlIFdFQktJVF9SSUdIVDoKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
cmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJ
Q0FUSU9OKSwgInJpZ2h0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0VOVEVSOgorICAg
IGNhc2UgV0VCS0lUX0NFTlRFUjoKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVT
ZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNU
SUZJQ0FUSU9OKSwgImNlbnRlciIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpVU1RJRlk6
CisgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSlVTVElGSUNBVElPTiksICJmaWxsIik7
CisgICAgfQorCisgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtf
dGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9VTkRFUkxJTkUpLCAoc3R5bGUt
PnRleHREZWNvcmF0aW9uKCkgJiBVTkRFUkxJTkUpID8gInNpbmdsZSIgOiAibm9uZSIpOworCisg
ICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1
dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkg
PyAiaXRhbGljIiA6ICJub3JtYWwiKTsKKworICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRl
U2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RS
SUtFVEhST1VHSCksIChzdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIExJTkVfVEhST1VHSCkgPyAi
dHJ1ZSIgOiAiZmFsc2UiKTsKKworICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJl
c3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSU5WSVNJQkxF
KSwgKHN0eWxlLT52aXNpYmlsaXR5KCkgPT0gSElEREVOKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwor
CisgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9FRElUQUJMRSksIG9iamVjdC0+aXNSZWFkT25s
eSgpID8gImZhbHNlIiA6ICJ0cnVlIik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgZ2ludCBjb21wYXJlQXR0cmlidXRlKGNvbnN0IEF0a0F0dHJpYnV0ZSogYSwgY29uc3QgQXRr
QXR0cmlidXRlKiBiKQoreworICAgIHJldHVybiBnX3N0cmNtcDAoYS0+bmFtZSwgYi0+bmFtZSkg
fHwgZ19zdHJjbXAwKGEtPnZhbHVlLCBiLT52YWx1ZSk7Cit9CisKKy8vIFJldHVybnMgYW4gQXRr
QXR0cmlidXRlU2V0IHdpdGggdGhlIGVsZW1lbnRzIG9mIGF0dHJpYnV0ZVNldDEgd2hpY2gKKy8v
IGFyZSBlaXRoZXIgbm90IHByZXNlbnQgb3IgZGlmZmVyZW50IGluIGF0dHJpYnV0ZVNldDIuIE5l
aXRoZXIKKy8vIGF0dHJpYnV0ZVNldDEgbm9yIGF0dHJpYnV0ZVNldDIgc2hvdWxkIGJlIHVzZWQg
YWZ0ZXIgY2FsbGluZyB0aGlzLgorc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
RGlmZmVyZW5jZShBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldDEsIEF0a0F0dHJpYnV0ZVNl
dCogYXR0cmlidXRlU2V0MikKK3sKKyAgICBpZiAoIWF0dHJpYnV0ZVNldDIpCisgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGVTZXQxOworCisgICAgQXRrQXR0cmlidXRlU2V0KiBjdXJyZW50U2V0ID0g
YXR0cmlidXRlU2V0MTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGZvdW5kOworICAgIEF0a0F0dHJp
YnV0ZVNldCogdG9EZWxldGUgPSAwOworCisgICAgd2hpbGUgKGN1cnJlbnRTZXQpIHsKKyAgICAg
ICAgZm91bmQgPSBnX3NsaXN0X2ZpbmRfY3VzdG9tKGF0dHJpYnV0ZVNldDIsIGN1cnJlbnRTZXQt
PmRhdGEsIChHQ29tcGFyZUZ1bmMpY29tcGFyZUF0dHJpYnV0ZSk7CisgICAgICAgIGlmIChmb3Vu
ZCkgeworICAgICAgICAgICAgQXRrQXR0cmlidXRlU2V0KiBuZXh0U2V0ID0gY3VycmVudFNldC0+
bmV4dDsKKyAgICAgICAgICAgIHRvRGVsZXRlID0gZ19zbGlzdF9wcmVwZW5kKHRvRGVsZXRlLCBj
dXJyZW50U2V0LT5kYXRhKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZVNldDEgPSBnX3NsaXN0X2Rl
bGV0ZV9saW5rKGF0dHJpYnV0ZVNldDEsIGN1cnJlbnRTZXQpOworICAgICAgICAgICAgY3VycmVu
dFNldCA9IG5leHRTZXQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY3VycmVudFNldCA9
IGN1cnJlbnRTZXQtPm5leHQ7CisgICAgfQorCisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShh
dHRyaWJ1dGVTZXQyKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHRvRGVsZXRlKTsKKyAg
ICByZXR1cm4gYXR0cmlidXRlU2V0MTsKK30KKworc3RhdGljIGd1aW50IGFjY2Vzc2liaWxpdHlP
YmplY3RMZW5ndGgoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQoreworICAgIC8v
IE5vbiByZW5kZXIgb2JqZWN0cyBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudAorICAgIGlmICgh
b2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBGb3IgdGhvc2Ugb2JqZWN0cyBpbXBsZW1lbnRpbmcgdGhlIEF0a1RleHQgaW50
ZXJmYWNlIHdlIHVzZSB0aGUKKyAgICAvLyB3ZWxsIGtub3duIEFQSSB0byBhbHdheXMgZ2V0IHRo
ZSB0ZXh0IGluIGEgY29uc2lzdGVudCB3YXkKKyAgICBBdGtPYmplY3QqIGF0a09iaiA9IEFUS19P
QkpFQ1Qob2JqZWN0LT53cmFwcGVyKCkpOworICAgIGlmIChBVEtfSVNfVEVYVChhdGtPYmopKSB7
CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRleHQod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0
KEFUS19URVhUKGF0a09iaiksIDAsIC0xKSk7CisgICAgICAgIHJldHVybiBnX3V0Zjhfc3RybGVu
KHRleHQuZ2V0KCksIC0xKTsKKyAgICB9CisKKyAgICAvLyBFdmVuIGlmIHdlIGRvbid0IGV4cG9z
ZSBsaXN0IG1hcmtlcnMgdG8gQXNzaXN0aXZlCisgICAgLy8gVGVjaG5vbG9naWVzLCB3ZSBuZWVk
IHRvIGhhdmUgYSB3YXkgdG8gbWVhc3VyZSB0aGVpciBsZW5ndGgKKyAgICAvLyBmb3IgdGhvc2Ug
Y2FzZXMgd2hlbiBpdCdzIG5lZWRlZCB0byB0YWtlIGl0IGludG8gYWNjb3VudAorICAgIC8vIHNl
cGFyYXRlbHkgKGFzIGluIGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQpCisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKSB7CisgICAgICAgIFJlbmRlckxpc3RNYXJr
ZXIqIG1hcmtlciA9IHRvUmVuZGVyTGlzdE1hcmtlcihyZW5kZXJlcik7CisgICAgICAgIHJldHVy
biBtYXJrZXItPnRleHQoKS5sZW5ndGgoKSArIG1hcmtlci0+c3VmZml4KCkubGVuZ3RoKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KGNvbnN0IEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCwgZ3VpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5k
T2Zmc2V0KQoreworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHJlc3VsdDsKKyAgICBn
dWludCBsZW5ndGggPSBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKG9iamVjdCk7CisgICAgaWYg
KGxlbmd0aCA+IG9mZnNldCkgeworICAgICAgICAqc3RhcnRPZmZzZXQgPSAwOworICAgICAgICAq
ZW5kT2Zmc2V0ID0gbGVuZ3RoOworICAgICAgICByZXN1bHQgPSBvYmplY3Q7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gLTE7CisgICAgICAgICplbmRPZmZzZXQgPSAtMTsK
KyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIW9iamVjdC0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hpbGQoKTsKKyAgICBndWludCBjdXJyZW50T2Zmc2V0ID0g
MDsKKyAgICBndWludCBjaGlsZFBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAoY2hpbGQgJiYgY3Vy
cmVudE9mZnNldCA8PSBvZmZzZXQpIHsKKyAgICAgICAgZ3VpbnQgY2hpbGRMZW5ndGggPSBhY2Nl
c3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNoaWxkKTsKKyAgICAgICAgY3VycmVudE9mZnNldCA9IGNo
aWxkTGVuZ3RoICsgY2hpbGRQb3NpdGlvbjsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPiBv
ZmZzZXQpIHsKKyAgICAgICAgICAgIGdpbnQgY2hpbGRTdGFydE9mZnNldDsKKyAgICAgICAgICAg
IGdpbnQgY2hpbGRFbmRPZmZzZXQ7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBncmFuZENoaWxkID0gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldChjaGlsZCwg
b2Zmc2V0LWNoaWxkUG9zaXRpb24sICAmY2hpbGRTdGFydE9mZnNldCwgJmNoaWxkRW5kT2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmIChjaGlsZFN0YXJ0T2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAg
ICAgICAqc3RhcnRPZmZzZXQgPSBjaGlsZFN0YXJ0T2Zmc2V0ICsgY2hpbGRQb3NpdGlvbjsKKyAg
ICAgICAgICAgICAgICAqZW5kT2Zmc2V0ID0gY2hpbGRFbmRPZmZzZXQgKyBjaGlsZFBvc2l0aW9u
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdyYW5kQ2hpbGQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGlsZFBvc2l0aW9uICs9IGNoaWxkTGVuZ3Ro
OworICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBn
ZXRSdW5BdHRyaWJ1dGVzRnJvbUFjY2VzaWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBlbGVtZW50LCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVu
ZE9mZnNldCkKK3sKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCA9IGdldEFj
Y2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQoZWxlbWVudCwgb2Zmc2V0LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKKyAgICBpZiAoIWNoaWxkKSB7CisgICAgICAgICpzdGFydE9mZnNldCA9IC0x
OworICAgICAgICAqZW5kT2Zmc2V0ID0gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEF0a0F0dHJpYnV0ZVNldCogZGVmYXVsdEF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVTZXRG
b3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGVsZW1lbnQpOworICAgIEF0a0F0dHJpYnV0ZVNldCogY2hp
bGRBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjaGls
ZCk7CisKKyAgICByZXR1cm4gYXR0cmlidXRlU2V0RGlmZmVyZW5jZShjaGlsZEF0dHJpYnV0ZXMs
IGRlZmF1bHRBdHRyaWJ1dGVzKTsKK30KKworc3RhdGljIEludFJlY3QgdGV4dEV4dGVudHMoQXRr
VGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBsZW5ndGgsIEF0a0Nvb3JkVHlwZSBj
b29yZHMpCit7CisgICAgZ2NoYXIqIHRleHRDb250ZW50ID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRUZXh0KHRleHQsIHN0YXJ0T2Zmc2V0LCAtMSk7CisgICAgZ2ludCB0ZXh0TGVuZ3RoID0gZ191
dGY4X3N0cmxlbih0ZXh0Q29udGVudCwgLTEpOworCisgICAgLy8gVGhlIGZpcnN0IGNhc2UgKGVu
ZE9mZnNldCBvZiAtMSkgc2hvdWxkIHdvcmssIGJ1dCBzZWVtcyBicm9rZW4gZm9yIGFsbCBHdGsr
IGFwcHMuCisgICAgZ2ludCByYW5nZUxlbmd0aCA9IGxlbmd0aDsKKyAgICBpZiAocmFuZ2VMZW5n
dGggPCAwIHx8IHJhbmdlTGVuZ3RoID4gdGV4dExlbmd0aCkKKyAgICAgICAgcmFuZ2VMZW5ndGgg
PSB0ZXh0TGVuZ3RoOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHQpOworCisgICAgSW50UmVjdCBleHRlbnRzID0gY29yZU9iamVjdC0+ZG9BWEJvdW5kc0Zv
clJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCkpOworICAgIHN3
aXRjaCAoY29vcmRzKSB7CisgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICBpZiAoRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGV4
dGVudHMgPSBkb2N1bWVudC0+dmlldygpLT5jb250ZW50c1RvU2NyZWVuKGV4dGVudHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFUS19YWV9XSU5ET1c6CisgICAgICAgIC8vIE5vLW9wCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBleHRlbnRzOworfQorCitzdGF0aWMg
dm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgZ2ludCYgc3RhcnRPZmZzZXQs
IGdpbnQmIGVuZE9mZnNldCkKK3sKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFYXJseSByZXR1cm4g
aWYgdGhlIHNlbGVjdGlvbiBkb2Vzbid0IGFmZmVjdCB0aGUgc2VsZWN0ZWQgbm9kZS4KKyAgICBp
ZiAoIXNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24pKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBuZWVkIHRvIGZpbmQgdGhlIGV4YWN0IHN0YXJ0IGFu
ZCBlbmQgcG9zaXRpb25zIGluIHRoZQorICAgIC8vIHNlbGVjdGVkIG5vZGUgdGhhdCBpbnRlcnNl
Y3RzIHRoZSBzZWxlY3Rpb24sIHRvIGxhdGVyIG9uIGdldAorICAgIC8vIHRoZSByaWdodCB2YWx1
ZXMgZm9yIHRoZSBlZmZlY3RpdmUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgorICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIFBvc2l0aW9uIG5vZGVSYW5nZVN0YXJ0OworICAgIFBvc2l0aW9u
IG5vZGVSYW5nZUVuZDsKKyAgICBOb2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOworICAg
IFJlZlB0cjxSYW5nZT4gc2VsUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KworICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQg
aXRzIGZpcnN0CisgICAgLy8gcG9zc2libGUgcG9zaXRpb24gaXMgYWxzbyBpbiB0aGUgc2VsZWN0
aW9uLCB3ZSBtdXN0IHNldAorICAgIC8vIG5vZGVSYW5nZVN0YXJ0IHRvIHRoYXQgcG9zaXRpb24s
IG90aGVyd2lzZSB0byB0aGUgc2VsZWN0aW9uJ3MKKyAgICAvLyBzdGFydCBwb3NpdGlvbiAoaXQg
d291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCisgICAgTm9kZSogZmlyc3RMZWFmTm9k
ZSA9IG5vZGUtPmZpcnN0RGVzY2VuZGFudCgpOworICAgIGlmIChzZWxSYW5nZS0+aXNQb2ludElu
UmFuZ2UoZmlyc3RMZWFmTm9kZSwgMCwgZWMpKQorICAgICAgICBub2RlUmFuZ2VTdGFydCA9IGZp
cnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShmaXJzdExlYWZOb2RlKTsKKyAgICBlbHNlCisgICAg
ICAgIG5vZGVSYW5nZVN0YXJ0ID0gc2VsUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKworICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGxhc3QK
KyAgICAvLyBwb3NzaWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11
c3Qgc2V0CisgICAgLy8gbm9kZVJhbmdlRW5kIHRvIHRoYXQgcG9zaXRpb24sIG90aGVyd2lzZSB0
byB0aGUgc2VsZWN0aW9uJ3MKKyAgICAvLyBlbmQgcG9zaXRpb24gKGl0IHdvdWxkIGJlbG9uZyB0
byB0aGUgbm9kZSBhbnl3YXkpLgorICAgIE5vZGUqIGxhc3RMZWFmTm9kZSA9IG5vZGUtPmxhc3RE
ZXNjZW5kYW50KCk7CisgICAgaWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShsYXN0TGVhZk5v
ZGUsIGxhc3RPZmZzZXRJbk5vZGUobGFzdExlYWZOb2RlKSwgZWMpKQorICAgICAgICBub2RlUmFu
Z2VFbmQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGxhc3RMZWFmTm9kZSk7CisgICAgZWxz
ZQorICAgICAgICBub2RlUmFuZ2VFbmQgPSBzZWxSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKworICAg
IC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBv
YmplY3QuCisgICAgUG9zaXRpb24gcGFyZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQgPSBS
YW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVS
YW5nZVN0YXJ0KTsKKworICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0
cy4KKyAgICBzdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBh
cmVudC5nZXQoKSwgdHJ1ZSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0
cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5p
c0xpc3RJdGVtKCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJ
dGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKyAgICAgICAgc3RhcnRPZmZz
ZXQgKz0gbWFya2VyVGV4dC5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IG5v
ZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQs
IG5vZGVSYW5nZUVuZCk7CisgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5nZXQoKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgd2Via2l0
QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmdldF90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0OworICAgIGlmYWNl
LT5nZXRfdGV4dF9hZnRlcl9vZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRl
ck9mZnNldDsKKyAgICBpZmFjZS0+Z2V0X3RleHRfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRUZXh0QXRPZmZzZXQ7CisgICAgaWZhY2UtPmdldF90ZXh0X2JlZm9yZV9vZmZzZXQg
PSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQ7CisgICAgaWZhY2UtPmdl
dF9jaGFyYWN0ZXJfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJB
dE9mZnNldDsKKyAgICBpZmFjZS0+Z2V0X2NhcmV0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0Q2FyZXRPZmZzZXQ7CisgICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0UnVuQXR0cmlidXRlczsKKyAgICBpZmFjZS0+Z2V0X2RlZmF1bHRf
YXR0cmlidXRlcyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXM7Cisg
ICAgaWZhY2UtPmdldF9jaGFyYWN0ZXJfZXh0ZW50cyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2hhcmFjdGVyRXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9j
b3VudCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQ7CisgICAgaWZhY2Ut
PmdldF9vZmZzZXRfYXRfcG9pbnQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9p
bnQ7CisgICAgaWZhY2UtPmdldF9uX3NlbGVjdGlvbnMgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dE5TZWxlY3Rpb25zOworICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRTZWxlY3Rpb247CisgICAgaWZhY2UtPmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEFkZFNlbGVjdGlvbjsKKyAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdl
YmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uOworICAgIGlmYWNlLT5zZXRfc2VsZWN0
aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb247CisgICAgaWZhY2UtPnNldF9j
YXJldF9vZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0OworfQorCitn
Y2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3Rh
cnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QgPSBjb3JlKHRleHQpOworCisgICAgaW50IGVuZCA9IGVuZE9mZnNldDsKKyAgICBp
ZiAoZW5kT2Zmc2V0ID09IC0xKSB7CisgICAgICAgIGVuZCA9IGNvcmVPYmplY3QtPnN0cmluZ1Zh
bHVlKCkubGVuZ3RoKCk7CisgICAgICAgIGlmICghZW5kKQorICAgICAgICAgICAgZW5kID0gY29y
ZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpLmxlbmd0aCgpOworICAgIH0KKworICAgIFN0cmlu
ZyByZXQ7CisgICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0
ID0gY29yZU9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKDAsIGVuZE9m
ZnNldCkpOworICAgIGVsc2UgeworICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT5zdHJpbmdWYWx1
ZSgpOworICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnRl
eHRVbmRlckVsZW1lbnQoKTsKKyAgICB9CisKKyAgICBpZiAoIXJldC5sZW5ndGgoKSkgeworICAg
ICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gYXQgbGVhc3Qgd2l0aCBhbm9ueW1vdXMgUmVuZGVyQmxv
Y2tzIChlLmcuIGJvZHkgdGV4dCBhbW9uZ3N0IHBhcmFncmFwaHMpCisgICAgICAgIHJldCA9IFN0
cmluZyh0ZXh0Rm9yT2JqZWN0KGNvcmVPYmplY3QpKTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAg
ICAgICAgICBlbmQgPSByZXQubGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gUHJlZml4IGEgaXRl
bSBudW1iZXIvYnVsbGV0IGlmIG5lZWRlZAorICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUo
KSA9PSBMaXN0SXRlbVJvbGUpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmpSZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChvYmpSZW5kZXJlciAmJiBvYmpS
ZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9
IHRvUmVuZGVyTGlzdEl0ZW0ob2JqUmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwor
ICAgICAgICAgICAgcmV0ID0gb2JqUmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IG1hcmtlclRleHQgKyByZXQgOiByZXQgKyBtYXJrZXJUZXh0OworICAgICAgICAgICAgaWYg
KGVuZE9mZnNldCA9PSAtMSkKKyAgICAgICAgICAgICAgICBlbmQgKz0gbWFya2VyVGV4dC5sZW5n
dGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IHJldC5zdWJzdHJpbmcoc3RhcnRP
ZmZzZXQsIGVuZCAtIHN0YXJ0T2Zmc2V0KTsKKyAgICByZXR1cm4gZ19zdHJkdXAocmV0LnV0Zjgo
KS5kYXRhKCkpOworfQorCitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0ZXJP
ZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFy
eVR5cGUsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCit7CisgICAgcmV0dXJu
IGdhaWxfdGV4dF91dGlsX2dldF90ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0ZXh0KSwgZ2V0
UGFuZ29MYXlvdXRGb3JBdGsodGV4dCksIEdBSUxfQUZURVJfT0ZGU0VULCBib3VuZGFyeVR5cGUs
IG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK2djaGFyKiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHRBdE9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRr
VGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9m
ZnNldCkKK3sKKyAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRV
dGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BVF9PRkZT
RVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKwor
Z2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEJlZm9yZU9mZnNldChBdGtUZXh0KiB0
ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3Rh
cnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3sKKyAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxf
Z2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0
ayh0ZXh0KSwgR0FJTF9CRUZPUkVfT0ZGU0VULCBib3VuZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK2d1bmljaGFyIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2hhcmFjdGVyQXRPZmZzZXQoQXRrVGV4dCosIGdpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0
T2Zmc2V0KEF0a1RleHQqIHRleHQpCit7CisgICAgLy8gY29yZU9iamVjdCBpcyB0aGUgdW5pZ25v
cmVkIG9iamVjdCB3aG9zZSBvZmZzZXQgdGhlIGNhbGxlciBpcyByZXF1ZXN0aW5nLgorICAgIC8v
IGZvY3VzZWRPYmplY3QgaXMgdGhlIG9iamVjdCB3aXRoIHRoZSBjYXJldC4gSXQgaXMgbGlrZWx5
IGlnbm9yZWQgLS0gdW5sZXNzIGl0J3MgYSBsaW5rLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2UgbmVl
ZCB0byBtYWtlIHN1cmUgd2UgcGFzcyBhIHZhbGlkIG9iamVjdCBhcyByZWZlcmVuY2UuCisgICAg
aWYgKGNvcmVPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgY29yZU9i
amVjdCA9IGNvcmVPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIGlmICghY29y
ZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgb2Zmc2V0OworICAgIGlmICgh
b2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9mZnNldCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVP
YmplY3QtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJ
dGVtKCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJl
bmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKworICAgICAgICAvLyBXZSBuZWVkIHRv
IGFkanVzdCB0aGUgb2Zmc2V0IGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICAgICAgb2Zm
c2V0ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gVE9ETzogVmVyaWZ5
IHRoaXMgZm9yIFJUTCB0ZXh0LgorICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK0F0a0F0dHJpYnV0
ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVzKEF0a1RleHQqIHRleHQs
IGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIEF0a0F0
dHJpYnV0ZVNldCogcmVzdWx0OworCisgICAgaWYgKCFjb3JlT2JqZWN0KSB7CisgICAgICAgICpz
dGFydE9mZnNldCA9IDA7CisgICAgICAgICplbmRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2hhcmFj
dGVyX2NvdW50KHRleHQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAob2Zm
c2V0ID09IC0xKQorICAgICAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRl
eHQpOworCisgICAgcmVzdWx0ID0gZ2V0UnVuQXR0cmlidXRlc0Zyb21BY2Nlc2liaWxpdHlPYmpl
Y3QoY29yZU9iamVjdCwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGlm
ICgqc3RhcnRPZmZzZXQgPCAwKSB7CisgICAgICAgICpzdGFydE9mZnNldCA9IG9mZnNldDsKKyAg
ICAgICAgKmVuZE9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJp
YnV0ZXMoQXRrVGV4dCogdGV4dCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOwor
fQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyRXh0ZW50cyhBdGtUZXh0
KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQq
IGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKK3sKKyAgICBJbnRSZWN0IGV4dGVudHMgPSB0
ZXh0RXh0ZW50cyh0ZXh0LCBvZmZzZXQsIDEsIGNvb3Jkcyk7CisgICAgKnggPSBleHRlbnRzLngo
KTsKKyAgICAqeSA9IGV4dGVudHMueSgpOworICAgICp3aWR0aCA9IGV4dGVudHMud2lkdGgoKTsK
KyAgICAqaGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBn
aW50IGVuZE9mZnNldCwgQXRrQ29vcmRUeXBlIGNvb3JkcywgQXRrVGV4dFJlY3RhbmdsZSogcmVj
dCkKK3sKKyAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIGNvb3Jkcyk7CisgICAgcmVjdC0+eCA9IGV4dGVu
dHMueCgpOworICAgIHJlY3QtPnkgPSBleHRlbnRzLnkoKTsKKyAgICByZWN0LT53aWR0aCA9IGV4
dGVudHMud2lkdGgoKTsKKyAgICByZWN0LT5oZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOworfQor
CitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQoQXRrVGV4dCogdGV4
dCkKK3sKKyAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlKHRleHQpKTsK
K30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQoQXRrVGV4dCog
dGV4dCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZHMpCit7CisgICAgLy8gRklY
TUU6IFVzZSB0aGUgQXRrQ29vcmRUeXBlCisgICAgLy8gVE9ETzogSXMgaXQgY29ycmVjdCB0byBp
Z25vcmUgcmFuZ2UubGVuZ3RoPworICAgIEludFBvaW50IHBvcyh4LCB5KTsKKyAgICBQbGFpblRl
eHRSYW5nZSByYW5nZSA9IGNvcmUodGV4dCktPmRvQVhSYW5nZUZvclBvc2l0aW9uKHBvcyk7Cisg
ICAgcmV0dXJuIHJhbmdlLnN0YXJ0OworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
TlNlbGVjdGlvbnMoQXRrVGV4dCogdGV4dCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworCisgICAgLy8gT25seSByYW5nZSBzZWxlY3Rpb25z
IGFyZSBuZWVkZWQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kCisgICAgaWYgKCFzZWxl
Y3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucyBmb3Igbm93LCBzbyB0aGVyZSdzIG9ubHkKKyAgICAv
LyB0d28gcG9zc2liaWxpdGllcworICAgIC8vIEFsc28sIHdlIGRvbid0IHdhbnQgdG8gZG8gYW55
dGhpbmcgaWYgdGhlIHNlbGVjdGlvbiBkb2VzIG5vdAorICAgIC8vIGJlbG9uZyB0byB0aGUgY3Vy
cmVudGx5IHNlbGVjdGVkIG9iamVjdC4gV2UgaGF2ZSB0byBjaGVjayBzaW5jZQorICAgIC8vIHRo
ZXJlJ3Mgbm8gd2F5IHRvIGdldCB0aGUgc2VsZWN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCwgb25s
eQorICAgIC8vIHRoZSBnbG9iYWwgb25lICh0aGUgQVBJIGlzIGEgYml0IGNvbmZ1c2luZykKKyAg
ICByZXR1cm4gc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikg
PyAxIDogMDsKK30KKworZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKEF0
a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCog
ZW5kT2Zmc2V0KQoreworICAgIC8vIERlZmF1bHQgdmFsdWVzLCB1bmxlc3MgdGhlIGNvbnRyYXJ5
IGlzIHByb3ZlZAorICAgICpzdGFydE9mZnNldCA9ICplbmRPZmZzZXQgPSAwOworCisgICAgLy8g
V2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcg
YnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgorICAgIGlmIChzZWxlY3Rpb25OdW0p
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR2V0IHRoZSBvZmZzZXRzIG9mIHRoZSBzZWxl
Y3Rpb24gZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworICAgIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmpl
Y3QoY29yZU9iamVjdCwgc2VsZWN0aW9uLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworCisg
ICAgLy8gUmV0dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMgdGhhdCdzIHRoZSBleHBlY3RlZCByZXN1
bHQgZm9yCisgICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhvZCB3aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0
aW9uCisgICAgaWYgKCpzdGFydE9mZnNldCA9PSAqZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0
T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRB
ZGRTZWxlY3Rpb24oQXRrVGV4dCosIGdpbnQsIGdpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0
UmVtb3ZlU2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtKQoreworICAg
IC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRo
aW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9u
TnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJl
bnQgc2VsZWN0aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBvYmplY3QKKyAgICBpZiAoIXdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0TlNlbGVjdGlvbnModGV4dCkpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIC8vIFNldCBhIG5ldyAwLXNpemVkIHNlbGVjdGlvbiB0byB0aGUgY2FyZXQgcG9z
aXRpb24sIGluIG9yZGVyCisgICAgLy8gdG8gc2ltdWxhdGUgc2VsZWN0aW9uIHJlbW92YWwgKEdB
SUwgc3R5bGUpCisgICAgZ2ludCBjYXJldE9mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2FyZXRPZmZzZXQodGV4dCk7CisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2Vs
ZWN0aW9uKHRleHQsIHNlbGVjdGlvbk51bSwgY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0KTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4
dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQor
eworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNv
IGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2Vs
ZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAv
LyBDb25zaWRlciAtMSBhbmQgb3V0LW9mLWJvdW5kIHZhbHVlcyBhbmQgY29ycmVjdCB0aGVtIHRv
IGxlbmd0aAorICAgIGdpbnQgdGV4dENvdW50ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFy
YWN0ZXJDb3VudCh0ZXh0KTsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPCAwIHx8IHN0YXJ0T2Zmc2V0
ID4gdGV4dENvdW50KQorICAgICAgICBzdGFydE9mZnNldCA9IHRleHRDb3VudDsKKyAgICBpZiAo
ZW5kT2Zmc2V0IDwgMCB8fCBlbmRPZmZzZXQgPiB0ZXh0Q291bnQpCisgICAgICAgIGVuZE9mZnNl
dCA9IHRleHRDb3VudDsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZv
ciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29y
ZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlz
dEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0o
cmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBpbnQgbWFya2VyTGVu
Z3RoID0gbWFya2VyVGV4dC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDwgbWFy
a2VyTGVuZ3RoIHx8IGVuZE9mZnNldCA8IG1hcmtlckxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
biBGQUxTRTsKKworICAgICAgICBzdGFydE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgICAg
IGVuZE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgfQorCisgICAgUGxhaW5UZXh0UmFuZ2Ug
dGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisgICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5n
ZUZvclJhbmdlKHRleHRSYW5nZSk7CisgICAgaWYgKHJhbmdlLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlv
blJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNj
ZXNzaWJsZVRleHRTZXRDYXJldE9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCkKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKworICAg
IGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBGQUxTRTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlT2JqZWN0
LT5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgp
KSB7CisgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJl
ciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7CisgICAgICAgIGludCBtYXJrZXJMZW5ndGggPSBt
YXJrZXJUZXh0Lmxlbmd0aCgpOworICAgICAgICBpZiAob2Zmc2V0IDwgbWFya2VyTGVuZ3RoKQor
ICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0
IHRoZSBvZmZzZXQgZm9yIGxpc3QgaXRlbXMuCisgICAgICAgIG9mZnNldCAtPSBtYXJrZXJMZW5n
dGg7CisgICAgfQorCisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRp
b25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisgICAgaWYgKHJhbmdlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQ
b3NpdGlvblJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjk2
N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
QWxvbnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dF9oCisjZGVmaW5lIFdlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQoQXRrVGV4dElmYWNlKik7CitnY2hh
ciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zmc2V0
LCBnaW50IGVuZE9mZnNldCk7CitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0
ZXJPZmZzZXQoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnksIGdpbnQqIHN0
YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpOworZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dEF0T2Zmc2V0KEF0a1RleHQqLCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5LCBn
aW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KTsKK2djaGFyKiB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBBdGtUZXh0
Qm91bmRhcnksIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpOworZ3VuaWNoYXIg
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldChBdGtUZXh0KiwgZ2ludCBv
ZmZzZXQpOworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KEF0a1RleHQq
KTsKK0F0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVz
KEF0a1RleHQqLCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNl
dCk7CitBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJp
YnV0ZXMoQXRrVGV4dCopOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckV4
dGVudHMoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0
aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUpOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZz
ZXQsIEF0a0Nvb3JkVHlwZSwgQXRrVGV4dFJlY3RhbmdsZSopOworZ2ludCB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldENoYXJhY3RlckNvdW50KEF0a1RleHQqKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRPZmZzZXRBdFBvaW50KEF0a1RleHQqLCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRU
eXBlKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyhBdGtUZXh0Kik7
CitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24oQXRrVGV4dCosIGdpbnQg
c2VsZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KTsKK2dib29s
ZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0QWRkU2VsZWN0aW9uKEF0a1RleHQqLCBnaW50IHN0YXJ0
T2Zmc2V0LCBnaW50IGVuZE9mZnNldCk7CitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNl
dFNlbGVjdGlvbihBdGtUZXh0KiwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQs
IGdpbnQgZW5kT2Zmc2V0KTsKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2Vs
ZWN0aW9uKEF0a1RleHQqLCBnaW50IHNlbGVjdGlvbk51bSk7CitnYm9vbGVhbiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KEF0a1RleHQqLCBnaW50IG9mZnNldCk7CisKKyNlbmRp
ZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5k
ZXggYzI5NDIyNC4uNDNmNDEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMzQsNiArMzQsOSBA
QAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJh
bmdlLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtODEs
MyArODQsMjcgQEAgY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQog
ICAgIHJldHVybmVkU3RyaW5nID0gc3RyLnV0ZjgoKTsKICAgICByZXR1cm4gcmV0dXJuZWRTdHJp
bmcuZGF0YSgpOwogfQorCitib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7Cisg
ICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNlbGVjdGlvbi5pc05v
bmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIHdhbnQgdG8gY2hlY2sgdGhhdCBib3RoIHRoZSBz
ZWxlY3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQorICAgIC8vIEFORCB0aGF0IHRoZSBzZWxlY3Rp
b24gaXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUgb2YgdGhlCisgICAgLy8gYm91bmRhcmllcyBm
b3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUKKyAgICAv
LyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHku
CisgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKKyAgICBOb2RlKiBsYXN0RGVz
Y2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgcmV0dXJuIChyYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgZWMpCisgICAgICAg
ICAgICAmJiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IG5vZGUgfHwgcmFuZ2UtPmVuZE9mZnNl
dCgpKQorICAgICAgICAgICAgJiYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IGxhc3REZXNj
ZW5kYW50IHx8IHJhbmdlLT5zdGFydE9mZnNldCgpICE9IGxhc3RPZmZzZXRJbk5vZGUobGFzdERl
c2NlbmRhbnQpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaAppbmRleCBiM2NlNDU3Li4zMmY5NDVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmgKQEAgLTI4LDYgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKIH0KIAogQXRrQXR0cmlidXRlU2V0KiBhZGRUb0F0a0F0dHJpYnV0ZVNldChBdGtBdHRy
aWJ1dGVTZXQqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CkBAIC0zNiw0
ICszNyw3IEBAIHZvaWQgY29udGVudHNSZWxhdGl2ZVRvQXRrQ29vcmRpbmF0ZVR5cGUoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCosIEF0a0Nvb3JkCiAKIGNvbnN0IGNoYXIqIHJldHVyblN0
cmluZyhjb25zdCBTdHJpbmcmKTsKIAorLy8gQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBzZWxlY3Rp
b24gYmVsb25ncyBvciBub3QgdG8gYW4gQWNjZXNzaWJpbGl0eU9iamVjdCdzIHNjb3BlLgorYm9v
bCBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCos
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKKwogI2VuZGlmIC8vIFdlYktpdEFjY2Vzc2li
bGVVdGlsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAppbmRleCA0YzgzNDU1Li43OTg3
NTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAj
aW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oIgogI2luY2x1ZGUg
IldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVk
ZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0xMTUsMTEg
KzExNiw2IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a09iamVjdCogb2Jq
ZWN0KQogICAgIHJldHVybiBjb3JlKFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCkpOwogfQogCi1z
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0KQotewotICAgIHJl
dHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwotfQotCiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZShBdGtUYWJsZSogdGFibGUpCiB7CiAgICAgcmV0dXJuIGNvcmUoQVRLX09CSkVD
VCh0YWJsZSkpOwpAQCAtMTMwLDggKzEyNiw2IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlKEF0a1ZhbHVlKiB2YWx1ZSkKICAgICByZXR1cm4gY29yZShBVEtfT0JKRUNUKHZhbHVl
KSk7CiB9CiAKLXN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChB
dGtUZXh0KiwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpOwotCiBzdGF0aWMgY29u
c3QgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uYW1lKEF0a09iamVjdCogb2JqZWN0KQog
ewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKG9iamVjdCk7CkBA
IC0xNDMsNyArMTM3LDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9n
ZXRfbmFtZShBdGtPYmplY3QqIG9iamVjdCkKICAgICAgICAgaWYgKGxhYmVsKSB7CiAgICAgICAg
ICAgICBBdGtPYmplY3QqIGF0a09iamVjdCA9IGxhYmVsLT53cmFwcGVyKCk7CiAgICAgICAgICAg
ICBpZiAoQVRLX0lTX1RFWFQoYXRrT2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChhdGtPYmplY3QpLCAwLCAtMSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dChBVEtf
VEVYVChhdGtPYmplY3QpLCAwLCAtMSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUcnkgdGV4
dCB1bmRlciB0aGUgbm9kZS4KQEAgLTU4NywzMCArNTgxLDYgQEAgc3RhdGljIEF0a1JvbGUgd2Vi
a2l0X2FjY2Vzc2libGVfZ2V0X3JvbGUoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAgcmV0dXJuIGF0
a1JvbGUoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkpOwogfQogCi1zdGF0aWMgYm9vbCBzZWxlY3Rp
b25CZWxvbmdzVG9PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9i
amVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSB3
YW50IHRvIGNoZWNrIHRoYXQgYm90aCB0aGUgc2VsZWN0aW9uIGludGVyc2VjdHMgdGhlIG5vZGUK
LSAgICAvLyBBTkQgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG5vdCBqdXN0ICJ0b3VjaGluZyIgb25l
IG9mIHRoZQotICAgIC8vIGJvdW5kYXJpZXMgZm9yIHRoZSBzZWxlY3RlZCBub2RlLiBXZSB3YW50
IHRvIGNoZWNrIHdoZXRoZXIgdGhlCi0gICAgLy8gbm9kZSBpcyBhY3R1YWxseSBpbnNpZGUgdGhl
IHJlZ2lvbiwgYXQgbGVhc3QgcGFydGlhbGx5LgotICAgIE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0
LT5ub2RlKCk7Ci0gICAgTm9kZSogbGFzdERlc2NlbmRhbnQgPSBub2RlLT5sYXN0RGVzY2VuZGFu
dCgpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHJldHVybiAocmFuZ2UtPmludGVy
c2VjdHNOb2RlKG5vZGUsIGVjKQotICAgICAgICAgICAgJiYgKHJhbmdlLT5lbmRDb250YWluZXIo
KSAhPSBub2RlIHx8IHJhbmdlLT5lbmRPZmZzZXQoKSkKLSAgICAgICAgICAgICYmIChyYW5nZS0+
c3RhcnRDb250YWluZXIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnRPZmZzZXQo
KSAhPSBsYXN0T2Zmc2V0SW5Ob2RlKGxhc3REZXNjZW5kYW50KSkpOwotfQotCiBzdGF0aWMgYm9v
bCBpc1RleHRXaXRoQ2FyZXQoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKIHsKICAg
ICBpZiAoIWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKQpAQCAtODI3LDgwMiArNzk3LDYgQEAgd2Via2l0X2FjY2Vzc2libGVfZ2V0X3R5cGUo
dm9pZCkKICAgICByZXR1cm4gdHlwZV92b2xhdGlsZTsKIH0KIAotLy8gVGV4dAotCi1zdGF0aWMg
Z2NoYXIqIHV0ZjhTdWJzdHIoY29uc3QgZ2NoYXIqIHN0cmluZywgZ2ludCBzdGFydCwgZ2ludCBl
bmQpCi17Ci0gICAgQVNTRVJUKHN0cmluZyk7Ci0gICAgZ2xvbmcgc3RyTGVuID0gZ191dGY4X3N0
cmxlbihzdHJpbmcsIC0xKTsKLSAgICBpZiAoc3RhcnQgPiBzdHJMZW4gfHwgZW5kID4gc3RyTGVu
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBnY2hhciogc3RhcnRQdHIgPSBnX3V0Zjhfb2Zmc2V0
X3RvX3BvaW50ZXIoc3RyaW5nLCBzdGFydCk7Ci0gICAgZ3NpemUgbGVuSW5CeXRlcyA9IGdfdXRm
OF9vZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIGVuZCArIDEpIC0gIHN0YXJ0UHRyOwotICAgIGdj
aGFyKiBvdXRwdXQgPSBzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFsbG9jMChsZW5JbkJ5dGVzICsg
MSkpOwotICAgIHJldHVybiBnX3V0Zjhfc3RybmNweShvdXRwdXQsIHN0YXJ0UHRyLCBlbmQgLSBz
dGFydCArIDEpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb21wbGV0ZWx5IGdlbmVy
YWwsIGlzIGl0J3MgdGllZCB0byB0aGUKLS8vIGludGVybmFscyBvZiBXZWJDb3JlJ3MgdGV4dCBw
cmVzZW50YXRpb24uCi1zdGF0aWMgZ2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwgaW50IGZyb20sIGludCB0bykKLXsKLSAgICBD
U3RyaW5nIHN0cmluZ1VURjggPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUoY2hhcmFjdGVycywgbGVu
Z3RoLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVzKTsKLSAgICBnY2hhciogdXRmOFN0cmlu
ZyA9IHV0ZjhTdWJzdHIoc3RyaW5nVVRGOC5kYXRhKCksIGZyb20sIHRvKTsKLSAgICBpZiAoIWdf
dXRmOF92YWxpZGF0ZSh1dGY4U3RyaW5nLCAtMSwgMCkpIHsKLSAgICAgICAgZ19mcmVlKHV0ZjhT
dHJpbmcpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZ3NpemUgbGVuID0gc3RybGVu
KHV0ZjhTdHJpbmcpOwotICAgIEdTdHJpbmcqIHJldCA9IGdfc3RyaW5nX25ld19sZW4oMCwgbGVu
KTsKLSAgICBnY2hhciogcHRyID0gdXRmOFN0cmluZzsKLQotICAgIC8vIFdlYkNvcmUgaW50cm9k
dWNlcyBsaW5lIGJyZWFrcyBpbiB0aGUgdGV4dCB0aGF0IGRvIG5vdCByZWZsZWN0Ci0gICAgLy8g
dGhlIGxheW91dCB5b3Ugc2VlIG9uIHRoZSBzY3JlZW4sIHJlcGxhY2UgdGhlbSB3aXRoIHNwYWNl
cwotICAgIHdoaWxlIChsZW4gPiAwKSB7Ci0gICAgICAgIGdpbnQgaW5kZXgsIHN0YXJ0OwotICAg
ICAgICBwYW5nb19maW5kX3BhcmFncmFwaF9ib3VuZGFyeShwdHIsIGxlbiwgJmluZGV4LCAmc3Rh
cnQpOwotICAgICAgICBnX3N0cmluZ19hcHBlbmRfbGVuKHJldCwgcHRyLCBpbmRleCk7Ci0gICAg
ICAgIGlmIChpbmRleCA9PSBzdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBnX3N0
cmluZ19hcHBlbmRfYyhyZXQsICcgJyk7Ci0gICAgICAgIHB0ciArPSBzdGFydDsKLSAgICAgICAg
bGVuIC09IHN0YXJ0OwotICAgIH0KLQotICAgIGdfZnJlZSh1dGY4U3RyaW5nKTsKLSAgICByZXR1
cm4gZ19zdHJpbmdfZnJlZShyZXQsIEZBTFNFKTsKLX0KLQotZ2NoYXIqIHRleHRGb3JSZW5kZXJl
cihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIEdTdHJpbmcqIHJlc3VsdFRleHQgPSBn
X3N0cmluZ19uZXcoMCk7Ci0KLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gZ19z
dHJpbmdfZnJlZShyZXN1bHRUZXh0LCBGQUxTRSk7Ci0KLSAgICAvLyBGb3IgUmVuZGVyQmxvY2tz
LCBwaWVjZSB0b2dldGhlciB0aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0IG9iamVjdHMgdGhl
eSBjb250YWluLgotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlci0+Zmly
c3RDaGlsZCgpOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBpZiAob2JqZWN0LT5pc0JSKCkpIHsKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChy
ZXN1bHRUZXh0LCAiXG4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dDsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNUZXh0
KCkpCi0gICAgICAgICAgICByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG9iamVjdCk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKG9iamVjdC0+aXNSZXBsYWNlZCgpKQotICAgICAg
ICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF91bmljaGFyKHJlc3VsdFRleHQsIG9iamVjdFJlcGxh
Y2VtZW50Q2hhcmFjdGVyKTsKLQotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBjaGls
ZHJlbiwgaWYgYW55LCB0byBjb25zaWRlciB3aGVuCi0gICAgICAgICAgICAvLyBjdXJyZW50IG9i
amVjdCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQgc29tZSBvZiBpdHMKLSAgICAgICAgICAgIC8v
IGNoaWxkcmVuIGFyZSwgaW4gb3JkZXIgbm90IHRvIG1pc3MgdGhvc2UgcG9ydGlvbnMgb2YKLSAg
ICAgICAgICAgIC8vIHRleHQgYnkgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRob3NlIHNpdHVhdGlv
bnMKLSAgICAgICAgICAgIGlmIChvYmplY3QtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgICAg
ICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgdGV4dEZvclJlbmRlcmVyKG9iamVjdCkpOwot
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIElubGluZVRleHRC
b3gqIGJveCA9IHJlbmRlclRleHQgPyByZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKSA6IDA7Ci0g
ICAgICAgIHdoaWxlIChib3gpIHsKLSAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0gY29udmVydFVu
aUNoYXJUb1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50ZXh0TGVu
Z3RoKCksIGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19h
cHBlbmQocmVzdWx0VGV4dCwgdGV4dCk7Ci0gICAgICAgICAgICAvLyBOZXdsaW5lIGNoYXJzIGlu
IHRoZSBzb3VyY2UgcmVzdWx0IGluIHNlcGFyYXRlIHRleHQgYm94ZXMsIHNvIGNoZWNrCi0gICAg
ICAgICAgICAvLyBiZWZvcmUgYWRkaW5nIGEgbmV3bGluZSBpbiB0aGUgbGF5b3V0LiBTZWUgYnVn
IDI1NDE1IGNvbW1lbnQgIzc4LgotICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc2libGluZyBp
cyBhIEJSLCB3ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3ZSBleGFtaW5lIHRoYXQgY2hpbGQu
Ci0gICAgICAgICAgICBpZiAoIWJveC0+bmV4dE9uTGluZUV4aXN0cygpICYmICghb2JqZWN0LT5u
ZXh0U2libGluZygpIHx8ICFvYmplY3QtPm5leHRTaWJsaW5nKCktPmlzQlIoKSkpCi0gICAgICAg
ICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsICJcbiIpOwotICAgICAgICAgICAg
Ym94ID0gYm94LT5uZXh0VGV4dEJveCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSW5z
ZXJ0IHRoZSB0ZXh0IG9mIHRoZSBtYXJrZXIgZm9yIGxpc3QgaXRlbSBpbiB0aGUgcmlnaHQgcGxh
Y2UsIGlmIHByZXNlbnQKLSAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAg
ICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJU
ZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUikKLSAgICAgICAgICAgIGdfc3RyaW5nX3ByZXBlbmQocmVzdWx0VGV4dCwgbWFy
a2VyVGV4dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ19zdHJp
bmdfYXBwZW5kKHJlc3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0UpOwotfQotCi1nY2hh
ciogdGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQotewotICAg
IEdTdHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKLQotICAgIC8vIEZvciB0ZXh0IGNvbnRy
b2xzLCB3ZSBjYW4gZ2V0IHRoZSB0ZXh0IGxpbmUgYnkgbGluZS4KLSAgICBpZiAoY29yZU9iamVj
dC0+aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBjb3Jl
T2JqZWN0LT50ZXh0TGVuZ3RoKCk7Ci0gICAgICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICAg
ICAgUGxhaW5UZXh0UmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKGxp
bmVOdW1iZXIpOwotICAgICAgICB3aGlsZSAocmFuZ2UubGVuZ3RoKSB7Ci0gICAgICAgICAgICAv
LyBXaGVuIGEgbGluZSBvZiB0ZXh0IHdyYXBzIGluIGEgdGV4dCBhcmVhLCB0aGUgZmluYWwgc3Bh
Y2UgaXMgcmVtb3ZlZC4KLSAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0
aCA8IHRleHRMZW5ndGgpCi0gICAgICAgICAgICAgICAgcmFuZ2UubGVuZ3RoIC09IDE7Ci0gICAg
ICAgICAgICBTdHJpbmcgbGluZVRleHQgPSBjb3JlT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2Uo
cmFuZ2UpOwotICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgbGluZVRleHQudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAg
ICAgICAgIHJhbmdlID0gY29yZU9iamVjdC0+ZG9BWFJhbmdlRm9yTGluZSgrK2xpbmVOdW1iZXIp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkgewotICAgICAgICBHT3duUHRyPGdjaGFyPiByZW5kZXJlclRleHQodGV4
dEZvclJlbmRlcmVyKGNvcmVPYmplY3QtPnJlbmRlcmVyKCkpKTsKLSAgICAgICAgZ19zdHJpbmdf
YXBwZW5kKHN0ciwgcmVuZGVyZXJUZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ19z
dHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKLX0KLQotc3RhdGljIGdjaGFyKiB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF90ZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQg
ZW5kT2Zmc2V0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHQpOwotCi0gICAgaW50IGVuZCA9IGVuZE9mZnNldDsKLSAgICBpZiAoZW5kT2Zmc2V0ID09
IC0xKSB7Ci0gICAgICAgIGVuZCA9IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCkubGVuZ3RoKCk7
Ci0gICAgICAgIGlmICghZW5kKQotICAgICAgICAgICAgZW5kID0gY29yZU9iamVjdC0+dGV4dFVu
ZGVyRWxlbWVudCgpLmxlbmd0aCgpOwotICAgIH0KLQotICAgIFN0cmluZyByZXQ7Ci0gICAgaWYg
KGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+
ZG9BWFN0cmluZ0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKDAsIGVuZE9mZnNldCkpOwotICAgIGVs
c2UgewotICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT5zdHJpbmdWYWx1ZSgpOwotICAgICAgICBp
ZiAoIXJldCkKLSAgICAgICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnRleHRVbmRlckVsZW1lbnQo
KTsKLSAgICB9Ci0KLSAgICBpZiAoIXJldC5sZW5ndGgoKSkgewotICAgICAgICAvLyBUaGlzIGNh
biBoYXBwZW4gYXQgbGVhc3Qgd2l0aCBhbm9ueW1vdXMgUmVuZGVyQmxvY2tzIChlLmcuIGJvZHkg
dGV4dCBhbW9uZ3N0IHBhcmFncmFwaHMpCi0gICAgICAgIHJldCA9IFN0cmluZyh0ZXh0Rm9yT2Jq
ZWN0KGNvcmVPYmplY3QpKTsKLSAgICAgICAgaWYgKCFlbmQpCi0gICAgICAgICAgICBlbmQgPSBy
ZXQubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgLy8gUHJlZml4IGEgaXRlbSBudW1iZXIvYnVsbGV0
IGlmIG5lZWRlZAotICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBMaXN0SXRlbVJv
bGUpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmpSZW5kZXJlciA9IGNvcmVPYmplY3QtPnJl
bmRlcmVyKCk7Ci0gICAgICAgIGlmIChvYmpSZW5kZXJlciAmJiBvYmpSZW5kZXJlci0+aXNMaXN0
SXRlbSgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0
ZW0ob2JqUmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICAgICAgcmV0
ID0gb2JqUmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IG1hcmtlclRleHQg
KyByZXQgOiByZXQgKyBtYXJrZXJUZXh0OwotICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA9PSAt
MSkKLSAgICAgICAgICAgICAgICBlbmQgKz0gbWFya2VyVGV4dC5sZW5ndGgoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldCA9IHJldC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZCAtIHN0
YXJ0T2Zmc2V0KTsKLSAgICByZXR1cm4gZ19zdHJkdXAocmV0LnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci1zdGF0aWMgR2FpbFRleHRVdGlsKiBnZXRHYWlsVGV4dFV0aWxGb3JBdGsoQXRrVGV4dCogdGV4
dE9iamVjdCkKLXsKLSAgICBHYWlsVGV4dFV0aWwqIGdhaWxUZXh0VXRpbCA9IGdhaWxfdGV4dF91
dGlsX25ldygpOwotICAgIGdhaWxfdGV4dF91dGlsX3RleHRfc2V0dXAoZ2FpbFRleHRVdGlsLCB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KHRleHRPYmplY3QsIDAsIC0xKSk7Ci0gICAg
cmV0dXJuIGdhaWxUZXh0VXRpbDsKLX0KLQotc3RhdGljIFBhbmdvTGF5b3V0KiBnZXRQYW5nb0xh
eW91dEZvckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHRPYmplY3QpOwotCi0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC0+dmll
dygpLT5ob3N0V2luZG93KCk7Ci0gICAgaWYgKCFob3N0V2luZG93KQotICAgICAgICByZXR1cm4g
MDsKLSAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgd2ViVmlldyA9IGhvc3RXaW5kb3ctPnBsYXRmb3Jt
UGFnZUNsaWVudCgpOwotICAgIGlmICghd2ViVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCB0aGUgbGF5b3V0IGFzIGl0IGFwcGVhcnMgb24gdGhl
IHNjcmVlbgotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBndGtfd2lkZ2V0X2NyZWF0ZV9wYW5n
b19sYXlvdXQoc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4od2ViVmlldyksIHRleHRGb3JPYmplY3Qo
Y29yZU9iamVjdCkpOwotICAgIHJldHVybiBsYXlvdXQ7Ci19Ci0KLXN0YXRpYyBnY2hhciogd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQoQXRrVGV4dCogdGV4dCwg
Z2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIGdpbnQqIHN0YXJ0T2Zm
c2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgcmV0dXJuIGdhaWxfdGV4dF91dGlsX2dldF90
ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0ZXh0KSwgZ2V0UGFuZ29MYXlvdXRGb3JBdGsodGV4
dCksIEdBSUxfQUZURVJfT0ZGU0VULCBib3VuZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfdGV4dF9hdF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3Vu
ZGFyeSBib3VuZGFyeVR5cGUsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17
Ci0gICAgcmV0dXJuIGdhaWxfdGV4dF91dGlsX2dldF90ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0
ayh0ZXh0KSwgZ2V0UGFuZ29MYXlvdXRGb3JBdGsodGV4dCksIEdBSUxfQVRfT0ZGU0VULCBib3Vu
ZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBn
Y2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0KEF0a1Rl
eHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50
KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIHJldHVybiBnYWlsX3RleHRf
dXRpbF9nZXRfdGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0
Rm9yQXRrKHRleHQpLCBHQUlMX0JFRk9SRV9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQotc3RhdGljIGd1bmljaGFyIHdlYmtpdF9hY2Nl
c3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9hdF9vZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBv
ZmZzZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh
dGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQq
IHRleHQpCi17Ci0gICAgLy8gY29yZU9iamVjdCBpcyB0aGUgdW5pZ25vcmVkIG9iamVjdCB3aG9z
ZSBvZmZzZXQgdGhlIGNhbGxlciBpcyByZXF1ZXN0aW5nLgotICAgIC8vIGZvY3VzZWRPYmplY3Qg
aXMgdGhlIG9iamVjdCB3aXRoIHRoZSBjYXJldC4gSXQgaXMgbGlrZWx5IGlnbm9yZWQgLS0gdW5s
ZXNzIGl0J3MgYSBsaW5rLgotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBj
b3JlKHRleHQpOwotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUg
d2UgcGFzcyBhIHZhbGlkIG9iamVjdCBhcyByZWZlcmVuY2UuCi0gICAgaWYgKGNvcmVPYmplY3Qt
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgY29yZU9iamVjdCA9IGNvcmVPYmpl
Y3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlmICghY29yZU9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgb2Zmc2V0OwotICAgIGlmICghb2JqZWN0Rm9jdXNlZEFu
ZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9mZnNldCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAg
ICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2Vy
VGV4dFdpdGhTdWZmaXgoKTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zm
c2V0IGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KLSAgICAgICAgb2Zmc2V0ICs9IG1hcmtlclRl
eHQubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgLy8gVE9ETzogVmVyaWZ5IHRoaXMgZm9yIFJUTCB0
ZXh0LgotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYmFzZWxpbmVQb3NpdGlv
bkZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCkKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlbGluZVBvc2l0aW9uIG9yaWdpbmF0ZXMg
ZnJvbSBSZW5kZXJPYmplY3QuY3BwIGFuZCB3YXMKLSAgICAvLyByZW1vdmVkIGluIHI3MDA3Mi4g
VGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGluY29ycmVjdCB0aG91Z2gsIGJlY2F1c2UgdGhpcyBp
cyBub3QgdGhlCi0gICAgLy8gYmFzZWxpbmUgb2YgdGhlIHVuZGVybHlpbmcgUmVuZGVyT2JqZWN0
LCBidXQgb2YgdGhlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCi0gICAgY29uc3QgRm9udE1l
dHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyT2JqZWN0LT5maXJzdExpbmVTdHlsZSgpLT5mb250
TWV0cmljcygpOwotICAgIHJldHVybiBmb250TWV0cmljcy5hc2NlbnQoKSArIChyZW5kZXJPYmpl
Y3QtPmZpcnN0TGluZVN0eWxlKCktPmNvbXB1dGVkTGluZUhlaWdodCgpIC0gZm9udE1ldHJpY3Mu
aGVpZ2h0KCkpIC8gMjsKLX0KLQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRl
U2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QpCi17Ci0gICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBvYmplY3Qt
PnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7
Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IDA7Ci0gICAgR093blB0cjxnY2hhcj4g
YnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9udFNpemUoKSkpOwotICAgIHJl
c3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dl
dF9uYW1lKEFUS19URVhUX0FUVFJfU0laRSksIGJ1ZmZlci5nZXQoKSk7Ci0KLSAgICBDb2xvciBi
Z0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7Ci0gICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGJ1ZmZlci5z
ZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJnQ29sb3IucmVkKCksIGJnQ29sb3IuZ3JlZW4oKSwgYmdDb2xvci5ibHVlKCkp
KTsKLSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4
dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9CR19DT0xPUiksIGJ1ZmZlci5nZXQo
KSk7Ci0gICAgfQotCi0gICAgQ29sb3IgZmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgaWYgKGZnQ29sb3IuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZnQ29sb3IucmVkKCksIGZnQ29sb3IuZ3JlZW4oKSwg
ZmdDb2xvci5ibHVlKCkpKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
cmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9GR19DT0xP
UiksIGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGJhc2VsaW5lUG9zaXRpb247Ci0g
ICAgYm9vbCBpbmNsdWRlUmlzZSA9IHRydWU7Ci0gICAgc3dpdGNoIChzdHlsZS0+dmVydGljYWxB
bGlnbigpKSB7Ci0gICAgY2FzZSBTVUI6Ci0gICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAtMSAq
IGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QocmVuZGVyZXIpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNVUEVSOgotICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gYmFzZWxpbmVQ
b3NpdGlvbkZvclJlbmRlck9iamVjdChyZW5kZXJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQkFTRUxJTkU6Ci0gICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAwOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBpbmNsdWRlUmlzZSA9IGZhbHNlOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaW5jbHVkZVJpc2UpIHsKLSAgICAgICAgYnVmZmVyLnNl
dChnX3N0cmR1cF9wcmludGYoIiVpIiwgYmFzZWxpbmVQb3NpdGlvbikpOwotICAgICAgICByZXN1
bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRf
bmFtZShBVEtfVEVYVF9BVFRSX1JJU0UpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQotICAgIGlm
ICghc3R5bGUtPnRleHRJbmRlbnQoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGludCBpbmRl
bnRhdGlvbiA9IHN0eWxlLT50ZXh0SW5kZW50KCkuY2FsY1ZhbHVlKG9iamVjdC0+c2l6ZSgpLndp
ZHRoKCkpOwotICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBpbmRlbnRh
dGlvbikpOwotICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0
a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZlci5n
ZXQoKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGZvbnRGYW1pbHlOYW1lID0gc3R5bGUtPmZvbnQo
KS5mYW1pbHkoKS5mYW1pbHkoKS5zdHJpbmcoKTsKLSAgICBpZiAoZm9udEZhbWlseU5hbWUubGVm
dCg4KSA9PSAiLXdlYmtpdC0iKQotICAgICAgICBmb250RmFtaWx5TmFtZSA9IGZvbnRGYW1pbHlO
YW1lLnN1YnN0cmluZyg4KTsKLQotICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJl
c3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkFNSUxZX05B
TUUpLCBmb250RmFtaWx5TmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGludCBmb250V2VpZ2h0
ID0gLTE7Ci0gICAgc3dpdGNoIChzdHlsZS0+Zm9udCgpLndlaWdodCgpKSB7Ci0gICAgY2FzZSBG
b250V2VpZ2h0MTAwOgotICAgICAgICBmb250V2VpZ2h0ID0gMTAwOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSAyMDA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDMwMDoKLSAgICAgICAgZm9udFdlaWdodCA9
IDMwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAgICBm
b250V2VpZ2h0ID0gNDAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6
Ci0gICAgICAgIGZvbnRXZWlnaHQgPSA1MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9u
dFdlaWdodDYwMDoKLSAgICAgICAgZm9udFdlaWdodCA9IDYwMDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250V2VpZ2h0NzAwOgotICAgICAgICBmb250V2VpZ2h0ID0gNzAwOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSA4
MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDkwMDoKLSAgICAgICAgZm9u
dFdlaWdodCA9IDkwMDsKLSAgICB9Ci0gICAgaWYgKGZvbnRXZWlnaHQgPiAwKSB7Ci0gICAgICAg
IGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGZvbnRXZWlnaHQpKTsKLSAgICAgICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9XRUlHSFQpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQot
ICAgIHN3aXRjaCAoc3R5bGUtPnRleHRBbGlnbigpKSB7Ci0gICAgY2FzZSBUQUFVVE86Ci0gICAg
Y2FzZSBUQVNUQVJUOgotICAgIGNhc2UgVEFFTkQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TEVGVDoKLSAgICBjYXNlIFdFQktJVF9MRUZUOgotICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0
dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9B
VFRSX0pVU1RJRklDQVRJT04pLCAibGVmdCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJJ
R0hUOgotICAgIGNhc2UgV0VCS0lUX1JJR0hUOgotICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0
dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9B
VFRSX0pVU1RJRklDQVRJT04pLCAicmlnaHQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
RU5URVI6Ci0gICAgY2FzZSBXRUJLSVRfQ0VOVEVSOgotICAgICAgICByZXN1bHQgPSBhZGRUb0F0
a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVY
VF9BVFRSX0pVU1RJRklDQVRJT04pLCAiY2VudGVyIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSlVTVElGWToKLSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0
LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9O
KSwgImZpbGwiKTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1VOREVSTElO
RSksIChzdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIFVOREVSTElORSkgPyAic2luZ2xlIiA6ICJu
b25lIik7Ci0KLSAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NUWUxFKSwgc3R5bGUtPmZvbnQo
KS5pdGFsaWMoKSA/ICJpdGFsaWMiIDogIm5vcm1hbCIpOwotCi0gICAgcmVzdWx0ID0gYWRkVG9B
dGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9TVFJJS0VUSFJPVUdIKSwgKHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpICYgTElORV9U
SFJPVUdIKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCi0gICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRy
aWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9JTlZJU0lCTEUpLCAoc3R5bGUtPnZpc2liaWxpdHkoKSA9PSBISURERU4pID8gInRydWUiIDog
ImZhbHNlIik7Ci0KLSAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0
a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0VESVRBQkxFKSwgb2JqZWN0
LT5pc1JlYWRPbmx5KCkgPyAiZmFsc2UiIDogInRydWUiKTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0YXRpYyBnaW50IGNvbXBhcmVBdHRyaWJ1dGUoY29uc3QgQXRrQXR0cmlidXRlKiBh
LCBjb25zdCBBdGtBdHRyaWJ1dGUqIGIpCi17Ci0gICAgcmV0dXJuIGdfc3RyY21wMChhLT5uYW1l
LCBiLT5uYW1lKSB8fCBnX3N0cmNtcDAoYS0+dmFsdWUsIGItPnZhbHVlKTsKLX0KLQotLy8gUmV0
dXJucyBhbiBBdGtBdHRyaWJ1dGVTZXQgd2l0aCB0aGUgZWxlbWVudHMgb2YgYTEgd2hpY2ggYXJl
IGVpdGhlcgotLy8gbm90IHByZXNlbnQgb3IgZGlmZmVyZW50IGluIGEyLiBOZWl0aGVyIGExIG5v
ciBhMiBzaG91bGQgYmUgdXNlZAotLy8gYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotc3Rh
dGljIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0RGlmZmVyZW5jZShBdGtBdHRyaWJ1dGVT
ZXQqIGExLCBBdGtBdHRyaWJ1dGVTZXQqIGEyKQotewotICAgIGlmICghYTIpCi0gICAgICAgIHJl
dHVybiBhMTsKLQotICAgIEF0a0F0dHJpYnV0ZVNldCogaSA9IGExOwotICAgIEF0a0F0dHJpYnV0
ZVNldCogZm91bmQ7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiB0b0RlbGV0ZSA9IDA7Ci0KLSAgICB3
aGlsZSAoaSkgewotICAgICAgICBmb3VuZCA9IGdfc2xpc3RfZmluZF9jdXN0b20oYTIsIGktPmRh
dGEsIChHQ29tcGFyZUZ1bmMpY29tcGFyZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChmb3VuZCkg
ewotICAgICAgICAgICAgQXRrQXR0cmlidXRlU2V0KiB0ID0gaS0+bmV4dDsKLSAgICAgICAgICAg
IHRvRGVsZXRlID0gZ19zbGlzdF9wcmVwZW5kKHRvRGVsZXRlLCBpLT5kYXRhKTsKLSAgICAgICAg
ICAgIGExID0gZ19zbGlzdF9kZWxldGVfbGluayhhMSwgaSk7Ci0gICAgICAgICAgICBpID0gdDsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpID0gaS0+bmV4dDsKLSAgICB9Ci0KLSAgICBh
dGtfYXR0cmlidXRlX3NldF9mcmVlKGEyKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHRv
RGVsZXRlKTsKLSAgICByZXR1cm4gYTE7Ci19Ci0KLXN0YXRpYyBndWludCBhY2Nlc3NpYmlsaXR5
T2JqZWN0TGVuZ3RoKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkKLXsKLSAgICAv
LyBOb24gcmVuZGVyIG9iamVjdHMgYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnQKLSAgICBpZiAo
IW9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgLy8gRm9yIHRob3NlIG9iamVjdHMgaW1wbGVtZW50aW5nIHRoZSBBdGtUZXh0IGlu
dGVyZmFjZSB3ZSB1c2UgdGhlCi0gICAgLy8gd2VsbCBrbm93biBBUEkgdG8gYWx3YXlzIGdldCB0
aGUgdGV4dCBpbiBhIGNvbnNpc3RlbnQgd2F5Ci0gICAgQXRrT2JqZWN0KiBhdGtPYmogPSBBVEtf
T0JKRUNUKG9iamVjdC0+d3JhcHBlcigpKTsKLSAgICBpZiAoQVRLX0lTX1RFWFQoYXRrT2JqKSkg
ewotICAgICAgICBHT3duUHRyPGdjaGFyPiB0ZXh0KHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X3RleHQoQVRLX1RFWFQoYXRrT2JqKSwgMCwgLTEpKTsKLSAgICAgICAgcmV0dXJuIGdfdXRmOF9z
dHJsZW4odGV4dC5nZXQoKSwgLTEpOwotICAgIH0KLQotICAgIC8vIEV2ZW4gaWYgd2UgZG9uJ3Qg
ZXhwb3NlIGxpc3QgbWFya2VycyB0byBBc3Npc3RpdmUKLSAgICAvLyBUZWNobm9sb2dpZXMsIHdl
IG5lZWQgdG8gaGF2ZSBhIHdheSB0byBtZWFzdXJlIHRoZWlyIGxlbmd0aAotICAgIC8vIGZvciB0
aG9zZSBjYXNlcyB3aGVuIGl0J3MgbmVlZGVkIHRvIHRha2UgaXQgaW50byBhY2NvdW50Ci0gICAg
Ly8gc2VwYXJhdGVseSAoYXMgaW4gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldCkKLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5kZXJlcigpOwotICAgIGlmIChy
ZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0TWFya2VyKCkpIHsKLSAgICAgICAgUmVuZGVyTGlz
dE1hcmtlciogbWFya2VyID0gdG9SZW5kZXJMaXN0TWFya2VyKHJlbmRlcmVyKTsKLSAgICAgICAg
cmV0dXJuIG1hcmtlci0+dGV4dCgpLmxlbmd0aCgpICsgbWFya2VyLT5zdWZmaXgoKS5sZW5ndGgo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxp
dHlPYmplY3QqIGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqZWN0LCBndWludCBvZmZzZXQsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50
KiBlbmRPZmZzZXQpCi17Ci0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcmVzdWx0Owot
ICAgIGd1aW50IGxlbmd0aCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgob2JqZWN0KTsKLSAg
ICBpZiAobGVuZ3RoID4gb2Zmc2V0KSB7Ci0gICAgICAgICpzdGFydE9mZnNldCA9IDA7Ci0gICAg
ICAgICplbmRPZmZzZXQgPSBsZW5ndGg7Ci0gICAgICAgIHJlc3VsdCA9IG9iamVjdDsKLSAgICB9
IGVsc2UgewotICAgICAgICAqc3RhcnRPZmZzZXQgPSAtMTsKLSAgICAgICAgKmVuZE9mZnNldCA9
IC0xOwotICAgICAgICByZXN1bHQgPSAwOwotICAgIH0KLQotICAgIGlmICghb2JqZWN0LT5maXJz
dENoaWxkKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOwotICAgIGd1aW50IGN1cnJlbnRPZmZz
ZXQgPSAwOwotICAgIGd1aW50IGNoaWxkUG9zaXRpb24gPSAwOwotICAgIHdoaWxlIChjaGlsZCAm
JiBjdXJyZW50T2Zmc2V0IDw9IG9mZnNldCkgewotICAgICAgICBndWludCBjaGlsZExlbmd0aCA9
IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY2hpbGQpOwotICAgICAgICBjdXJyZW50T2Zmc2V0
ID0gY2hpbGRMZW5ndGggKyBjaGlsZFBvc2l0aW9uOwotICAgICAgICBpZiAoY3VycmVudE9mZnNl
dCA+IG9mZnNldCkgewotICAgICAgICAgICAgZ2ludCBjaGlsZFN0YXJ0T2Zmc2V0OwotICAgICAg
ICAgICAgZ2ludCBjaGlsZEVuZE9mZnNldDsKLSAgICAgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxp
dHlPYmplY3QqIGdyYW5kQ2hpbGQgPSBnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KGNo
aWxkLCBvZmZzZXQtY2hpbGRQb3NpdGlvbiwgICZjaGlsZFN0YXJ0T2Zmc2V0LCAmY2hpbGRFbmRP
ZmZzZXQpOwotICAgICAgICAgICAgaWYgKGNoaWxkU3RhcnRPZmZzZXQgPj0gMCkgewotICAgICAg
ICAgICAgICAgICpzdGFydE9mZnNldCA9IGNoaWxkU3RhcnRPZmZzZXQgKyBjaGlsZFBvc2l0aW9u
OwotICAgICAgICAgICAgICAgICplbmRPZmZzZXQgPSBjaGlsZEVuZE9mZnNldCArIGNoaWxkUG9z
aXRpb247Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZ3JhbmRDaGlsZDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNoaWxkUG9zaXRpb24gKz0gY2hpbGRM
ZW5ndGg7Ci0gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBBdGtBdHRyaWJ1dGVT
ZXQqIGdldFJ1bkF0dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5T2JqZWN0KGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3QqIGVsZW1lbnQsIGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2lu
dCogZW5kT2Zmc2V0KQotewotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QgKmNoaWxkID0g
Z2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldChlbGVtZW50LCBvZmZzZXQsIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwotICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0
ID0gLTE7Ci0gICAgICAgICplbmRPZmZzZXQgPSAtMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBkZWZhdWx0QXR0cmlidXRlcyA9IGdldEF0dHJpYnV0
ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoZWxlbWVudCk7Ci0gICAgQXRrQXR0cmlidXRlU2V0
KiBjaGlsZEF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0
KGNoaWxkKTsKLQotICAgIHJldHVybiBhdHRyaWJ1dGVTZXREaWZmZXJlbmNlKGNoaWxkQXR0cmli
dXRlcywgZGVmYXVsdEF0dHJpYnV0ZXMpOwotfQotCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0LCBn
aW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBBdGtBdHRy
aWJ1dGVTZXQqIHJlc3VsdDsKLQotICAgIGlmICghY29yZU9iamVjdCkgewotICAgICAgICAqc3Rh
cnRPZmZzZXQgPSAwOwotICAgICAgICAqZW5kT2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NoYXJhY3Rl
cl9jb3VudCh0ZXh0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKG9mZnNl
dCA9PSAtMSkKLSAgICAgICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0
KTsKLQotICAgIHJlc3VsdCA9IGdldFJ1bkF0dHJpYnV0ZXNGcm9tQWNjZXNpYmlsaXR5T2JqZWN0
KGNvcmVPYmplY3QsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0KLSAgICBpZiAo
KnN0YXJ0T2Zmc2V0IDwgMCkgewotICAgICAgICAqc3RhcnRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
ICAgICplbmRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVm
YXVsdF9hdHRyaWJ1dGVzKEF0a1RleHQqIHRleHQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0gICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3Jl
T2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb3Jl
T2JqZWN0KTsKLX0KLQotc3RhdGljIEludFJlY3QgdGV4dEV4dGVudHMoQXRrVGV4dCogdGV4dCwg
Z2ludCBzdGFydE9mZnNldCwgZ2ludCBsZW5ndGgsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCi17Ci0g
ICAgZ2NoYXIqIHRleHRDb250ZW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCh0
ZXh0LCBzdGFydE9mZnNldCwgLTEpOwotICAgIGdpbnQgdGV4dExlbmd0aCA9IGdfdXRmOF9zdHJs
ZW4odGV4dENvbnRlbnQsIC0xKTsKLQotICAgIC8vIFRoZSBmaXJzdCBjYXNlIChlbmRPZmZzZXQg
b2YgLTEpIHNob3VsZCB3b3JrLCBidXQgc2VlbXMgYnJva2VuIGZvciBhbGwgR3RrKyBhcHBzLgot
ICAgIGdpbnQgcmFuZ2VMZW5ndGggPSBsZW5ndGg7Ci0gICAgaWYgKHJhbmdlTGVuZ3RoIDwgMCB8
fCByYW5nZUxlbmd0aCA+IHRleHRMZW5ndGgpCi0gICAgICAgIHJhbmdlTGVuZ3RoID0gdGV4dExl
bmd0aDsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsK
LQotICAgIEludFJlY3QgZXh0ZW50cyA9IGNvcmVPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShQ
bGFpblRleHRSYW5nZShzdGFydE9mZnNldCwgcmFuZ2VMZW5ndGgpKTsKLSAgICBzd2l0Y2ggKGNv
b3JkcykgewotICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKLSAgICAgICAgaWYgKERvY3VtZW50KiBk
b2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBleHRlbnRzID0g
ZG9jdW1lbnQtPnZpZXcoKS0+Y29udGVudHNUb1NjcmVlbihleHRlbnRzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBVEtfWFlfV0lORE9XOgotICAgICAgICAvLyBOby1vcAotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXh0ZW50czsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoQXRrVGV4dCogdGV4dCwg
Z2ludCBvZmZzZXQsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQs
IEF0a0Nvb3JkVHlwZSBjb29yZHMpCi17Ci0gICAgSW50UmVjdCBleHRlbnRzID0gdGV4dEV4dGVu
dHModGV4dCwgb2Zmc2V0LCAxLCBjb29yZHMpOwotICAgICp4ID0gZXh0ZW50cy54KCk7Ci0gICAg
KnkgPSBleHRlbnRzLnkoKTsKLSAgICAqd2lkdGggPSBleHRlbnRzLndpZHRoKCk7Ci0gICAgKmhl
aWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNl
dCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nvb3JkVHlwZSBjb29yZHMsIEF0a1RleHRSZWN0YW5nbGUq
IHJlY3QpCi17Ci0gICAgSW50UmVjdCBleHRlbnRzID0gdGV4dEV4dGVudHModGV4dCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBjb29yZHMpOwotICAgIHJlY3QtPnggPSBl
eHRlbnRzLngoKTsKLSAgICByZWN0LT55ID0gZXh0ZW50cy55KCk7Ci0gICAgcmVjdC0+d2lkdGgg
PSBleHRlbnRzLndpZHRoKCk7Ci0gICAgcmVjdC0+aGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsK
LX0KLQotc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2Nv
dW50KEF0a1RleHQqIHRleHQpCi17Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3RMZW5n
dGgoY29yZSh0ZXh0KSk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X29mZnNldF9hdF9wb2ludChBdGtUZXh0KiB0ZXh0LCBnaW50IHgsIGdpbnQgeSwgQXRrQ29v
cmRUeXBlIGNvb3JkcykKLXsKLSAgICAvLyBGSVhNRTogVXNlIHRoZSBBdGtDb29yZFR5cGUKLSAg
ICAvLyBUT0RPOiBJcyBpdCBjb3JyZWN0IHRvIGlnbm9yZSByYW5nZS5sZW5ndGg/Ci0gICAgSW50
UG9pbnQgcG9zKHgsIHkpOwotICAgIFBsYWluVGV4dFJhbmdlIHJhbmdlID0gY29yZSh0ZXh0KS0+
ZG9BWFJhbmdlRm9yUG9zaXRpb24ocG9zKTsKLSAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7Ci19Ci0K
LXN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBnaW50JiBzdGFy
dE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0KQotewotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVhcmx5
IHJldHVybiBpZiB0aGUgc2VsZWN0aW9uIGRvZXNuJ3QgYWZmZWN0IHRoZSBzZWxlY3RlZCBub2Rl
LgotICAgIGlmICghc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlv
bikpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgZXhhY3Qg
c3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgaW4gdGhlCi0gICAgLy8gc2VsZWN0ZWQgbm9kZSB0aGF0
IGludGVyc2VjdHMgdGhlIHNlbGVjdGlvbiwgdG8gbGF0ZXIgb24gZ2V0Ci0gICAgLy8gdGhlIHJp
Z2h0IHZhbHVlcyBmb3IgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5kIG9mZnNldHMuCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUG9zaXRpb24gbm9kZVJhbmdlU3RhcnQ7Ci0gICAg
UG9zaXRpb24gbm9kZVJhbmdlRW5kOwotICAgIE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0LT5ub2Rl
KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBu
b2RlIGFuZCBpdHMgZmlyc3QKLSAgICAvLyBwb3NzaWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRo
ZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0Ci0gICAgLy8gbm9kZVJhbmdlU3RhcnQgdG8gdGhhdCBw
b3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncwotICAgIC8vIHN0YXJ0IHBvc2l0
aW9uIChpdCB3b3VsZCBiZWxvbmcgdG8gdGhlIG5vZGUgYW55d2F5KS4KLSAgICBOb2RlKiBmaXJz
dExlYWZOb2RlID0gbm9kZS0+Zmlyc3REZXNjZW5kYW50KCk7Ci0gICAgaWYgKHNlbFJhbmdlLT5p
c1BvaW50SW5SYW5nZShmaXJzdExlYWZOb2RlLCAwLCBlYykpCi0gICAgICAgIG5vZGVSYW5nZVN0
YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGZpcnN0TGVhZk5vZGUpOwotICAgIGVs
c2UKLSAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBzZWxSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwot
Ci0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3RzIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBp
dHMgbGFzdAotICAgIC8vIHBvc3NpYmxlIHBvc2l0aW9uIGlzIGFsc28gaW4gdGhlIHNlbGVjdGlv
biwgd2UgbXVzdCBzZXQKLSAgICAvLyBub2RlUmFuZ2VFbmQgdG8gdGhhdCBwb3NpdGlvbiwgb3Ro
ZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncwotICAgIC8vIGVuZCBwb3NpdGlvbiAoaXQgd291bGQg
YmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCi0gICAgTm9kZSogbGFzdExlYWZOb2RlID0gbm9k
ZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBpZiAoc2VsUmFuZ2UtPmlzUG9pbnRJblJhbmdlKGxh
c3RMZWFmTm9kZSwgbGFzdE9mZnNldEluTm9kZShsYXN0TGVhZk5vZGUpLCBlYykpCi0gICAgICAg
IG5vZGVSYW5nZUVuZCA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobGFzdExlYWZOb2RlKTsK
LSAgICBlbHNlCi0gICAgICAgIG5vZGVSYW5nZUVuZCA9IHNlbFJhbmdlLT5lbmRQb3NpdGlvbigp
OwotCi0gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCByYW5nZSBpbnNp
ZGUgdGhlIG9iamVjdC4KLSAgICBQb3NpdGlvbiBwYXJlbnRGaXJzdFBvc2l0aW9uID0gZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VJblBh
cmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgcGFyZW50Rmlyc3RQb3NpdGlv
biwgbm9kZVJhbmdlU3RhcnQpOwotCi0gICAgLy8gU2V0IHZhbHVlcyBmb3Igc3RhcnQgYW5kIGVu
ZCBvZmZzZXRzLgotICAgIHN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChy
YW5nZUluUGFyZW50LmdldCgpLCB0cnVlKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRo
ZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KLSAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVu
ZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVu
ZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwotICAgICAgICBz
dGFydE9mZnNldCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwotICAgIH0KLQotICAgIFJlZlB0cjxS
YW5nZT4gbm9kZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFu
Z2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKLSAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLmdldCgpLCB0cnVlKTsKLX0KLQotc3Rh
dGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKEF0a1RleHQq
IHRleHQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4
dCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBjb3JlT2JqZWN0LT5zZWxlY3Rp
b24oKTsKLQotICAgIC8vIE9ubHkgcmFuZ2Ugc2VsZWN0aW9ucyBhcmUgbmVlZGVkIGZvciB0aGUg
cHVycG9zZSBvZiB0aGlzIG1ldGhvZAotICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IG11bHRpcGxlIHNlbGVj
dGlvbnMgZm9yIG5vdywgc28gdGhlcmUncyBvbmx5Ci0gICAgLy8gdHdvIHBvc3NpYmlsaXRpZXMK
LSAgICAvLyBBbHNvLCB3ZSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIGlmIHRoZSBzZWxlY3Rp
b24gZG9lcyBub3QKLSAgICAvLyBiZWxvbmcgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvYmpl
Y3QuIFdlIGhhdmUgdG8gY2hlY2sgc2luY2UKLSAgICAvLyB0aGVyZSdzIG5vIHdheSB0byBnZXQg
dGhlIHNlbGVjdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QsIG9ubHkKLSAgICAvLyB0aGUgZ2xvYmFs
IG9uZSAodGhlIEFQSSBpcyBhIGJpdCBjb25mdXNpbmcpCi0gICAgcmV0dXJuIHNlbGVjdGlvbkJl
bG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24pID8gMSA6IDA7Ci19Ci0KLXN0YXRp
YyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfc2VsZWN0aW9uKEF0a1RleHQqIHRl
eHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0
KQotewotICAgIC8vIERlZmF1bHQgdmFsdWVzLCB1bmxlc3MgdGhlIGNvbnRyYXJ5IGlzIHByb3Zl
ZAotICAgICpzdGFydE9mZnNldCA9ICplbmRPZmZzZXQgPSAwOwotCi0gICAgLy8gV2ViQ29yZSBk
b2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9l
cyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAgIGlmIChzZWxlY3Rpb25OdW0pCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgLy8gR2V0IHRoZSBvZmZzZXRzIG9mIHRoZSBzZWxlY3Rpb24gZm9y
IHRoZSBzZWxlY3RlZCBvYmplY3QKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0
ID0gY29yZSh0ZXh0KTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGNvcmVPYmpl
Y3QtPnNlbGVjdGlvbigpOwotICAgIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoY29yZU9i
amVjdCwgc2VsZWN0aW9uLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwotCi0gICAgLy8gUmV0
dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMgdGhhdCdzIHRoZSBleHBlY3RlZCByZXN1bHQgZm9yCi0g
ICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhvZCB3aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uCi0gICAg
aWYgKCpzdGFydE9mZnNldCA9PSAqZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KHRleHQsICpzdGFydE9mZnNl
dCwgKmVuZE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2FkZF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydF9vZmZzZXQsIGdpbnQg
ZW5kX29mZnNldCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGQUxTRTsK
LX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlv
bihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlvbk51bSwgZ2ludCBzdGFydE9mZnNldCwgZ2lu
dCBlbmRPZmZzZXQpCi17Ci0gICAgLy8gV2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxl
IHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93
LgotICAgIGlmIChzZWxlY3Rpb25OdW0pCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIGlmICghY29y
ZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBG
QUxTRTsKLQotICAgIC8vIENvbnNpZGVyIC0xIGFuZCBvdXQtb2YtYm91bmQgdmFsdWVzIGFuZCBj
b3JyZWN0IHRoZW0gdG8gbGVuZ3RoCi0gICAgZ2ludCB0ZXh0Q291bnQgPSB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQodGV4dCk7Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0
IDwgMCB8fCBzdGFydE9mZnNldCA+IHRleHRDb3VudCkKLSAgICAgICAgc3RhcnRPZmZzZXQgPSB0
ZXh0Q291bnQ7Ci0gICAgaWYgKGVuZE9mZnNldCA8IDAgfHwgZW5kT2Zmc2V0ID4gdGV4dENvdW50
KQotICAgICAgICBlbmRPZmZzZXQgPSB0ZXh0Q291bnQ7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFk
anVzdCB0aGUgb2Zmc2V0cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCi0gICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQg
PSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAg
ICAgICAgaW50IG1hcmtlckxlbmd0aCA9IG1hcmtlclRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGlm
IChzdGFydE9mZnNldCA8IG1hcmtlckxlbmd0aCB8fCBlbmRPZmZzZXQgPCBtYXJrZXJMZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgc3RhcnRPZmZzZXQgLT0gbWFy
a2VyTGVuZ3RoOwotICAgICAgICBlbmRPZmZzZXQgLT0gbWFya2VyTGVuZ3RoOwotICAgIH0KLQot
ICAgIFBsYWluVGV4dFJhbmdlIHRleHRSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3Rh
cnRPZmZzZXQpOwotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOwotICAgIGlmIChyYW5nZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgY29yZU9iamVjdC0+c2V0U2Vs
ZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3JlbW92ZV9zZWxlY3Rpb24o
QXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0pCi17Ci0gICAgLy8gV2ViQ29yZSBkb2Vz
IG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcgYnV0IDAgZG9lcyBu
b3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAgIGlmIChzZWxlY3Rpb25OdW0pCi0gICAgICAgIHJl
dHVybiBGQUxTRTsKLQotICAgIC8vIERvIG5vdGhpbmcgaWYgY3VycmVudCBzZWxlY3Rpb24gZG9l
c24ndCBiZWxvbmcgdG8gdGhlIG9iamVjdAotICAgIGlmICghd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKHRleHQpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAv
LyBTZXQgYSBuZXcgMC1zaXplZCBzZWxlY3Rpb24gdG8gdGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBv
cmRlcgotICAgIC8vIHRvIHNpbXVsYXRlIHNlbGVjdGlvbiByZW1vdmFsIChHQUlMIHN0eWxlKQot
ICAgIGdpbnQgY2FyZXRPZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jYXJldF9v
ZmZzZXQodGV4dCk7Ci0gICAgcmV0dXJuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVj
dGlvbih0ZXh0LCBzZWxlY3Rpb25OdW0sIGNhcmV0T2Zmc2V0LCBjYXJldE9mZnNldCk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQo
QXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0KLSAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVu
ZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICBTdHJpbmcgbWFya2Vy
VGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgp
OwotICAgICAgICBpbnQgbWFya2VyTGVuZ3RoID0gbWFya2VyVGV4dC5sZW5ndGgoKTsKLSAgICAg
ICAgaWYgKG9mZnNldCA8IG1hcmtlckxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0IGZvciBsaXN0IGl0ZW1z
LgotICAgICAgICBvZmZzZXQgLT0gbWFya2VyTGVuZ3RoOwotICAgIH0KLQotICAgIFBsYWluVGV4
dFJhbmdlIHRleHRSYW5nZShvZmZzZXQsIDApOwotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJh
bmdlID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2Up
OwotICAgIGlmIChyYW5nZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAg
Y29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7Ci0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0a190ZXh0X2ludGVyZmFjZV9pbml0KEF0
a1RleHRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF90ZXh0ID0gd2Via2l0X2FjY2Vz
c2libGVfdGV4dF9nZXRfdGV4dDsKLSAgICBpZmFjZS0+Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0ID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQ7Ci0gICAgaWZhY2Ut
PmdldF90ZXh0X2F0X29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2F0X29mZnNldCA9IHdlYmtpdF9hY2Nl
c3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9hdF9vZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF90ZXh0
X2JlZm9yZV9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0X2JlZm9yZV9v
ZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF9jYXJldF9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF9jYXJldF9vZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRf
ZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9h
dHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2V4dGVudHMgPSB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50czsKLSAgICBpZmFjZS0+Z2V0X3Jhbmdl
X2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzOwotICAg
IGlmYWNlLT5nZXRfY2hhcmFjdGVyX2NvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
Y2hhcmFjdGVyX2NvdW50OwotICAgIGlmYWNlLT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfb2Zmc2V0X2F0X3BvaW50OwotICAgIGlmYWNlLT5nZXRfbl9z
ZWxlY3Rpb25zID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zOwotICAg
IGlmYWNlLT5nZXRfc2VsZWN0aW9uID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfc2VsZWN0
aW9uOwotCi0gICAgLy8gc2V0IG1ldGhvZHMKLSAgICBpZmFjZS0+YWRkX3NlbGVjdGlvbiA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfYWRkX3NlbGVjdGlvbjsKLSAgICBpZmFjZS0+cmVtb3ZlX3Nl
bGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfcmVtb3ZlX3NlbGVjdGlvbjsKLSAgICBp
ZmFjZS0+c2V0X3NlbGVjdGlvbiA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfc2V0X3NlbGVjdGlv
bjsKLSAgICBpZmFjZS0+c2V0X2NhcmV0X29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
c2V0X2NhcmV0X29mZnNldDsKLX0KLQogLy8gVGFibGUKIAogc3RhdGljIEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwqIGNlbGwoQXRrVGFibGUqIHRhYmxlLCBndWludCByb3csIGd1aW50IGNvbHVtbikK
QEAgLTE3ODksNyArOTYzLDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJs
ZV90YWJsZV9nZXRfY29sdW1uX2Rlc2NyaXB0aW9uKEF0a1RhYmxlKiB0YWIKIHsKICAgICBBdGtP
YmplY3QqIGNvbHVtbkhlYWRlciA9IGF0a190YWJsZV9nZXRfY29sdW1uX2hlYWRlcih0YWJsZSwg
Y29sdW1uKTsKICAgICBpZiAoY29sdW1uSGVhZGVyICYmIEFUS19JU19URVhUKGNvbHVtbkhlYWRl
cikpCi0gICAgICAgIHJldHVybiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19U
RVhUKGNvbHVtbkhlYWRlciksIDAsIC0xKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0VGV4dChBVEtfVEVYVChjb2x1bW5IZWFkZXIpLCAwLCAtMSk7CiAKICAgICByZXR1
cm4gMDsKIH0KQEAgLTE3OTgsNyArOTcyLDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRf
YWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2Rlc2NyaXB0aW9uKEF0a1RhYmxlKiB0YWJsZSwKIHsK
ICAgICBBdGtPYmplY3QqIHJvd0hlYWRlciA9IGF0a190YWJsZV9nZXRfcm93X2hlYWRlcih0YWJs
ZSwgcm93KTsKICAgICBpZiAocm93SGVhZGVyICYmIEFUS19JU19URVhUKHJvd0hlYWRlcikpCi0g
ICAgICAgIHJldHVybiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKHJv
d0hlYWRlciksIDAsIC0xKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
VGV4dChBVEtfVEVYVChyb3dIZWFkZXIpLCAwLCAtMSk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAg
LTE4ODAsOCArMTA1NCw3IEBAIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZh
Y2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJ
bml0RnVuYz4od2Via2l0QWNjZXNzaWJsZUFjdGlvbkludGVyZmFjZUluaXQpLCAwLCAwfSwKICAg
ICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVT
ZWxlY3Rpb25JbnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0lu
dGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0SW50ZXJmYWNlSW5p
dCksIDAsIDB9LAotICAgIHsoR0ludGVyZmFjZUluaXRGdW5jKWF0a190ZXh0X2ludGVyZmFjZV9p
bml0LAotICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVuYykgMCwgMH0sCisgICAge3JlaW50ZXJw
cmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFj
ZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+
KHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAge3Jl
aW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VJ
bnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAgeyhHSW50ZXJmYWNlSW5pdEZ1bmMpYXRrX3RhYmxl
X2ludGVyZmFjZV9pbml0LAotLSAKMS43LjcuNQoK
</data>
<flag name="review"
          id="124820"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123750</attachid>
            <date>2012-01-24 09:28:58 -0800</date>
            <delta_ts>2012-01-24 09:31:38 -0800</delta_ts>
            <desc>13. New files for the implementation of the AtkText interface</desc>
            <filename>0001-2012-01-24-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>81393</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBkNzg5MjljOWVkYmIwZjZiZGU4OWMyZTgyZDJhMDdiMzhhMzkwYWJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBTdW4sIDIyIEphbiAyMDEyIDIyOjMyOjI2ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0wMS0yNCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtHVEtdIFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJl
IG1vcmUgbW9kdWxhcgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03Njc4MwoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
TmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJmYWNl
LAogICAgICAgIGNvbnRhaW5pbmcgdGhlIHJlbGF0ZWQgY29kZSBmcm9tIFdlYktpdEFjY2Vzc2li
bGVXcmFwcGVyQXRrLmNwcC4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6IEFkZGVkLgogICAgICAgIChjb3JlKToKICAgICAgICAo
dGV4dEZvclJlbmRlcmVyKToKICAgICAgICAodGV4dEZvck9iamVjdCk6CiAgICAgICAgKGdldEdh
aWxUZXh0VXRpbEZvckF0ayk6CiAgICAgICAgKGdldFBhbmdvTGF5b3V0Rm9yQXRrKToKICAgICAg
ICAoYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdCk6CiAgICAgICAgKGdldEF0dHJpYnV0
ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgogICAgICAgIChjb21wYXJlQXR0cmlidXRlKToK
ICAgICAgICAoYXR0cmlidXRlU2V0RGlmZmVyZW5jZSk6CiAgICAgICAgKGFjY2Vzc2liaWxpdHlP
YmplY3RMZW5ndGgpOgogICAgICAgIChnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KToK
ICAgICAgICAoZ2V0UnVuQXR0cmlidXRlc0Zyb21BY2Nlc2liaWxpdHlPYmplY3QpOgogICAgICAg
ICh0ZXh0RXh0ZW50cyk6CiAgICAgICAgKGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QpOgog
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQpOgogICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFRleHQpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dFRleHRBZnRlck9mZnNldCk6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0
T2Zmc2V0KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0
KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldCk6CiAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQpOgogICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFJ1bkF0dHJpYnV0ZXMpOgogICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldERlZmF1bHRBdHRyaWJ1dGVzKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRl
eHRHZXRDaGFyYWN0ZXJFeHRlbnRzKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRS
YW5nZUV4dGVudHMpOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckNv
dW50KToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRPZmZzZXRBdFBvaW50KToKICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyk6CiAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKToKICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRl
eHRBZGRTZWxlY3Rpb24pOgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFJlbW92ZVNlbGVj
dGlvbik6CiAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKToKICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRleHRTZXRDYXJldE9mZnNldCk6CiAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oOiBBZGRlZC4KCiAgICAg
ICAgTW92ZSBjb21tb24gZnVuY3Rpb24gc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0IG91dCBmcm9t
IHRoZSB3cmFwcGVyCiAgICAgICAgdG8gdGhlIHV0aWxpdHkgZmlsZSwgdXNlZCBmcm9tIFdlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcC4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHA6CiAgICAgICAgKHNlbGVjdGlvbkJlbG9uZ3NUb09i
amVjdCk6IFRha2VuIGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgogICAgICAg
ICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaDoKICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDogUmVtb3ZlIGxv
Y2FsCiAgICAgICAgaW1wbGVtZW50YXRpb24gb2Ygc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0LCBh
bmQgdGhlIGNvZGUgcmVsYXRlZAogICAgICAgIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
QXRrVGV4dCBpbnRlcmZhY2UuCiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9uYW1lKTog
VXBkYXRlIGNhbGwgdG8gdGhlIGZvcm1lciBmdW5jdGlvbgogICAgICAgIHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3RleHQgYW5kIHVzZSB0aGUgbmV3IGZ1bmN0aW9uIG5hbWUuCiAgICAgICAg
KHdlYmtpdF9hY2Nlc3NpYmxlX3RhYmxlX2dldF9jb2x1bW5fZGVzY3JpcHRpb24pOiBEaXR0by4K
ICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlwdGlvbik6IERp
dHRvLgoKICAgICAgICBBZGQgbmV3IGZpbGVzIHRvIGJ1aWxkIGZpbGVzLgoKICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5baHxj
cHBdLgogICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KLS0tCiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjcgKysKIFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMiArCiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogLi4u
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgICAgICAgICAgfCAgODEyICsr
KysrKysrKysrKysrKysrKysKIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQu
aCAgICAgICAgICAgIHwgICA0NyArKwogLi4uL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCAgICAgfCAgIDI3ICsKIC4uLi9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5oICAgICAgIHwgICAgNCArCiAuLi4vZ3RrL1dlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcCAgICAgICAgICAgICB8ICA4MzcgKy0tLS0tLS0tLS0tLS0tLS0tLS0KIDgg
ZmlsZXMgY2hhbmdlZCwgOTY2IGluc2VydGlvbnMoKyksIDgzMiBkZWxldGlvbnMoLSkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGZiNjliMWYuLjdlZTI2MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTMsNiArMyw3MyBAQAog
ICAgICAgICBbR1RLXSBSZWZhY3RvciBHVEsncyBhY2Nlc3NpYmlsaXRpdHkgY29kZSB0byBiZSBt
b3JlIG1vZHVsYXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NzgzCiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTmV3IGZpbGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQgaW50ZXJm
YWNlLAorICAgICAgICBjb250YWluaW5nIHRoZSByZWxhdGVkIGNvZGUgZnJvbSBXZWJLaXRBY2Nl
c3NpYmxlV3JhcHBlckF0ay5jcHAuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoY29yZSk6Cisg
ICAgICAgICh1dGY4U3Vic3RyKToKKyAgICAgICAgKGNvbnZlcnRVbmlDaGFyVG9VVEY4KToKKyAg
ICAgICAgKHRleHRGb3JSZW5kZXJlcik6CisgICAgICAgICh0ZXh0Rm9yT2JqZWN0KToKKyAgICAg
ICAgKGdldEdhaWxUZXh0VXRpbEZvckF0ayk6CisgICAgICAgIChnZXRQYW5nb0xheW91dEZvckF0
ayk6CisgICAgICAgIChiYXNlbGluZVBvc2l0aW9uRm9yUmVuZGVyT2JqZWN0KToKKyAgICAgICAg
KGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOgorICAgICAgICAoY29tcGFy
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChhdHRyaWJ1dGVTZXREaWZmZXJlbmNlKToKKyAgICAgICAg
KGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgpOgorICAgICAgICAoZ2V0QWNjZXNzaWJpbGl0eU9i
amVjdEZvck9mZnNldCk6CisgICAgICAgIChnZXRSdW5BdHRyaWJ1dGVzRnJvbUFjY2VzaWJpbGl0
eU9iamVjdCk6CisgICAgICAgICh0ZXh0RXh0ZW50cyk6CisgICAgICAgIChnZXRTZWxlY3Rpb25P
ZmZzZXRzRm9yT2JqZWN0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0SW50ZXJmYWNl
SW5pdCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQpOgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0ZXJPZmZzZXQpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVRleHRHZXRUZXh0QXRPZmZzZXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0Q2hhcmFjdGVyQXRPZmZzZXQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRD
YXJldE9mZnNldCk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJ1bkF0dHJpYnV0
ZXMpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXREZWZhdWx0QXR0cmlidXRlcyk6
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckV4dGVudHMpOgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRSYW5nZUV4dGVudHMpOgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJDb3VudCk6CisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQpOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRl
eHRHZXROU2VsZWN0aW9ucyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFNlbGVj
dGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEFkZFNlbGVjdGlvbik6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFJlbW92ZVNlbGVjdGlvbik6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbik6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGV4dFNldENhcmV0T2Zmc2V0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oOiBBZGRlZC4KKworICAgICAgICBNb3ZlIGNvbW1vbiBm
dW5jdGlvbiBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3Qgb3V0IGZyb20gdGhlIHdyYXBwZXIKKyAg
ICAgICAgdG8gdGhlIHV0aWxpdHkgZmlsZSwgdXNlZCBmcm9tIFdlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcDoKKyAgICAgICAgKHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdCk6IFRha2Vu
IGZyb20gV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwLgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOiBSZW1vdmUgbG9jYWwKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gb2Ygc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0LCBhbmQgdGhlIGNv
ZGUgcmVsYXRlZAorICAgICAgICB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1RleHQg
aW50ZXJmYWNlLgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWUpOiBVcGRhdGUg
Y2FsbCB0byB0aGUgZm9ybWVyIGZ1bmN0aW9uCisgICAgICAgIHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X3RleHQgYW5kIHVzZSB0aGUgbmV3IGZ1bmN0aW9uIG5hbWUuCisgICAgICAgICh3ZWJr
aXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfY29sdW1uX2Rlc2NyaXB0aW9uKTogRGl0dG8uCisgICAg
ICAgICh3ZWJraXRfYWNjZXNzaWJsZV90YWJsZV9nZXRfcm93X2Rlc2NyaXB0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBidWlsZCBmaWxlcy4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06IEFkZCBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5baHxj
cHBdLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisKKzIwMTItMDEtMjQgIE1hcmlv
IFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFJl
ZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJlIG1vcmUgbW9kdWxhcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3ODMKKwogICAg
ICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCiAKICAgICAgICAgTmV3IGZpbGVzIGZv
ciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1ZhbHVlIGludGVyZmFjZSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDZlN2ExMzQuLjBjMzA1NjMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ0MzcsNiArNDQzNyw4IEBAIHdlYmNvcmVndGtfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZUltYWdlLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmggXAor
CVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VUZXh0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmggXAogCVNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggZjkzOTc4Ni4uZjkxNTYwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMTM2MSw2ICsxMzYxLDggQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAnLAogICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24u
aCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaCcsCiAgICAgICAgICAg
ICAnYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jNDQ0MWU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCkBAIC0wLDAgKzEsODEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSmFuIEFsb256bworICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHly
aWdodCBhcyBmb2xsb3dzOgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3Jn
IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2Rl
IGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oIgorCisjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIK
KyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgorI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwu
aCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgorI2luY2x1ZGUgImh0
bWxlZGl0aW5nLmgiCisjaW5jbHVkZSA8bGliZ2FpbC11dGlsL2dhaWwtdXRpbC5oPgorI2luY2x1
ZGUgPHBhbmdvL3BhbmdvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMg
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtUZXh0KiB0ZXh0KQoreworICAgIGlmICghV0VC
S0lUX0lTX0FDQ0VTU0lCTEUodGV4dCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxF
KHRleHQpKTsKK30KKworZ2NoYXIqIHRleHRGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQoreworICAgIEdTdHJpbmcqIHJlc3VsdFRleHQgPSBnX3N0cmluZ19uZXcoMCk7CisKKyAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXN1bHRUZXh0
LCBGQUxTRSk7CisKKyAgICAvLyBGb3IgUmVuZGVyQmxvY2tzLCBwaWVjZSB0b2dldGhlciB0aGUg
dGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0IG9iamVjdHMgdGhleSBjb250YWluLgorICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBvYmplY3Q7IG9i
amVjdCA9IG9iamVjdC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAob2JqZWN0LT5pc0JS
KCkpIHsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCAiXG4iKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyVGV4dCogcmVu
ZGVyVGV4dDsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNUZXh0KCkpCisgICAgICAgICAgICByZW5k
ZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG9iamVjdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKG9iamVjdC0+aXNSZXBsYWNlZCgpKQorICAgICAgICAgICAgICAgIGdfc3RyaW5nX2Fw
cGVuZF91bmljaGFyKHJlc3VsdFRleHQsIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKwor
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBjaGlsZHJlbiwgaWYgYW55LCB0byBjb25z
aWRlciB3aGVuCisgICAgICAgICAgICAvLyBjdXJyZW50IG9iamVjdCBpcyBub3QgYSB0ZXh0IG9i
amVjdCBidXQgc29tZSBvZiBpdHMKKyAgICAgICAgICAgIC8vIGNoaWxkcmVuIGFyZSwgaW4gb3Jk
ZXIgbm90IHRvIG1pc3MgdGhvc2UgcG9ydGlvbnMgb2YKKyAgICAgICAgICAgIC8vIHRleHQgYnkg
bm90IHByb3Blcmx5IGhhbmRsaW5nIHRob3NlIHNpdHVhdGlvbnMKKyAgICAgICAgICAgIGlmIChv
YmplY3QtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQocmVz
dWx0VGV4dCwgdGV4dEZvclJlbmRlcmVyKG9iamVjdCkpOworCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIElubGluZVRleHRCb3gqIGJveCA9IHJlbmRlclRleHQg
PyByZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKSA6IDA7CisgICAgICAgIHdoaWxlIChib3gpIHsK
KyAgICAgICAgICAgIC8vIFdlYkNvcmUgaW50cm9kdWNlcyBsaW5lIGJyZWFrcyBpbiB0aGUgdGV4
dCB0aGF0IGRvIG5vdCByZWZsZWN0CisgICAgICAgICAgICAvLyB0aGUgbGF5b3V0IHlvdSBzZWUg
b24gdGhlIHNjcmVlbiwgcmVwbGFjZSB0aGVtIHdpdGggc3BhY2VzLgorICAgICAgICAgICAgU3Ry
aW5nIHRleHQgPSBTdHJpbmcocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50
ZXh0TGVuZ3RoKCkpLnJlcGxhY2UoIlxuIiwgIiAiKTsKKyAgICAgICAgICAgIGdfc3RyaW5nX2Fw
cGVuZChyZXN1bHRUZXh0LCB0ZXh0LnN1YnN0cmluZyhib3gtPnN0YXJ0KCksIGJveC0+ZW5kKCkg
LSBib3gtPnN0YXJ0KCkgKyAxKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAgICAgLy8gTmV3
bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBz
byBjaGVjaworICAgICAgICAgICAgLy8gYmVmb3JlIGFkZGluZyBhIG5ld2xpbmUgaW4gdGhlIGxh
eW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50ICM3OC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBu
ZXh0IHNpYmxpbmcgaXMgYSBCUiwgd2UnbGwgYWRkIHRoZSBuZXdsaW5lIHdoZW4gd2UgZXhhbWlu
ZSB0aGF0IGNoaWxkLgorICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAm
JiAoIW9iamVjdC0+bmV4dFNpYmxpbmcoKSB8fCAhb2JqZWN0LT5uZXh0U2libGluZygpLT5pc0JS
KCkpKQorICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCAiXG4iKTsK
KyAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEluc2VydCB0aGUgdGV4dCBvZiB0aGUgbWFya2VyIGZvciBsaXN0IGl0ZW0gaW4g
dGhlIHJpZ2h0IHBsYWNlLCBpZiBwcmVzZW50CisgICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RJdGVt
KCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRl
cmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgICAgICBnX3N0cmluZ19wcmVwZW5kKHJl
c3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRh
KCkpOworICAgIH0KKworICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNF
KTsKK30KKworZ2NoYXIqIHRleHRGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCkKK3sKKyAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7CisKKyAgICAvLyBG
b3IgdGV4dCBjb250cm9scywgd2UgY2FuIGdldCB0aGUgdGV4dCBsaW5lIGJ5IGxpbmUuCisgICAg
aWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgeworICAgICAgICB1bnNpZ25lZCB0ZXh0
TGVuZ3RoID0gY29yZU9iamVjdC0+dGV4dExlbmd0aCgpOworICAgICAgICBpbnQgbGluZU51bWJl
ciA9IDA7CisgICAgICAgIFBsYWluVGV4dFJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+ZG9BWFJh
bmdlRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgd2hpbGUgKHJhbmdlLmxlbmd0aCkgewor
ICAgICAgICAgICAgLy8gV2hlbiBhIGxpbmUgb2YgdGV4dCB3cmFwcyBpbiBhIHRleHQgYXJlYSwg
dGhlIGZpbmFsIHNwYWNlIGlzIHJlbW92ZWQuCisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQg
KyByYW5nZS5sZW5ndGggPCB0ZXh0TGVuZ3RoKQorICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0
aCAtPSAxOworICAgICAgICAgICAgU3RyaW5nIGxpbmVUZXh0ID0gY29yZU9iamVjdC0+ZG9BWFN0
cmluZ0ZvclJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIGxp
bmVUZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwg
IlxuIik7CisgICAgICAgICAgICByYW5nZSA9IGNvcmVPYmplY3QtPmRvQVhSYW5nZUZvckxpbmUo
KytsaW5lTnVtYmVyKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoY29yZU9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gcmVu
ZGVyZXJUZXh0KHRleHRGb3JSZW5kZXJlcihjb3JlT2JqZWN0LT5yZW5kZXJlcigpKSk7CisgICAg
ICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIHJlbmRlcmVyVGV4dC5nZXQoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Cit9CisKK3N0YXRpYyBHYWlsVGV4
dFV0aWwqIGdldEdhaWxUZXh0VXRpbEZvckF0ayhBdGtUZXh0KiB0ZXh0T2JqZWN0KQoreworICAg
IEdhaWxUZXh0VXRpbCogZ2FpbFRleHRVdGlsID0gZ2FpbF90ZXh0X3V0aWxfbmV3KCk7CisgICAg
Z2FpbF90ZXh0X3V0aWxfdGV4dF9zZXR1cChnYWlsVGV4dFV0aWwsIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0VGV4dCh0ZXh0T2JqZWN0LCAwLCAtMSkpOworICAgIHJldHVybiBnYWlsVGV4dFV0aWw7
Cit9CisKK3N0YXRpYyBQYW5nb0xheW91dCogZ2V0UGFuZ29MYXlvdXRGb3JBdGsoQXRrVGV4dCog
dGV4dE9iamVjdCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29y
ZSh0ZXh0T2JqZWN0KTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBI
b3N0V2luZG93KiBob3N0V2luZG93ID0gZG9jdW1lbnQtPnZpZXcoKS0+aG9zdFdpbmRvdygpOwor
ICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUGxhdGZvcm1QYWdl
Q2xpZW50IHdlYlZpZXcgPSBob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBp
ZiAoIXdlYlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQ3JlYXRlIGEgc3RyaW5n
IHdpdGggdGhlIGxheW91dCBhcyBpdCBhcHBlYXJzIG9uIHRoZSBzY3JlZW4KKyAgICBQYW5nb0xh
eW91dCogbGF5b3V0ID0gZ3RrX3dpZGdldF9jcmVhdGVfcGFuZ29fbGF5b3V0KHN0YXRpY19jYXN0
PEd0a1dpZGdldCo+KHdlYlZpZXcpLCB0ZXh0Rm9yT2JqZWN0KGNvcmVPYmplY3QpKTsKKyAgICBy
ZXR1cm4gbGF5b3V0OworfQorCitzdGF0aWMgaW50IGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJP
YmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCit7CisgICAgLy8gRklYTUU6IFRoaXMg
aW1wbGVtZW50YXRpb24gb2YgYmFzZWxpbmVQb3NpdGlvbiBvcmlnaW5hdGVzIGZyb20gUmVuZGVy
T2JqZWN0LmNwcCBhbmQgd2FzCisgICAgLy8gcmVtb3ZlZCBpbiByNzAwNzIuIFRoZSBpbXBsZW1l
bnRhdGlvbiBsb29rcyBpbmNvcnJlY3QgdGhvdWdoLCBiZWNhdXNlIHRoaXMgaXMgbm90IHRoZQor
ICAgIC8vIGJhc2VsaW5lIG9mIHRoZSB1bmRlcmx5aW5nIFJlbmRlck9iamVjdCwgYnV0IG9mIHRo
ZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LgorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcyA9IHJlbmRlck9iamVjdC0+Zmlyc3RMaW5lU3R5bGUoKS0+Zm9udE1ldHJpY3MoKTsK
KyAgICByZXR1cm4gZm9udE1ldHJpY3MuYXNjZW50KCkgKyAocmVuZGVyT2JqZWN0LT5maXJzdExp
bmVTdHlsZSgpLT5jb21wdXRlZExpbmVIZWlnaHQoKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpKSAv
IDI7Cit9CisKK3N0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vz
c2liaWxpdHlPYmplY3QoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQoreworICAg
IGlmICghb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5kZXJlcigp
OworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworCisgICAgQXRr
QXR0cmlidXRlU2V0KiByZXN1bHQgPSAwOworICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcihnX3N0
cmR1cF9wcmludGYoIiVpIiwgc3R5bGUtPmZvbnRTaXplKCkpKTsKKyAgICByZXN1bHQgPSBhZGRU
b0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtf
VEVYVF9BVFRSX1NJWkUpLCBidWZmZXIuZ2V0KCkpOworCisgICAgQ29sb3IgYmdDb2xvciA9IHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwor
ICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVw
X3ByaW50ZigiJWksJWksJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
Z0NvbG9yLnJlZCgpLCBiZ0NvbG9yLmdyZWVuKCksIGJnQ29sb3IuYmx1ZSgpKSk7CisgICAgICAg
IHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRl
X2dldF9uYW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOworICAgIH0K
KworICAgIENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpOworICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBidWZm
ZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmZ0NvbG9yLnJlZCgpLCBmZ0NvbG9yLmdyZWVuKCksIGZnQ29sb3IuYmx1
ZSgpKSk7CisgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRr
X3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIu
Z2V0KCkpOworICAgIH0KKworICAgIGludCBiYXNlbGluZVBvc2l0aW9uOworICAgIGJvb2wgaW5j
bHVkZVJpc2UgPSB0cnVlOworICAgIHN3aXRjaCAoc3R5bGUtPnZlcnRpY2FsQWxpZ24oKSkgewor
ICAgIGNhc2UgU1VCOgorICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gLTEgKiBiYXNlbGluZVBv
c2l0aW9uRm9yUmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTVVBFUjoKKyAgICAgICAgYmFzZWxpbmVQb3NpdGlvbiA9IGJhc2VsaW5lUG9zaXRpb25Gb3JS
ZW5kZXJPYmplY3QocmVuZGVyZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJBU0VMSU5F
OgorICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgaW5jbHVkZVJpc2UgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaWYgKGluY2x1ZGVSaXNlKSB7CisgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBf
cHJpbnRmKCIlaSIsIGJhc2VsaW5lUG9zaXRpb24pKTsKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9B
dGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9SSVNFKSwgYnVmZmVyLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAoIXN0eWxlLT50
ZXh0SW5kZW50KCkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBpbnQgaW5kZW50YXRpb24gPSBz
dHlsZS0+dGV4dEluZGVudCgpLmNhbGNWYWx1ZShvYmplY3QtPnNpemUoKS53aWR0aCgpKTsKKyAg
ICAgICAgYnVmZmVyLnNldChnX3N0cmR1cF9wcmludGYoIiVpIiwgaW5kZW50YXRpb24pKTsKKyAg
ICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9JTkRFTlQpLCBidWZmZXIuZ2V0KCkpOworICAg
IH0KKworICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxlLT5mb250KCkuZmFtaWx5KCku
ZmFtaWx5KCkuc3RyaW5nKCk7CisgICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQoOCkgPT0gIi13
ZWJraXQtIikKKyAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFtZS5zdWJzdHJp
bmcoOCk7CisKKyAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190
ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1FKSwgZm9udEZh
bWlseU5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpbnQgZm9udFdlaWdodCA9IC0xOworICAg
IHN3aXRjaCAoc3R5bGUtPmZvbnQoKS53ZWlnaHQoKSkgeworICAgIGNhc2UgRm9udFdlaWdodDEw
MDoKKyAgICAgICAgZm9udFdlaWdodCA9IDEwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b250V2VpZ2h0MjAwOgorICAgICAgICBmb250V2VpZ2h0ID0gMjAwOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvbnRXZWlnaHQzMDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSAzMDA7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRm9udFdlaWdodDQwMDoKKyAgICAgICAgZm9udFdlaWdodCA9
IDQwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICBm
b250V2VpZ2h0ID0gNTAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6
CisgICAgICAgIGZvbnRXZWlnaHQgPSA2MDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9u
dFdlaWdodDcwMDoKKyAgICAgICAgZm9udFdlaWdodCA9IDcwMDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGb250V2VpZ2h0ODAwOgorICAgICAgICBmb250V2VpZ2h0ID0gODAwOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6CisgICAgICAgIGZvbnRXZWlnaHQgPSA5
MDA7CisgICAgfQorICAgIGlmIChmb250V2VpZ2h0ID4gMCkgeworICAgICAgICBidWZmZXIuc2V0
KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBmb250V2VpZ2h0KSk7CisgICAgICAgIHJlc3VsdCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFU
S19URVhUX0FUVFJfV0VJR0hUKSwgYnVmZmVyLmdldCgpKTsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KHN0eWxlLT50ZXh0QWxpZ24oKSkgeworICAgIGNhc2UgVEFBVVRPOgorICAgIGNhc2UgVEFTVEFS
VDoKKyAgICBjYXNlIFRBRU5EOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIExFRlQ6CisgICAg
Y2FzZSBXRUJLSVRfTEVGVDoKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
cmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJ
Q0FUSU9OKSwgImxlZnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSSUdIVDoKKyAgICBj
YXNlIFdFQktJVF9SSUdIVDoKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
cmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJ
Q0FUSU9OKSwgInJpZ2h0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0VOVEVSOgorICAg
IGNhc2UgV0VCS0lUX0NFTlRFUjoKKyAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVT
ZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNU
SUZJQ0FUSU9OKSwgImNlbnRlciIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpVU1RJRlk6
CisgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSlVTVElGSUNBVElPTiksICJmaWxsIik7
CisgICAgfQorCisgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtf
dGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9VTkRFUkxJTkUpLCAoc3R5bGUt
PnRleHREZWNvcmF0aW9uKCkgJiBVTkRFUkxJTkUpID8gInNpbmdsZSIgOiAibm9uZSIpOworCisg
ICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1
dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkg
PyAiaXRhbGljIiA6ICJub3JtYWwiKTsKKworICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRl
U2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RS
SUtFVEhST1VHSCksIChzdHlsZS0+dGV4dERlY29yYXRpb24oKSAmIExJTkVfVEhST1VHSCkgPyAi
dHJ1ZSIgOiAiZmFsc2UiKTsKKworICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJl
c3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSU5WSVNJQkxF
KSwgKHN0eWxlLT52aXNpYmlsaXR5KCkgPT0gSElEREVOKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwor
CisgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9FRElUQUJMRSksIG9iamVjdC0+aXNSZWFkT25s
eSgpID8gImZhbHNlIiA6ICJ0cnVlIik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgZ2ludCBjb21wYXJlQXR0cmlidXRlKGNvbnN0IEF0a0F0dHJpYnV0ZSogYSwgY29uc3QgQXRr
QXR0cmlidXRlKiBiKQoreworICAgIHJldHVybiBnX3N0cmNtcDAoYS0+bmFtZSwgYi0+bmFtZSkg
fHwgZ19zdHJjbXAwKGEtPnZhbHVlLCBiLT52YWx1ZSk7Cit9CisKKy8vIFJldHVybnMgYW4gQXRr
QXR0cmlidXRlU2V0IHdpdGggdGhlIGVsZW1lbnRzIG9mIGF0dHJpYnV0ZVNldDEgd2hpY2gKKy8v
IGFyZSBlaXRoZXIgbm90IHByZXNlbnQgb3IgZGlmZmVyZW50IGluIGF0dHJpYnV0ZVNldDIuIE5l
aXRoZXIKKy8vIGF0dHJpYnV0ZVNldDEgbm9yIGF0dHJpYnV0ZVNldDIgc2hvdWxkIGJlIHVzZWQg
YWZ0ZXIgY2FsbGluZyB0aGlzLgorc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0
RGlmZmVyZW5jZShBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldDEsIEF0a0F0dHJpYnV0ZVNl
dCogYXR0cmlidXRlU2V0MikKK3sKKyAgICBpZiAoIWF0dHJpYnV0ZVNldDIpCisgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGVTZXQxOworCisgICAgQXRrQXR0cmlidXRlU2V0KiBjdXJyZW50U2V0ID0g
YXR0cmlidXRlU2V0MTsKKyAgICBBdGtBdHRyaWJ1dGVTZXQqIGZvdW5kOworICAgIEF0a0F0dHJp
YnV0ZVNldCogdG9EZWxldGUgPSAwOworCisgICAgd2hpbGUgKGN1cnJlbnRTZXQpIHsKKyAgICAg
ICAgZm91bmQgPSBnX3NsaXN0X2ZpbmRfY3VzdG9tKGF0dHJpYnV0ZVNldDIsIGN1cnJlbnRTZXQt
PmRhdGEsIChHQ29tcGFyZUZ1bmMpY29tcGFyZUF0dHJpYnV0ZSk7CisgICAgICAgIGlmIChmb3Vu
ZCkgeworICAgICAgICAgICAgQXRrQXR0cmlidXRlU2V0KiBuZXh0U2V0ID0gY3VycmVudFNldC0+
bmV4dDsKKyAgICAgICAgICAgIHRvRGVsZXRlID0gZ19zbGlzdF9wcmVwZW5kKHRvRGVsZXRlLCBj
dXJyZW50U2V0LT5kYXRhKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZVNldDEgPSBnX3NsaXN0X2Rl
bGV0ZV9saW5rKGF0dHJpYnV0ZVNldDEsIGN1cnJlbnRTZXQpOworICAgICAgICAgICAgY3VycmVu
dFNldCA9IG5leHRTZXQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY3VycmVudFNldCA9
IGN1cnJlbnRTZXQtPm5leHQ7CisgICAgfQorCisgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShh
dHRyaWJ1dGVTZXQyKTsKKyAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHRvRGVsZXRlKTsKKyAg
ICByZXR1cm4gYXR0cmlidXRlU2V0MTsKK30KKworc3RhdGljIGd1aW50IGFjY2Vzc2liaWxpdHlP
YmplY3RMZW5ndGgoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQoreworICAgIC8v
IE5vbiByZW5kZXIgb2JqZWN0cyBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudAorICAgIGlmICgh
b2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBGb3IgdGhvc2Ugb2JqZWN0cyBpbXBsZW1lbnRpbmcgdGhlIEF0a1RleHQgaW50
ZXJmYWNlIHdlIHVzZSB0aGUKKyAgICAvLyB3ZWxsIGtub3duIEFQSSB0byBhbHdheXMgZ2V0IHRo
ZSB0ZXh0IGluIGEgY29uc2lzdGVudCB3YXkKKyAgICBBdGtPYmplY3QqIGF0a09iaiA9IEFUS19P
QkpFQ1Qob2JqZWN0LT53cmFwcGVyKCkpOworICAgIGlmIChBVEtfSVNfVEVYVChhdGtPYmopKSB7
CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRleHQod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0
KEFUS19URVhUKGF0a09iaiksIDAsIC0xKSk7CisgICAgICAgIHJldHVybiBnX3V0Zjhfc3RybGVu
KHRleHQuZ2V0KCksIC0xKTsKKyAgICB9CisKKyAgICAvLyBFdmVuIGlmIHdlIGRvbid0IGV4cG9z
ZSBsaXN0IG1hcmtlcnMgdG8gQXNzaXN0aXZlCisgICAgLy8gVGVjaG5vbG9naWVzLCB3ZSBuZWVk
IHRvIGhhdmUgYSB3YXkgdG8gbWVhc3VyZSB0aGVpciBsZW5ndGgKKyAgICAvLyBmb3IgdGhvc2Ug
Y2FzZXMgd2hlbiBpdCdzIG5lZWRlZCB0byB0YWtlIGl0IGludG8gYWNjb3VudAorICAgIC8vIHNl
cGFyYXRlbHkgKGFzIGluIGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQpCisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKSB7CisgICAgICAgIFJlbmRlckxpc3RNYXJr
ZXIqIG1hcmtlciA9IHRvUmVuZGVyTGlzdE1hcmtlcihyZW5kZXJlcik7CisgICAgICAgIHJldHVy
biBtYXJrZXItPnRleHQoKS5sZW5ndGgoKSArIG1hcmtlci0+c3VmZml4KCkubGVuZ3RoKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yT2Zmc2V0KGNvbnN0IEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCwgZ3VpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5k
T2Zmc2V0KQoreworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHJlc3VsdDsKKyAgICBn
dWludCBsZW5ndGggPSBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKG9iamVjdCk7CisgICAgaWYg
KGxlbmd0aCA+IG9mZnNldCkgeworICAgICAgICAqc3RhcnRPZmZzZXQgPSAwOworICAgICAgICAq
ZW5kT2Zmc2V0ID0gbGVuZ3RoOworICAgICAgICByZXN1bHQgPSBvYmplY3Q7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gLTE7CisgICAgICAgICplbmRPZmZzZXQgPSAtMTsK
KyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIW9iamVjdC0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hpbGQoKTsKKyAgICBndWludCBjdXJyZW50T2Zmc2V0ID0g
MDsKKyAgICBndWludCBjaGlsZFBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAoY2hpbGQgJiYgY3Vy
cmVudE9mZnNldCA8PSBvZmZzZXQpIHsKKyAgICAgICAgZ3VpbnQgY2hpbGRMZW5ndGggPSBhY2Nl
c3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNoaWxkKTsKKyAgICAgICAgY3VycmVudE9mZnNldCA9IGNo
aWxkTGVuZ3RoICsgY2hpbGRQb3NpdGlvbjsKKyAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPiBv
ZmZzZXQpIHsKKyAgICAgICAgICAgIGdpbnQgY2hpbGRTdGFydE9mZnNldDsKKyAgICAgICAgICAg
IGdpbnQgY2hpbGRFbmRPZmZzZXQ7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBncmFuZENoaWxkID0gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldChjaGlsZCwg
b2Zmc2V0LWNoaWxkUG9zaXRpb24sICAmY2hpbGRTdGFydE9mZnNldCwgJmNoaWxkRW5kT2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmIChjaGlsZFN0YXJ0T2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAg
ICAgICAqc3RhcnRPZmZzZXQgPSBjaGlsZFN0YXJ0T2Zmc2V0ICsgY2hpbGRQb3NpdGlvbjsKKyAg
ICAgICAgICAgICAgICAqZW5kT2Zmc2V0ID0gY2hpbGRFbmRPZmZzZXQgKyBjaGlsZFBvc2l0aW9u
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdyYW5kQ2hpbGQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGlsZFBvc2l0aW9uICs9IGNoaWxkTGVuZ3Ro
OworICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBn
ZXRSdW5BdHRyaWJ1dGVzRnJvbUFjY2VzaWJpbGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBlbGVtZW50LCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVu
ZE9mZnNldCkKK3sKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCA9IGdldEFj
Y2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQoZWxlbWVudCwgb2Zmc2V0LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKKyAgICBpZiAoIWNoaWxkKSB7CisgICAgICAgICpzdGFydE9mZnNldCA9IC0x
OworICAgICAgICAqZW5kT2Zmc2V0ID0gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEF0a0F0dHJpYnV0ZVNldCogZGVmYXVsdEF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVTZXRG
b3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGVsZW1lbnQpOworICAgIEF0a0F0dHJpYnV0ZVNldCogY2hp
bGRBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjaGls
ZCk7CisKKyAgICByZXR1cm4gYXR0cmlidXRlU2V0RGlmZmVyZW5jZShjaGlsZEF0dHJpYnV0ZXMs
IGRlZmF1bHRBdHRyaWJ1dGVzKTsKK30KKworc3RhdGljIEludFJlY3QgdGV4dEV4dGVudHMoQXRr
VGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBsZW5ndGgsIEF0a0Nvb3JkVHlwZSBj
b29yZHMpCit7CisgICAgZ2NoYXIqIHRleHRDb250ZW50ID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRUZXh0KHRleHQsIHN0YXJ0T2Zmc2V0LCAtMSk7CisgICAgZ2ludCB0ZXh0TGVuZ3RoID0gZ191
dGY4X3N0cmxlbih0ZXh0Q29udGVudCwgLTEpOworCisgICAgLy8gVGhlIGZpcnN0IGNhc2UgKGVu
ZE9mZnNldCBvZiAtMSkgc2hvdWxkIHdvcmssIGJ1dCBzZWVtcyBicm9rZW4gZm9yIGFsbCBHdGsr
IGFwcHMuCisgICAgZ2ludCByYW5nZUxlbmd0aCA9IGxlbmd0aDsKKyAgICBpZiAocmFuZ2VMZW5n
dGggPCAwIHx8IHJhbmdlTGVuZ3RoID4gdGV4dExlbmd0aCkKKyAgICAgICAgcmFuZ2VMZW5ndGgg
PSB0ZXh0TGVuZ3RoOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3Jl
KHRleHQpOworCisgICAgSW50UmVjdCBleHRlbnRzID0gY29yZU9iamVjdC0+ZG9BWEJvdW5kc0Zv
clJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCkpOworICAgIHN3
aXRjaCAoY29vcmRzKSB7CisgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgorICAgICAgICBpZiAoRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGV4
dGVudHMgPSBkb2N1bWVudC0+dmlldygpLT5jb250ZW50c1RvU2NyZWVuKGV4dGVudHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFUS19YWV9XSU5ET1c6CisgICAgICAgIC8vIE5vLW9wCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBleHRlbnRzOworfQorCitzdGF0aWMg
dm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgZ2ludCYgc3RhcnRPZmZzZXQs
IGdpbnQmIGVuZE9mZnNldCkKK3sKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFYXJseSByZXR1cm4g
aWYgdGhlIHNlbGVjdGlvbiBkb2Vzbid0IGFmZmVjdCB0aGUgc2VsZWN0ZWQgbm9kZS4KKyAgICBp
ZiAoIXNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24pKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBuZWVkIHRvIGZpbmQgdGhlIGV4YWN0IHN0YXJ0IGFu
ZCBlbmQgcG9zaXRpb25zIGluIHRoZQorICAgIC8vIHNlbGVjdGVkIG5vZGUgdGhhdCBpbnRlcnNl
Y3RzIHRoZSBzZWxlY3Rpb24sIHRvIGxhdGVyIG9uIGdldAorICAgIC8vIHRoZSByaWdodCB2YWx1
ZXMgZm9yIHRoZSBlZmZlY3RpdmUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgorICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIFBvc2l0aW9uIG5vZGVSYW5nZVN0YXJ0OworICAgIFBvc2l0aW9u
IG5vZGVSYW5nZUVuZDsKKyAgICBOb2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOworICAg
IFJlZlB0cjxSYW5nZT4gc2VsUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KworICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQg
aXRzIGZpcnN0CisgICAgLy8gcG9zc2libGUgcG9zaXRpb24gaXMgYWxzbyBpbiB0aGUgc2VsZWN0
aW9uLCB3ZSBtdXN0IHNldAorICAgIC8vIG5vZGVSYW5nZVN0YXJ0IHRvIHRoYXQgcG9zaXRpb24s
IG90aGVyd2lzZSB0byB0aGUgc2VsZWN0aW9uJ3MKKyAgICAvLyBzdGFydCBwb3NpdGlvbiAoaXQg
d291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCisgICAgTm9kZSogZmlyc3RMZWFmTm9k
ZSA9IG5vZGUtPmZpcnN0RGVzY2VuZGFudCgpOworICAgIGlmIChzZWxSYW5nZS0+aXNQb2ludElu
UmFuZ2UoZmlyc3RMZWFmTm9kZSwgMCwgZWMpKQorICAgICAgICBub2RlUmFuZ2VTdGFydCA9IGZp
cnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShmaXJzdExlYWZOb2RlKTsKKyAgICBlbHNlCisgICAg
ICAgIG5vZGVSYW5nZVN0YXJ0ID0gc2VsUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKworICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGxhc3QK
KyAgICAvLyBwb3NzaWJsZSBwb3NpdGlvbiBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11
c3Qgc2V0CisgICAgLy8gbm9kZVJhbmdlRW5kIHRvIHRoYXQgcG9zaXRpb24sIG90aGVyd2lzZSB0
byB0aGUgc2VsZWN0aW9uJ3MKKyAgICAvLyBlbmQgcG9zaXRpb24gKGl0IHdvdWxkIGJlbG9uZyB0
byB0aGUgbm9kZSBhbnl3YXkpLgorICAgIE5vZGUqIGxhc3RMZWFmTm9kZSA9IG5vZGUtPmxhc3RE
ZXNjZW5kYW50KCk7CisgICAgaWYgKHNlbFJhbmdlLT5pc1BvaW50SW5SYW5nZShsYXN0TGVhZk5v
ZGUsIGxhc3RPZmZzZXRJbk5vZGUobGFzdExlYWZOb2RlKSwgZWMpKQorICAgICAgICBub2RlUmFu
Z2VFbmQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGxhc3RMZWFmTm9kZSk7CisgICAgZWxz
ZQorICAgICAgICBub2RlUmFuZ2VFbmQgPSBzZWxSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKworICAg
IC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBv
YmplY3QuCisgICAgUG9zaXRpb24gcGFyZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQgPSBS
YW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVS
YW5nZVN0YXJ0KTsKKworICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0
cy4KKyAgICBzdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBh
cmVudC5nZXQoKSwgdHJ1ZSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0
cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5p
c0xpc3RJdGVtKCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJ
dGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKyAgICAgICAgc3RhcnRPZmZz
ZXQgKz0gbWFya2VyVGV4dC5sZW5ndGgoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IG5v
ZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQs
IG5vZGVSYW5nZUVuZCk7CisgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5nZXQoKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgd2Via2l0
QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmdldF90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0OworICAgIGlmYWNl
LT5nZXRfdGV4dF9hZnRlcl9vZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRl
ck9mZnNldDsKKyAgICBpZmFjZS0+Z2V0X3RleHRfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRUZXh0QXRPZmZzZXQ7CisgICAgaWZhY2UtPmdldF90ZXh0X2JlZm9yZV9vZmZzZXQg
PSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQ7CisgICAgaWZhY2UtPmdl
dF9jaGFyYWN0ZXJfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJB
dE9mZnNldDsKKyAgICBpZmFjZS0+Z2V0X2NhcmV0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0Q2FyZXRPZmZzZXQ7CisgICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0UnVuQXR0cmlidXRlczsKKyAgICBpZmFjZS0+Z2V0X2RlZmF1bHRf
YXR0cmlidXRlcyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXM7Cisg
ICAgaWZhY2UtPmdldF9jaGFyYWN0ZXJfZXh0ZW50cyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2hhcmFjdGVyRXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9j
b3VudCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQ7CisgICAgaWZhY2Ut
PmdldF9vZmZzZXRfYXRfcG9pbnQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9p
bnQ7CisgICAgaWZhY2UtPmdldF9uX3NlbGVjdGlvbnMgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dE5TZWxlY3Rpb25zOworICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRTZWxlY3Rpb247CisgICAgaWZhY2UtPmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEFkZFNlbGVjdGlvbjsKKyAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdl
YmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uOworICAgIGlmYWNlLT5zZXRfc2VsZWN0
aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb247CisgICAgaWZhY2UtPnNldF9j
YXJldF9vZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0OworfQorCitn
Y2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3Rh
cnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQoreworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QgPSBjb3JlKHRleHQpOworCisgICAgaW50IGVuZCA9IGVuZE9mZnNldDsKKyAgICBp
ZiAoZW5kT2Zmc2V0ID09IC0xKSB7CisgICAgICAgIGVuZCA9IGNvcmVPYmplY3QtPnN0cmluZ1Zh
bHVlKCkubGVuZ3RoKCk7CisgICAgICAgIGlmICghZW5kKQorICAgICAgICAgICAgZW5kID0gY29y
ZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpLmxlbmd0aCgpOworICAgIH0KKworICAgIFN0cmlu
ZyByZXQ7CisgICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0
ID0gY29yZU9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKDAsIGVuZE9m
ZnNldCkpOworICAgIGVsc2UgeworICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT5zdHJpbmdWYWx1
ZSgpOworICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnRl
eHRVbmRlckVsZW1lbnQoKTsKKyAgICB9CisKKyAgICBpZiAoIXJldC5sZW5ndGgoKSkgeworICAg
ICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gYXQgbGVhc3Qgd2l0aCBhbm9ueW1vdXMgUmVuZGVyQmxv
Y2tzIChlLmcuIGJvZHkgdGV4dCBhbW9uZ3N0IHBhcmFncmFwaHMpCisgICAgICAgIHJldCA9IFN0
cmluZyh0ZXh0Rm9yT2JqZWN0KGNvcmVPYmplY3QpKTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAg
ICAgICAgICBlbmQgPSByZXQubGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gUHJlZml4IGEgaXRl
bSBudW1iZXIvYnVsbGV0IGlmIG5lZWRlZAorICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUo
KSA9PSBMaXN0SXRlbVJvbGUpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmpSZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChvYmpSZW5kZXJlciAmJiBvYmpS
ZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9
IHRvUmVuZGVyTGlzdEl0ZW0ob2JqUmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwor
ICAgICAgICAgICAgcmV0ID0gb2JqUmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IG1hcmtlclRleHQgKyByZXQgOiByZXQgKyBtYXJrZXJUZXh0OworICAgICAgICAgICAgaWYg
KGVuZE9mZnNldCA9PSAtMSkKKyAgICAgICAgICAgICAgICBlbmQgKz0gbWFya2VyVGV4dC5sZW5n
dGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IHJldC5zdWJzdHJpbmcoc3RhcnRP
ZmZzZXQsIGVuZCAtIHN0YXJ0T2Zmc2V0KTsKKyAgICByZXR1cm4gZ19zdHJkdXAocmV0LnV0Zjgo
KS5kYXRhKCkpOworfQorCitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0ZXJP
ZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFy
eVR5cGUsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCit7CisgICAgcmV0dXJu
IGdhaWxfdGV4dF91dGlsX2dldF90ZXh0KGdldEdhaWxUZXh0VXRpbEZvckF0ayh0ZXh0KSwgZ2V0
UGFuZ29MYXlvdXRGb3JBdGsodGV4dCksIEdBSUxfQUZURVJfT0ZGU0VULCBib3VuZGFyeVR5cGUs
IG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK2djaGFyKiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHRBdE9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRr
VGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9m
ZnNldCkKK3sKKyAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRV
dGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BVF9PRkZT
RVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKwor
Z2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEJlZm9yZU9mZnNldChBdGtUZXh0KiB0
ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3Rh
cnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3sKKyAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxf
Z2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0
ayh0ZXh0KSwgR0FJTF9CRUZPUkVfT0ZGU0VULCBib3VuZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7Cit9CisKK2d1bmljaGFyIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2hhcmFjdGVyQXRPZmZzZXQoQXRrVGV4dCosIGdpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0
T2Zmc2V0KEF0a1RleHQqIHRleHQpCit7CisgICAgLy8gY29yZU9iamVjdCBpcyB0aGUgdW5pZ25v
cmVkIG9iamVjdCB3aG9zZSBvZmZzZXQgdGhlIGNhbGxlciBpcyByZXF1ZXN0aW5nLgorICAgIC8v
IGZvY3VzZWRPYmplY3QgaXMgdGhlIG9iamVjdCB3aXRoIHRoZSBjYXJldC4gSXQgaXMgbGlrZWx5
IGlnbm9yZWQgLS0gdW5sZXNzIGl0J3MgYSBsaW5rLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2UgbmVl
ZCB0byBtYWtlIHN1cmUgd2UgcGFzcyBhIHZhbGlkIG9iamVjdCBhcyByZWZlcmVuY2UuCisgICAg
aWYgKGNvcmVPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgY29yZU9i
amVjdCA9IGNvcmVPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIGlmICghY29y
ZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgb2Zmc2V0OworICAgIGlmICgh
b2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9mZnNldCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVP
YmplY3QtPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJ
dGVtKCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJl
bmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKKworICAgICAgICAvLyBXZSBuZWVkIHRv
IGFkanVzdCB0aGUgb2Zmc2V0IGZvciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICAgICAgb2Zm
c2V0ICs9IG1hcmtlclRleHQubGVuZ3RoKCk7CisgICAgfQorCisgICAgLy8gVE9ETzogVmVyaWZ5
IHRoaXMgZm9yIFJUTCB0ZXh0LgorICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK0F0a0F0dHJpYnV0
ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVzKEF0a1RleHQqIHRleHQs
IGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQoreworICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOworICAgIEF0a0F0
dHJpYnV0ZVNldCogcmVzdWx0OworCisgICAgaWYgKCFjb3JlT2JqZWN0KSB7CisgICAgICAgICpz
dGFydE9mZnNldCA9IDA7CisgICAgICAgICplbmRPZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2hhcmFj
dGVyX2NvdW50KHRleHQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAob2Zm
c2V0ID09IC0xKQorICAgICAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRl
eHQpOworCisgICAgcmVzdWx0ID0gZ2V0UnVuQXR0cmlidXRlc0Zyb21BY2Nlc2liaWxpdHlPYmpl
Y3QoY29yZU9iamVjdCwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGlm
ICgqc3RhcnRPZmZzZXQgPCAwKSB7CisgICAgICAgICpzdGFydE9mZnNldCA9IG9mZnNldDsKKyAg
ICAgICAgKmVuZE9mZnNldCA9IG9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJp
YnV0ZXMoQXRrVGV4dCogdGV4dCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2Jq
ZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlz
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOwor
fQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyRXh0ZW50cyhBdGtUZXh0
KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQq
IGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKK3sKKyAgICBJbnRSZWN0IGV4dGVudHMgPSB0
ZXh0RXh0ZW50cyh0ZXh0LCBvZmZzZXQsIDEsIGNvb3Jkcyk7CisgICAgKnggPSBleHRlbnRzLngo
KTsKKyAgICAqeSA9IGV4dGVudHMueSgpOworICAgICp3aWR0aCA9IGV4dGVudHMud2lkdGgoKTsK
KyAgICAqaGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsKK30KKwordm9pZCB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBn
aW50IGVuZE9mZnNldCwgQXRrQ29vcmRUeXBlIGNvb3JkcywgQXRrVGV4dFJlY3RhbmdsZSogcmVj
dCkKK3sKKyAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIGNvb3Jkcyk7CisgICAgcmVjdC0+eCA9IGV4dGVu
dHMueCgpOworICAgIHJlY3QtPnkgPSBleHRlbnRzLnkoKTsKKyAgICByZWN0LT53aWR0aCA9IGV4
dGVudHMud2lkdGgoKTsKKyAgICByZWN0LT5oZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOworfQor
CitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQoQXRrVGV4dCogdGV4
dCkKK3sKKyAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlKHRleHQpKTsK
K30KKworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQoQXRrVGV4dCog
dGV4dCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZHMpCit7CisgICAgLy8gRklY
TUU6IFVzZSB0aGUgQXRrQ29vcmRUeXBlCisgICAgLy8gVE9ETzogSXMgaXQgY29ycmVjdCB0byBp
Z25vcmUgcmFuZ2UubGVuZ3RoPworICAgIEludFBvaW50IHBvcyh4LCB5KTsKKyAgICBQbGFpblRl
eHRSYW5nZSByYW5nZSA9IGNvcmUodGV4dCktPmRvQVhSYW5nZUZvclBvc2l0aW9uKHBvcyk7Cisg
ICAgcmV0dXJuIHJhbmdlLnN0YXJ0OworfQorCitnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
TlNlbGVjdGlvbnMoQXRrVGV4dCogdGV4dCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworCisgICAgLy8gT25seSByYW5nZSBzZWxlY3Rpb25z
IGFyZSBuZWVkZWQgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kCisgICAgaWYgKCFzZWxl
Y3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucyBmb3Igbm93LCBzbyB0aGVyZSdzIG9ubHkKKyAgICAv
LyB0d28gcG9zc2liaWxpdGllcworICAgIC8vIEFsc28sIHdlIGRvbid0IHdhbnQgdG8gZG8gYW55
dGhpbmcgaWYgdGhlIHNlbGVjdGlvbiBkb2VzIG5vdAorICAgIC8vIGJlbG9uZyB0byB0aGUgY3Vy
cmVudGx5IHNlbGVjdGVkIG9iamVjdC4gV2UgaGF2ZSB0byBjaGVjayBzaW5jZQorICAgIC8vIHRo
ZXJlJ3Mgbm8gd2F5IHRvIGdldCB0aGUgc2VsZWN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCwgb25s
eQorICAgIC8vIHRoZSBnbG9iYWwgb25lICh0aGUgQVBJIGlzIGEgYml0IGNvbmZ1c2luZykKKyAg
ICByZXR1cm4gc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbikg
PyAxIDogMDsKK30KKworZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKEF0
a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCog
ZW5kT2Zmc2V0KQoreworICAgIC8vIERlZmF1bHQgdmFsdWVzLCB1bmxlc3MgdGhlIGNvbnRyYXJ5
IGlzIHByb3ZlZAorICAgICpzdGFydE9mZnNldCA9ICplbmRPZmZzZXQgPSAwOworCisgICAgLy8g
V2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcg
YnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgorICAgIGlmIChzZWxlY3Rpb25OdW0p
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR2V0IHRoZSBvZmZzZXRzIG9mIHRoZSBzZWxl
Y3Rpb24gZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOworICAgIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmpl
Y3QoY29yZU9iamVjdCwgc2VsZWN0aW9uLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOworCisg
ICAgLy8gUmV0dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMgdGhhdCdzIHRoZSBleHBlY3RlZCByZXN1
bHQgZm9yCisgICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhvZCB3aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0
aW9uCisgICAgaWYgKCpzdGFydE9mZnNldCA9PSAqZW5kT2Zmc2V0KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0
T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRB
ZGRTZWxlY3Rpb24oQXRrVGV4dCosIGdpbnQsIGdpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0
UmVtb3ZlU2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtKQoreworICAg
IC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRo
aW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2VsZWN0aW9u
TnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJl
bnQgc2VsZWN0aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBvYmplY3QKKyAgICBpZiAoIXdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0TlNlbGVjdGlvbnModGV4dCkpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIC8vIFNldCBhIG5ldyAwLXNpemVkIHNlbGVjdGlvbiB0byB0aGUgY2FyZXQgcG9z
aXRpb24sIGluIG9yZGVyCisgICAgLy8gdG8gc2ltdWxhdGUgc2VsZWN0aW9uIHJlbW92YWwgKEdB
SUwgc3R5bGUpCisgICAgZ2ludCBjYXJldE9mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2FyZXRPZmZzZXQodGV4dCk7CisgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2Vs
ZWN0aW9uKHRleHQsIHNlbGVjdGlvbk51bSwgY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0KTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4
dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQor
eworICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNv
IGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KKyAgICBpZiAoc2Vs
ZWN0aW9uTnVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAv
LyBDb25zaWRlciAtMSBhbmQgb3V0LW9mLWJvdW5kIHZhbHVlcyBhbmQgY29ycmVjdCB0aGVtIHRv
IGxlbmd0aAorICAgIGdpbnQgdGV4dENvdW50ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFy
YWN0ZXJDb3VudCh0ZXh0KTsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPCAwIHx8IHN0YXJ0T2Zmc2V0
ID4gdGV4dENvdW50KQorICAgICAgICBzdGFydE9mZnNldCA9IHRleHRDb3VudDsKKyAgICBpZiAo
ZW5kT2Zmc2V0IDwgMCB8fCBlbmRPZmZzZXQgPiB0ZXh0Q291bnQpCisgICAgICAgIGVuZE9mZnNl
dCA9IHRleHRDb3VudDsKKworICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZv
ciB0aGUgbGlzdCBpdGVtIG1hcmtlci4KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29y
ZU9iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlz
dEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0o
cmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBpbnQgbWFya2VyTGVu
Z3RoID0gbWFya2VyVGV4dC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDwgbWFy
a2VyTGVuZ3RoIHx8IGVuZE9mZnNldCA8IG1hcmtlckxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
biBGQUxTRTsKKworICAgICAgICBzdGFydE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgICAg
IGVuZE9mZnNldCAtPSBtYXJrZXJMZW5ndGg7CisgICAgfQorCisgICAgUGxhaW5UZXh0UmFuZ2Ug
dGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisgICAgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5n
ZUZvclJhbmdlKHRleHRSYW5nZSk7CisgICAgaWYgKHJhbmdlLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3NpdGlv
blJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworZ2Jvb2xlYW4gd2Via2l0QWNj
ZXNzaWJsZVRleHRTZXRDYXJldE9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCkKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKworICAg
IGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBGQUxTRTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlT2JqZWN0
LT5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgp
KSB7CisgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJl
ciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7CisgICAgICAgIGludCBtYXJrZXJMZW5ndGggPSBt
YXJrZXJUZXh0Lmxlbmd0aCgpOworICAgICAgICBpZiAob2Zmc2V0IDwgbWFya2VyTGVuZ3RoKQor
ICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0
IHRoZSBvZmZzZXQgZm9yIGxpc3QgaXRlbXMuCisgICAgICAgIG9mZnNldCAtPSBtYXJrZXJMZW5n
dGg7CisgICAgfQorCisgICAgUGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlKG9mZnNldCwgMCk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRp
b25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7CisgICAgaWYgKHJhbmdlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQ
b3NpdGlvblJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjk2
N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
QWxvbnpvCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dF9oCisjZGVmaW5lIFdlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0X2gKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKwordm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQoQXRrVGV4dElmYWNlKik7CitnY2hh
ciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zmc2V0
LCBnaW50IGVuZE9mZnNldCk7CitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0
ZXJPZmZzZXQoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnksIGdpbnQqIHN0
YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpOworZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dEF0T2Zmc2V0KEF0a1RleHQqLCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5LCBn
aW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KTsKK2djaGFyKiB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBBdGtUZXh0
Qm91bmRhcnksIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpOworZ3VuaWNoYXIg
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNldChBdGtUZXh0KiwgZ2ludCBv
ZmZzZXQpOworZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KEF0a1RleHQq
KTsKK0F0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSdW5BdHRyaWJ1dGVz
KEF0a1RleHQqLCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNl
dCk7CitBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJp
YnV0ZXMoQXRrVGV4dCopOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckV4
dGVudHMoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0
aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUpOwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZz
ZXQsIEF0a0Nvb3JkVHlwZSwgQXRrVGV4dFJlY3RhbmdsZSopOworZ2ludCB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldENoYXJhY3RlckNvdW50KEF0a1RleHQqKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRPZmZzZXRBdFBvaW50KEF0a1RleHQqLCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRU
eXBlKTsKK2dpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyhBdGtUZXh0Kik7
CitnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24oQXRrVGV4dCosIGdpbnQg
c2VsZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KTsKK2dib29s
ZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0QWRkU2VsZWN0aW9uKEF0a1RleHQqLCBnaW50IHN0YXJ0
T2Zmc2V0LCBnaW50IGVuZE9mZnNldCk7CitnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNl
dFNlbGVjdGlvbihBdGtUZXh0KiwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQs
IGdpbnQgZW5kT2Zmc2V0KTsKK2dib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2Vs
ZWN0aW9uKEF0a1RleHQqLCBnaW50IHNlbGVjdGlvbk51bSk7CitnYm9vbGVhbiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KEF0a1RleHQqLCBnaW50IG9mZnNldCk7CisKKyNlbmRp
ZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5k
ZXggYzI5NDIyNC4uNDNmNDEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMzQsNiArMzQsOSBA
QAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlJh
bmdlLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtODEs
MyArODQsMjcgQEAgY29uc3QgY2hhciogcmV0dXJuU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQog
ICAgIHJldHVybmVkU3RyaW5nID0gc3RyLnV0ZjgoKTsKICAgICByZXR1cm4gcmV0dXJuZWRTdHJp
bmcuZGF0YSgpOwogfQorCitib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit7Cisg
ICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNlbGVjdGlvbi5pc05v
bmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIHdhbnQgdG8gY2hlY2sgdGhhdCBib3RoIHRoZSBz
ZWxlY3Rpb24gaW50ZXJzZWN0cyB0aGUgbm9kZQorICAgIC8vIEFORCB0aGF0IHRoZSBzZWxlY3Rp
b24gaXMgbm90IGp1c3QgInRvdWNoaW5nIiBvbmUgb2YgdGhlCisgICAgLy8gYm91bmRhcmllcyBm
b3IgdGhlIHNlbGVjdGVkIG5vZGUuIFdlIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUKKyAgICAv
LyBub2RlIGlzIGFjdHVhbGx5IGluc2lkZSB0aGUgcmVnaW9uLCBhdCBsZWFzdCBwYXJ0aWFsbHku
CisgICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3QtPm5vZGUoKTsKKyAgICBOb2RlKiBsYXN0RGVz
Y2VuZGFudCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgcmV0dXJuIChyYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSwgZWMpCisgICAgICAg
ICAgICAmJiAocmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IG5vZGUgfHwgcmFuZ2UtPmVuZE9mZnNl
dCgpKQorICAgICAgICAgICAgJiYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IGxhc3REZXNj
ZW5kYW50IHx8IHJhbmdlLT5zdGFydE9mZnNldCgpICE9IGxhc3RPZmZzZXRJbk5vZGUobGFzdERl
c2NlbmRhbnQpKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuaAppbmRleCBiM2NlNDU3Li4zMmY5NDVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmgKQEAgLTI4LDYgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEFjY2Vzc2liaWxpdHlPYmplY3Q7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKIH0KIAogQXRrQXR0cmlidXRlU2V0KiBhZGRUb0F0a0F0dHJpYnV0ZVNldChBdGtBdHRy
aWJ1dGVTZXQqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CkBAIC0zNiw0
ICszNyw3IEBAIHZvaWQgY29udGVudHNSZWxhdGl2ZVRvQXRrQ29vcmRpbmF0ZVR5cGUoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCosIEF0a0Nvb3JkCiAKIGNvbnN0IGNoYXIqIHJldHVyblN0
cmluZyhjb25zdCBTdHJpbmcmKTsKIAorLy8gQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBzZWxlY3Rp
b24gYmVsb25ncyBvciBub3QgdG8gYW4gQWNjZXNzaWJpbGl0eU9iamVjdCdzIHNjb3BlLgorYm9v
bCBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCos
IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKKwogI2VuZGlmIC8vIFdlYktpdEFjY2Vzc2li
bGVVdGlsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAppbmRleCBmYTRmZWRjLi5jZjI2
MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAj
aW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5oIgogI2luY2x1ZGUg
IldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5oIgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5o
IgogI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKQEAgLTExNiwxOCArMTE3LDExIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlKEF0a09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBjb3JlKFdFQktJVF9BQ0NFU1NJQkxF
KG9iamVjdCkpOwogfQogCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtUZXh0
KiB0ZXh0KQotewotICAgIHJldHVybiBjb3JlKEFUS19PQkpFQ1QodGV4dCkpOwotfQotCiBzdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtUYWJsZSogdGFibGUpCiB7CiAgICAgcmV0
dXJuIGNvcmUoQVRLX09CSkVDVCh0YWJsZSkpOwogfQogCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCosIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQg
ZW5kT2Zmc2V0KTsKLQogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRf
bmFtZShBdGtPYmplY3QqIG9iamVjdCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
T2JqZWN0ID0gY29yZShvYmplY3QpOwpAQCAtMTM5LDcgKzEzMyw3IEBAIHN0YXRpYyBjb25zdCBn
Y2hhciogd2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWUoQXRrT2JqZWN0KiBvYmplY3QpCiAgICAg
ICAgIGlmIChsYWJlbCkgewogICAgICAgICAgICAgQXRrT2JqZWN0KiBhdGtPYmplY3QgPSBsYWJl
bC0+d3JhcHBlcigpOwogICAgICAgICAgICAgaWYgKEFUS19JU19URVhUKGF0a09iamVjdCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQVRL
X1RFWFQoYXRrT2JqZWN0KSwgMCwgLTEpOworICAgICAgICAgICAgICAgIHJldHVybiB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFRleHQoQVRLX1RFWFQoYXRrT2JqZWN0KSwgMCwgLTEpOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gVHJ5IHRleHQgdW5kZXIgdGhlIG5vZGUuCkBAIC01ODMsMzAgKzU3
Nyw2IEBAIHN0YXRpYyBBdGtSb2xlIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9yb2xlKEF0a09iamVj
dCogb2JqZWN0KQogICAgIHJldHVybiBhdGtSb2xlKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpKTsK
IH0KIAotc3RhdGljIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKLXsKLSAgICBp
ZiAoIWNvcmVPYmplY3QgfHwgIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugd2FudCB0byBjaGVjayB0aGF0IGJvdGggdGhlIHNlbGVj
dGlvbiBpbnRlcnNlY3RzIHRoZSBub2RlCi0gICAgLy8gQU5EIHRoYXQgdGhlIHNlbGVjdGlvbiBp
cyBub3QganVzdCAidG91Y2hpbmciIG9uZSBvZiB0aGUKLSAgICAvLyBib3VuZGFyaWVzIGZvciB0
aGUgc2VsZWN0ZWQgbm9kZS4gV2Ugd2FudCB0byBjaGVjayB3aGV0aGVyIHRoZQotICAgIC8vIG5v
ZGUgaXMgYWN0dWFsbHkgaW5zaWRlIHRoZSByZWdpb24sIGF0IGxlYXN0IHBhcnRpYWxseS4KLSAg
ICBOb2RlKiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOwotICAgIE5vZGUqIGxhc3REZXNjZW5k
YW50ID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICByZXR1cm4gKHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlLCBlYykKLSAgICAgICAgICAg
ICYmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gbm9kZSB8fCByYW5nZS0+ZW5kT2Zmc2V0KCkp
Ci0gICAgICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFzdERlc2NlbmRh
bnQgfHwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldEluTm9kZShsYXN0RGVzY2Vu
ZGFudCkpKTsKLX0KLQogc3RhdGljIGJvb2wgaXNUZXh0V2l0aENhcmV0KEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QpCiB7CiAgICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0
LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKQEAgLTgyMyw4MDIgKzc5Myw2IEBAIHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKHZvaWQpCiAgICAgcmV0dXJuIHR5cGVfdm9sYXRpbGU7
CiB9CiAKLS8vIFRleHQKLQotc3RhdGljIGdjaGFyKiB1dGY4U3Vic3RyKGNvbnN0IGdjaGFyKiBz
dHJpbmcsIGdpbnQgc3RhcnQsIGdpbnQgZW5kKQotewotICAgIEFTU0VSVChzdHJpbmcpOwotICAg
IGdsb25nIHN0ckxlbiA9IGdfdXRmOF9zdHJsZW4oc3RyaW5nLCAtMSk7Ci0gICAgaWYgKHN0YXJ0
ID4gc3RyTGVuIHx8IGVuZCA+IHN0ckxlbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZ2NoYXIq
IHN0YXJ0UHRyID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgc3RhcnQpOwotICAg
IGdzaXplIGxlbkluQnl0ZXMgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIoc3RyaW5nLCBlbmQg
KyAxKSAtICBzdGFydFB0cjsKLSAgICBnY2hhciogb3V0cHV0ID0gc3RhdGljX2Nhc3Q8Z2NoYXIq
PihnX21hbGxvYzAobGVuSW5CeXRlcyArIDEpKTsKLSAgICByZXR1cm4gZ191dGY4X3N0cm5jcHko
b3V0cHV0LCBzdGFydFB0ciwgZW5kIC0gc3RhcnQgKyAxKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlv
biBpcyBub3QgY29tcGxldGVseSBnZW5lcmFsLCBpcyBpdCdzIHRpZWQgdG8gdGhlCi0vLyBpbnRl
cm5hbHMgb2YgV2ViQ29yZSdzIHRleHQgcHJlc2VudGF0aW9uLgotc3RhdGljIGdjaGFyKiBjb252
ZXJ0VW5pQ2hhclRvVVRGOChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgZ2ludCBsZW5ndGgsIGlu
dCBmcm9tLCBpbnQgdG8pCi17Ci0gICAgQ1N0cmluZyBzdHJpbmdVVEY4ID0gVVRGOEVuY29kaW5n
KCkuZW5jb2RlKGNoYXJhY3RlcnMsIGxlbmd0aCwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxl
cyk7Ci0gICAgZ2NoYXIqIHV0ZjhTdHJpbmcgPSB1dGY4U3Vic3RyKHN0cmluZ1VURjguZGF0YSgp
LCBmcm9tLCB0byk7Ci0gICAgaWYgKCFnX3V0ZjhfdmFsaWRhdGUodXRmOFN0cmluZywgLTEsIDAp
KSB7Ci0gICAgICAgIGdfZnJlZSh1dGY4U3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGdzaXplIGxlbiA9IHN0cmxlbih1dGY4U3RyaW5nKTsKLSAgICBHU3RyaW5nKiByZXQg
PSBnX3N0cmluZ19uZXdfbGVuKDAsIGxlbik7Ci0gICAgZ2NoYXIqIHB0ciA9IHV0ZjhTdHJpbmc7
Ci0KLSAgICAvLyBXZWJDb3JlIGludHJvZHVjZXMgbGluZSBicmVha3MgaW4gdGhlIHRleHQgdGhh
dCBkbyBub3QgcmVmbGVjdAotICAgIC8vIHRoZSBsYXlvdXQgeW91IHNlZSBvbiB0aGUgc2NyZWVu
LCByZXBsYWNlIHRoZW0gd2l0aCBzcGFjZXMKLSAgICB3aGlsZSAobGVuID4gMCkgewotICAgICAg
ICBnaW50IGluZGV4LCBzdGFydDsKLSAgICAgICAgcGFuZ29fZmluZF9wYXJhZ3JhcGhfYm91bmRh
cnkocHRyLCBsZW4sICZpbmRleCwgJnN0YXJ0KTsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2xl
bihyZXQsIHB0ciwgaW5kZXgpOwotICAgICAgICBpZiAoaW5kZXggPT0gc3RhcnQpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MocmV0LCAnICcpOwotICAgICAg
ICBwdHIgKz0gc3RhcnQ7Ci0gICAgICAgIGxlbiAtPSBzdGFydDsKLSAgICB9Ci0KLSAgICBnX2Zy
ZWUodXRmOFN0cmluZyk7Ci0gICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmV0LCBGQUxTRSk7Ci19
Ci0KLWdjaGFyKiB0ZXh0Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAg
ICBHU3RyaW5nKiByZXN1bHRUZXh0ID0gZ19zdHJpbmdfbmV3KDApOwotCi0gICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0UpOwot
Ci0gICAgLy8gRm9yIFJlbmRlckJsb2NrcywgcGllY2UgdG9nZXRoZXIgdGhlIHRleHQgZnJvbSB0
aGUgUmVuZGVyVGV4dCBvYmplY3RzIHRoZXkgY29udGFpbi4KLSAgICBmb3IgKFJlbmRlck9iamVj
dCogb2JqZWN0ID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsgb2JqZWN0OyBvYmplY3QgPSBvYmpl
Y3QtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNCUigpKSB7Ci0gICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgIlxuIik7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclRleHQqIHJlbmRlclRleHQ7Ci0g
ICAgICAgIGlmIChvYmplY3QtPmlzVGV4dCgpKQotICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHRv
UmVuZGVyVGV4dChvYmplY3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvYmpl
Y3QtPmlzUmVwbGFjZWQoKSkKLSAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfdW5pY2hh
cihyZXN1bHRUZXh0LCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0KLSAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgY2hpbGRyZW4sIGlmIGFueSwgdG8gY29uc2lkZXIgd2hlbgot
ICAgICAgICAgICAgLy8gY3VycmVudCBvYmplY3QgaXMgbm90IGEgdGV4dCBvYmplY3QgYnV0IHNv
bWUgb2YgaXRzCi0gICAgICAgICAgICAvLyBjaGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBt
aXNzIHRob3NlIHBvcnRpb25zIG9mCi0gICAgICAgICAgICAvLyB0ZXh0IGJ5IG5vdCBwcm9wZXJs
eSBoYW5kbGluZyB0aG9zZSBzaXR1YXRpb25zCi0gICAgICAgICAgICBpZiAob2JqZWN0LT5maXJz
dENoaWxkKCkpCi0gICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIHRl
eHRGb3JSZW5kZXJlcihvYmplY3QpKTsKLQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSByZW5kZXJUZXh0ID8gcmVuZGVyVGV4
dC0+Zmlyc3RUZXh0Qm94KCkgOiAwOwotICAgICAgICB3aGlsZSAoYm94KSB7Ci0gICAgICAgICAg
ICBnY2hhciogdGV4dCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJlbmRlclRleHQtPmNoYXJhY3Rl
cnMoKSwgcmVuZGVyVGV4dC0+dGV4dExlbmd0aCgpLCBib3gtPnN0YXJ0KCksIGJveC0+ZW5kKCkp
OwotICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsIHRleHQpOwotICAgICAg
ICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0
ZXh0IGJveGVzLCBzbyBjaGVjawotICAgICAgICAgICAgLy8gYmVmb3JlIGFkZGluZyBhIG5ld2xp
bmUgaW4gdGhlIGxheW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50ICM3OC4KLSAgICAgICAgICAg
IC8vIElmIHRoZSBuZXh0IHNpYmxpbmcgaXMgYSBCUiwgd2UnbGwgYWRkIHRoZSBuZXdsaW5lIHdo
ZW4gd2UgZXhhbWluZSB0aGF0IGNoaWxkLgotICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxp
bmVFeGlzdHMoKSAmJiAoIW9iamVjdC0+bmV4dFNpYmxpbmcoKSB8fCAhb2JqZWN0LT5uZXh0U2li
bGluZygpLT5pc0JSKCkpKQotICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRU
ZXh0LCAiXG4iKTsKLSAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIEluc2VydCB0aGUgdGV4dCBvZiB0aGUgbWFya2VyIGZvciBs
aXN0IGl0ZW0gaW4gdGhlIHJpZ2h0IHBsYWNlLCBpZiBwcmVzZW50Ci0gICAgaWYgKHJlbmRlcmVy
LT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxp
c3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgaWYgKHJl
bmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBnX3N0cmlu
Z19wcmVwZW5kKHJlc3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCBtYXJrZXJUZXh0
LnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLQotICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJlc3Vs
dFRleHQsIEZBTFNFKTsKLX0KLQotZ2NoYXIqIHRleHRGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9i
amVjdCogY29yZU9iamVjdCkKLXsKLSAgICBHU3RyaW5nKiBzdHIgPSBnX3N0cmluZ19uZXcoMCk7
Ci0KLSAgICAvLyBGb3IgdGV4dCBjb250cm9scywgd2UgY2FuIGdldCB0aGUgdGV4dCBsaW5lIGJ5
IGxpbmUuCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewotICAgICAgICB1
bnNpZ25lZCB0ZXh0TGVuZ3RoID0gY29yZU9iamVjdC0+dGV4dExlbmd0aCgpOwotICAgICAgICBp
bnQgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIFBsYWluVGV4dFJhbmdlIHJhbmdlID0gY29yZU9i
amVjdC0+ZG9BWFJhbmdlRm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgd2hpbGUgKHJhbmdl
Lmxlbmd0aCkgewotICAgICAgICAgICAgLy8gV2hlbiBhIGxpbmUgb2YgdGV4dCB3cmFwcyBpbiBh
IHRleHQgYXJlYSwgdGhlIGZpbmFsIHNwYWNlIGlzIHJlbW92ZWQuCi0gICAgICAgICAgICBpZiAo
cmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPCB0ZXh0TGVuZ3RoKQotICAgICAgICAgICAgICAg
IHJhbmdlLmxlbmd0aCAtPSAxOwotICAgICAgICAgICAgU3RyaW5nIGxpbmVUZXh0ID0gY29yZU9i
amVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKLSAgICAgICAgICAgIGdfc3RyaW5nX2Fw
cGVuZChzdHIsIGxpbmVUZXh0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgZ19zdHJpbmdf
YXBwZW5kKHN0ciwgIlxuIik7Ci0gICAgICAgICAgICByYW5nZSA9IGNvcmVPYmplY3QtPmRvQVhS
YW5nZUZvckxpbmUoKytsaW5lTnVtYmVyKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY29y
ZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgR093blB0
cjxnY2hhcj4gcmVuZGVyZXJUZXh0KHRleHRGb3JSZW5kZXJlcihjb3JlT2JqZWN0LT5yZW5kZXJl
cigpKSk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIHJlbmRlcmVyVGV4dC5nZXQoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Ci19Ci0KLXN0
YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dChBdGtUZXh0KiB0ZXh0
LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLQotICAgIGludCBlbmQgPSBlbmRPZmZz
ZXQ7Ci0gICAgaWYgKGVuZE9mZnNldCA9PSAtMSkgewotICAgICAgICBlbmQgPSBjb3JlT2JqZWN0
LT5zdHJpbmdWYWx1ZSgpLmxlbmd0aCgpOwotICAgICAgICBpZiAoIWVuZCkKLSAgICAgICAgICAg
IGVuZCA9IGNvcmVPYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKS5sZW5ndGgoKTsKLSAgICB9Ci0K
LSAgICBTdHJpbmcgcmV0OwotICAgIGlmIChjb3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkpCi0g
ICAgICAgIHJldCA9IGNvcmVPYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZShQbGFpblRleHRSYW5n
ZSgwLCBlbmRPZmZzZXQpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+
c3RyaW5nVmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXQpCi0gICAgICAgICAgICByZXQgPSBjb3Jl
T2JqZWN0LT50ZXh0VW5kZXJFbGVtZW50KCk7Ci0gICAgfQotCi0gICAgaWYgKCFyZXQubGVuZ3Ro
KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGF0IGxlYXN0IHdpdGggYW5vbnltb3Vz
IFJlbmRlckJsb2NrcyAoZS5nLiBib2R5IHRleHQgYW1vbmdzdCBwYXJhZ3JhcGhzKQotICAgICAg
ICByZXQgPSBTdHJpbmcodGV4dEZvck9iamVjdChjb3JlT2JqZWN0KSk7Ci0gICAgICAgIGlmICgh
ZW5kKQotICAgICAgICAgICAgZW5kID0gcmV0Lmxlbmd0aCgpOwotICAgIH0KLQotICAgIC8vIFBy
ZWZpeCBhIGl0ZW0gbnVtYmVyL2J1bGxldCBpZiBuZWVkZWQKLSAgICBpZiAoY29yZU9iamVjdC0+
cm9sZVZhbHVlKCkgPT0gTGlzdEl0ZW1Sb2xlKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2Jq
UmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAob2JqUmVuZGVy
ZXIgJiYgb2JqUmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICAgICAgU3RyaW5nIG1h
cmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKG9ialJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhT
dWZmaXgoKTsKLSAgICAgICAgICAgIHJldCA9IG9ialJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyBtYXJrZXJUZXh0ICsgcmV0IDogcmV0ICsgbWFya2VyVGV4dDsKLSAgICAg
ICAgICAgIGlmIChlbmRPZmZzZXQgPT0gLTEpCi0gICAgICAgICAgICAgICAgZW5kICs9IG1hcmtl
clRleHQubGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXQgPSByZXQuc3Vic3Ry
aW5nKHN0YXJ0T2Zmc2V0LCBlbmQgLSBzdGFydE9mZnNldCk7Ci0gICAgcmV0dXJuIGdfc3RyZHVw
KHJldC51dGY4KCkuZGF0YSgpKTsKLX0KLQotc3RhdGljIEdhaWxUZXh0VXRpbCogZ2V0R2FpbFRl
eHRVdGlsRm9yQXRrKEF0a1RleHQqIHRleHRPYmplY3QpCi17Ci0gICAgR2FpbFRleHRVdGlsKiBn
YWlsVGV4dFV0aWwgPSBnYWlsX3RleHRfdXRpbF9uZXcoKTsKLSAgICBnYWlsX3RleHRfdXRpbF90
ZXh0X3NldHVwKGdhaWxUZXh0VXRpbCwgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfdGV4dCh0
ZXh0T2JqZWN0LCAwLCAtMSkpOwotICAgIHJldHVybiBnYWlsVGV4dFV0aWw7Ci19Ci0KLXN0YXRp
YyBQYW5nb0xheW91dCogZ2V0UGFuZ29MYXlvdXRGb3JBdGsoQXRrVGV4dCogdGV4dE9iamVjdCkK
LXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0T2JqZWN0
KTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7Ci0g
ICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIb3N0V2luZG93KiBo
b3N0V2luZG93ID0gZG9jdW1lbnQtPnZpZXcoKS0+aG9zdFdpbmRvdygpOwotICAgIGlmICghaG9z
dFdpbmRvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUGxhdGZvcm1QYWdlQ2xpZW50IHdlYlZp
ZXcgPSBob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICBpZiAoIXdlYlZpZXcp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggdGhlIGxh
eW91dCBhcyBpdCBhcHBlYXJzIG9uIHRoZSBzY3JlZW4KLSAgICBQYW5nb0xheW91dCogbGF5b3V0
ID0gZ3RrX3dpZGdldF9jcmVhdGVfcGFuZ29fbGF5b3V0KHN0YXRpY19jYXN0PEd0a1dpZGdldCo+
KHdlYlZpZXcpLCB0ZXh0Rm9yT2JqZWN0KGNvcmVPYmplY3QpKTsKLSAgICByZXR1cm4gbGF5b3V0
OwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYWZ0
ZXJfb2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91
bmRhcnlUeXBlLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIHJl
dHVybiBnYWlsX3RleHRfdXRpbF9nZXRfdGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4dCks
IGdldFBhbmdvTGF5b3V0Rm9yQXRrKHRleHQpLCBHQUlMX0FGVEVSX09GRlNFVCwgYm91bmRhcnlU
eXBlLCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ2NoYXIq
IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEF0a1RleHQqIHRleHQs
IGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBzdGFydE9m
ZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIHJldHVybiBnYWlsX3RleHRfdXRpbF9nZXRf
dGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0Rm9yQXRrKHRl
eHQpLCBHQUlMX0FUX09GRlNFVCwgYm91bmRhcnlUeXBlLCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X3RleHRfYmVmb3JlX29mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJv
dW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkK
LXsKLSAgICByZXR1cm4gZ2FpbF90ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9y
QXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZvckF0ayh0ZXh0KSwgR0FJTF9CRUZPUkVfT0ZGU0VU
LCBib3VuZGFyeVR5cGUsIG9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci19Ci0KLXN0
YXRpYyBndW5pY2hhciB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfYXRfb2Zm
c2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X2NhcmV0X29mZnNldChBdGtUZXh0KiB0ZXh0KQotewotICAgIC8vIGNvcmVPYmplY3QgaXMg
dGhlIHVuaWdub3JlZCBvYmplY3Qgd2hvc2Ugb2Zmc2V0IHRoZSBjYWxsZXIgaXMgcmVxdWVzdGlu
Zy4KLSAgICAvLyBmb2N1c2VkT2JqZWN0IGlzIHRoZSBvYmplY3Qgd2l0aCB0aGUgY2FyZXQuIEl0
IGlzIGxpa2VseSBpZ25vcmVkIC0tIHVubGVzcyBpdCdzIGEgbGluay4KLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBpZiAoIWNvcmVPYmplY3Qt
PmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIHBhc3MgYSB2YWxpZCBvYmplY3QgYXMgcmVmZXJl
bmNlLgotICAgIGlmIChjb3JlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAg
ICAgIGNvcmVPYmplY3QgPSBjb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAg
ICBpZiAoIWNvcmVPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IG9mZnNldDsK
LSAgICBpZiAoIW9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChjb3JlT2JqZWN0
LCBvZmZzZXQpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBjb3JlT2JqZWN0LT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJl
ci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJM
aXN0SXRlbShyZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0KLSAgICAgICAgLy8g
V2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldCBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCi0g
ICAgICAgIG9mZnNldCArPSBtYXJrZXJUZXh0Lmxlbmd0aCgpOwotICAgIH0KLQotICAgIC8vIFRP
RE86IFZlcmlmeSB0aGlzIGZvciBSVEwgdGV4dC4KLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi1z
dGF0aWMgaW50IGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYmFz
ZWxpbmVQb3NpdGlvbiBvcmlnaW5hdGVzIGZyb20gUmVuZGVyT2JqZWN0LmNwcCBhbmQgd2FzCi0g
ICAgLy8gcmVtb3ZlZCBpbiByNzAwNzIuIFRoZSBpbXBsZW1lbnRhdGlvbiBsb29rcyBpbmNvcnJl
Y3QgdGhvdWdoLCBiZWNhdXNlIHRoaXMgaXMgbm90IHRoZQotICAgIC8vIGJhc2VsaW5lIG9mIHRo
ZSB1bmRlcmx5aW5nIFJlbmRlck9iamVjdCwgYnV0IG9mIHRoZSBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LgotICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IHJlbmRlck9iamVj
dC0+Zmlyc3RMaW5lU3R5bGUoKS0+Zm9udE1ldHJpY3MoKTsKLSAgICByZXR1cm4gZm9udE1ldHJp
Y3MuYXNjZW50KCkgKyAocmVuZGVyT2JqZWN0LT5maXJzdExpbmVTdHlsZSgpLT5jb21wdXRlZExp
bmVIZWlnaHQoKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpKSAvIDI7Ci19Ci0KLXN0YXRpYyBBdGtB
dHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghb2JqZWN0LT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5kZXJlcigpOwotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQg
PSAwOwotICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoIiVpIiwgc3R5
bGUtPmZvbnRTaXplKCkpKTsKLSAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1
bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1NJWkUpLCBidWZm
ZXIuZ2V0KCkpOwotCi0gICAgQ29sb3IgYmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwotICAgIGlmIChiZ0NvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yLnJlZCgpLCBiZ0NvbG9y
LmdyZWVuKCksIGJnQ29sb3IuYmx1ZSgpKSk7Ci0gICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0
cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FU
VFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQotICAgIENvbG9yIGZnQ29sb3Ig
PSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwotICAgIGlm
IChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50
ZigiJWksJWksJWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZ0NvbG9y
LnJlZCgpLCBmZ0NvbG9yLmdyZWVuKCksIGZnQ29sb3IuYmx1ZSgpKSk7Ci0gICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQotICAg
IGludCBiYXNlbGluZVBvc2l0aW9uOwotICAgIGJvb2wgaW5jbHVkZVJpc2UgPSB0cnVlOwotICAg
IHN3aXRjaCAoc3R5bGUtPnZlcnRpY2FsQWxpZ24oKSkgewotICAgIGNhc2UgU1VCOgotICAgICAg
ICBiYXNlbGluZVBvc2l0aW9uID0gLTEgKiBiYXNlbGluZVBvc2l0aW9uRm9yUmVuZGVyT2JqZWN0
KHJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVVBFUjoKLSAgICAgICAgYmFz
ZWxpbmVQb3NpdGlvbiA9IGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3QocmVuZGVyZXIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJBU0VMSU5FOgotICAgICAgICBiYXNlbGluZVBv
c2l0aW9uID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaW5jbHVk
ZVJpc2UgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGluY2x1ZGVS
aXNlKSB7Ci0gICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGJhc2VsaW5l
UG9zaXRpb24pKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0
LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9SSVNFKSwgYnVmZmVy
LmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN0eWxlLT50ZXh0SW5kZW50KCkuaXNVbmRlZmlu
ZWQoKSkgewotICAgICAgICBpbnQgaW5kZW50YXRpb24gPSBzdHlsZS0+dGV4dEluZGVudCgpLmNh
bGNWYWx1ZShvYmplY3QtPnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgYnVmZmVyLnNldChnX3N0
cmR1cF9wcmludGYoIiVpIiwgaW5kZW50YXRpb24pKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkVG9B
dGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9JTkRFTlQpLCBidWZmZXIuZ2V0KCkpOwotICAgIH0KLQotICAgIFN0cmluZyBmb250
RmFtaWx5TmFtZSA9IHN0eWxlLT5mb250KCkuZmFtaWx5KCkuZmFtaWx5KCkuc3RyaW5nKCk7Ci0g
ICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxlZnQoOCkgPT0gIi13ZWJraXQtIikKLSAgICAgICAgZm9u
dEZhbWlseU5hbWUgPSBmb250RmFtaWx5TmFtZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICByZXN1bHQg
PSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFt
ZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9OQU1FKSwgZm9udEZhbWlseU5hbWUudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICBpbnQgZm9udFdlaWdodCA9IC0xOwotICAgIHN3aXRjaCAoc3R5bGUtPmZvbnQo
KS53ZWlnaHQoKSkgewotICAgIGNhc2UgRm9udFdlaWdodDEwMDoKLSAgICAgICAgZm9udFdlaWdo
dCA9IDEwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250V2VpZ2h0MjAwOgotICAgICAg
ICBmb250V2VpZ2h0ID0gMjAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQz
MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSAzMDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFdlaWdodDQwMDoKLSAgICAgICAgZm9udFdlaWdodCA9IDQwMDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAgICBmb250V2VpZ2h0ID0gNTAwOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQg
PSA2MDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFdlaWdodDcwMDoKLSAgICAgICAg
Zm9udFdlaWdodCA9IDcwMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250V2VpZ2h0ODAw
OgotICAgICAgICBmb250V2VpZ2h0ID0gODAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRXZWlnaHQ5MDA6Ci0gICAgICAgIGZvbnRXZWlnaHQgPSA5MDA7Ci0gICAgfQotICAgIGlmIChm
b250V2VpZ2h0ID4gMCkgewotICAgICAgICBidWZmZXIuc2V0KGdfc3RyZHVwX3ByaW50ZigiJWki
LCBmb250V2VpZ2h0KSk7Ci0gICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJl
c3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfV0VJR0hUKSwg
YnVmZmVyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0QWxpZ24oKSkg
ewotICAgIGNhc2UgVEFBVVRPOgotICAgIGNhc2UgVEFTVEFSVDoKLSAgICBjYXNlIFRBRU5EOgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIExFRlQ6Ci0gICAgY2FzZSBXRUJLSVRfTEVGVDoKLSAg
ICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgImxlZnQiKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSSUdIVDoKLSAgICBjYXNlIFdFQktJVF9SSUdIVDoKLSAg
ICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRy
aWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgInJpZ2h0Iik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0VOVEVSOgotICAgIGNhc2UgV0VCS0lUX0NFTlRFUjoK
LSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9h
dHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgImNlbnRlciIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpVU1RJRlk6Ci0gICAgICAgIHJlc3VsdCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFU
S19URVhUX0FUVFJfSlVTVElGSUNBVElPTiksICJmaWxsIik7Ci0gICAgfQotCi0gICAgcmVzdWx0
ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoQVRLX1RFWFRfQVRUUl9VTkRFUkxJTkUpLCAoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkgJiBV
TkRFUkxJTkUpID8gInNpbmdsZSIgOiAibm9uZSIpOwotCi0gICAgcmVzdWx0ID0gYWRkVG9BdGtB
dHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRf
QVRUUl9TVFlMRSksIHN0eWxlLT5mb250KCkuaXRhbGljKCkgPyAiaXRhbGljIiA6ICJub3JtYWwi
KTsKLQotICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfU1RSSUtFVEhST1VHSCksIChzdHlsZS0+
dGV4dERlY29yYXRpb24oKSAmIExJTkVfVEhST1VHSCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLQot
ICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmli
dXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSU5WSVNJQkxFKSwgKHN0eWxlLT52aXNpYmlsaXR5
KCkgPT0gSElEREVOKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCi0gICAgcmVzdWx0ID0gYWRkVG9B
dGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9FRElUQUJMRSksIG9iamVjdC0+aXNSZWFkT25seSgpID8gImZhbHNlIiA6ICJ0cnVl
Iik7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2ludCBjb21wYXJlQXR0cmli
dXRlKGNvbnN0IEF0a0F0dHJpYnV0ZSogYSwgY29uc3QgQXRrQXR0cmlidXRlKiBiKQotewotICAg
IHJldHVybiBnX3N0cmNtcDAoYS0+bmFtZSwgYi0+bmFtZSkgfHwgZ19zdHJjbXAwKGEtPnZhbHVl
LCBiLT52YWx1ZSk7Ci19Ci0KLS8vIFJldHVybnMgYW4gQXRrQXR0cmlidXRlU2V0IHdpdGggdGhl
IGVsZW1lbnRzIG9mIGExIHdoaWNoIGFyZSBlaXRoZXIKLS8vIG5vdCBwcmVzZW50IG9yIGRpZmZl
cmVudCBpbiBhMi4gTmVpdGhlciBhMSBub3IgYTIgc2hvdWxkIGJlIHVzZWQKLS8vIGFmdGVyIGNh
bGxpbmcgdGhpcyBmdW5jdGlvbi4KLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNl
dERpZmZlcmVuY2UoQXRrQXR0cmlidXRlU2V0KiBhMSwgQXRrQXR0cmlidXRlU2V0KiBhMikKLXsK
LSAgICBpZiAoIWEyKQotICAgICAgICByZXR1cm4gYTE7Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQq
IGkgPSBhMTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGZvdW5kOwotICAgIEF0a0F0dHJpYnV0ZVNl
dCogdG9EZWxldGUgPSAwOwotCi0gICAgd2hpbGUgKGkpIHsKLSAgICAgICAgZm91bmQgPSBnX3Ns
aXN0X2ZpbmRfY3VzdG9tKGEyLCBpLT5kYXRhLCAoR0NvbXBhcmVGdW5jKWNvbXBhcmVBdHRyaWJ1
dGUpOwotICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgIEF0a0F0dHJpYnV0ZVNldCog
dCA9IGktPm5leHQ7Ci0gICAgICAgICAgICB0b0RlbGV0ZSA9IGdfc2xpc3RfcHJlcGVuZCh0b0Rl
bGV0ZSwgaS0+ZGF0YSk7Ci0gICAgICAgICAgICBhMSA9IGdfc2xpc3RfZGVsZXRlX2xpbmsoYTEs
IGkpOwotICAgICAgICAgICAgaSA9IHQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaSA9
IGktPm5leHQ7Ci0gICAgfQotCi0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShhMik7Ci0gICAg
YXRrX2F0dHJpYnV0ZV9zZXRfZnJlZSh0b0RlbGV0ZSk7Ci0gICAgcmV0dXJuIGExOwotfQotCi1z
dGF0aWMgZ3VpbnQgYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgLy8gTm9uIHJlbmRlciBvYmplY3RzIGFyZSBub3QgdGFr
ZW4gaW50byBhY2NvdW50Ci0gICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZvciB0aG9zZSBvYmplY3RzIGlt
cGxlbWVudGluZyB0aGUgQXRrVGV4dCBpbnRlcmZhY2Ugd2UgdXNlIHRoZQotICAgIC8vIHdlbGwg
a25vd24gQVBJIHRvIGFsd2F5cyBnZXQgdGhlIHRleHQgaW4gYSBjb25zaXN0ZW50IHdheQotICAg
IEF0a09iamVjdCogYXRrT2JqID0gQVRLX09CSkVDVChvYmplY3QtPndyYXBwZXIoKSk7Ci0gICAg
aWYgKEFUS19JU19URVhUKGF0a09iaikpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gdGV4dCh3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KEFUS19URVhUKGF0a09iaiksIDAsIC0xKSk7
Ci0gICAgICAgIHJldHVybiBnX3V0Zjhfc3RybGVuKHRleHQuZ2V0KCksIC0xKTsKLSAgICB9Ci0K
LSAgICAvLyBFdmVuIGlmIHdlIGRvbid0IGV4cG9zZSBsaXN0IG1hcmtlcnMgdG8gQXNzaXN0aXZl
Ci0gICAgLy8gVGVjaG5vbG9naWVzLCB3ZSBuZWVkIHRvIGhhdmUgYSB3YXkgdG8gbWVhc3VyZSB0
aGVpciBsZW5ndGgKLSAgICAvLyBmb3IgdGhvc2UgY2FzZXMgd2hlbiBpdCdzIG5lZWRlZCB0byB0
YWtlIGl0IGludG8gYWNjb3VudAotICAgIC8vIHNlcGFyYXRlbHkgKGFzIGluIGdldEFjY2Vzc2li
aWxpdHlPYmplY3RGb3JPZmZzZXQpCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG9iamVj
dC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzTGlzdE1hcmtl
cigpKSB7Ci0gICAgICAgIFJlbmRlckxpc3RNYXJrZXIqIG1hcmtlciA9IHRvUmVuZGVyTGlzdE1h
cmtlcihyZW5kZXJlcik7Ci0gICAgICAgIHJldHVybiBtYXJrZXItPnRleHQoKS5sZW5ndGgoKSAr
IG1hcmtlci0+c3VmZml4KCkubGVuZ3RoKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXN0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRBY2Nlc3NpYmlsaXR5T2JqZWN0
Rm9yT2Zmc2V0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgZ3VpbnQgb2Zmc2V0
LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3QqIHJlc3VsdDsKLSAgICBndWludCBsZW5ndGggPSBhY2Nlc3NpYmlsaXR5
T2JqZWN0TGVuZ3RoKG9iamVjdCk7Ci0gICAgaWYgKGxlbmd0aCA+IG9mZnNldCkgewotICAgICAg
ICAqc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICAqZW5kT2Zmc2V0ID0gbGVuZ3RoOwotICAgICAg
ICByZXN1bHQgPSBvYmplY3Q7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0ID0g
LTE7Ci0gICAgICAgICplbmRPZmZzZXQgPSAtMTsKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICB9
Ci0KLSAgICBpZiAoIW9iamVjdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hpbGQo
KTsKLSAgICBndWludCBjdXJyZW50T2Zmc2V0ID0gMDsKLSAgICBndWludCBjaGlsZFBvc2l0aW9u
ID0gMDsKLSAgICB3aGlsZSAoY2hpbGQgJiYgY3VycmVudE9mZnNldCA8PSBvZmZzZXQpIHsKLSAg
ICAgICAgZ3VpbnQgY2hpbGRMZW5ndGggPSBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNoaWxk
KTsKLSAgICAgICAgY3VycmVudE9mZnNldCA9IGNoaWxkTGVuZ3RoICsgY2hpbGRQb3NpdGlvbjsK
LSAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHsKLSAgICAgICAgICAgIGdpbnQg
Y2hpbGRTdGFydE9mZnNldDsKLSAgICAgICAgICAgIGdpbnQgY2hpbGRFbmRPZmZzZXQ7Ci0gICAg
ICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBncmFuZENoaWxkID0gZ2V0QWNjZXNz
aWJpbGl0eU9iamVjdEZvck9mZnNldChjaGlsZCwgb2Zmc2V0LWNoaWxkUG9zaXRpb24sICAmY2hp
bGRTdGFydE9mZnNldCwgJmNoaWxkRW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChjaGlsZFN0
YXJ0T2Zmc2V0ID49IDApIHsKLSAgICAgICAgICAgICAgICAqc3RhcnRPZmZzZXQgPSBjaGlsZFN0
YXJ0T2Zmc2V0ICsgY2hpbGRQb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAqZW5kT2Zmc2V0ID0g
Y2hpbGRFbmRPZmZzZXQgKyBjaGlsZFBvc2l0aW9uOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGdyYW5kQ2hpbGQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBjaGlsZFBvc2l0aW9uICs9IGNoaWxkTGVuZ3RoOwotICAgICAgICAgICAgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBnZXRSdW5BdHRyaWJ1dGVzRnJvbUFjY2VzaWJp
bGl0eU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBlbGVtZW50LCBnaW50IG9mZnNl
dCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICBjb25zdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0ICpjaGlsZCA9IGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQo
ZWxlbWVudCwgb2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLSAgICBpZiAoIWNoaWxk
KSB7Ci0gICAgICAgICpzdGFydE9mZnNldCA9IC0xOwotICAgICAgICAqZW5kT2Zmc2V0ID0gLTE7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEF0a0F0dHJpYnV0ZVNldCogZGVmYXVs
dEF0dHJpYnV0ZXMgPSBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGVsZW1l
bnQpOwotICAgIEF0a0F0dHJpYnV0ZVNldCogY2hpbGRBdHRyaWJ1dGVzID0gZ2V0QXR0cmlidXRl
U2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjaGlsZCk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRl
U2V0RGlmZmVyZW5jZShjaGlsZEF0dHJpYnV0ZXMsIGRlZmF1bHRBdHRyaWJ1dGVzKTsKLX0KLQot
c3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcnVuX2F0
dHJpYnV0ZXMoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHN0YXJ0T2Zmc2V0LCBn
aW50KiBlbmRPZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9
IGNvcmUodGV4dCk7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQ7Ci0KLSAgICBpZiAoIWNv
cmVPYmplY3QpIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgKmVuZE9mZnNl
dCA9IGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQodGV4dCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIGlmIChvZmZzZXQgPT0gLTEpCi0gICAgICAgIG9mZnNldCA9IGF0a190
ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dCk7Ci0KLSAgICByZXN1bHQgPSBnZXRSdW5BdHRyaWJ1
dGVzRnJvbUFjY2VzaWJpbGl0eU9iamVjdChjb3JlT2JqZWN0LCBvZmZzZXQsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOwotCi0gICAgaWYgKCpzdGFydE9mZnNldCA8IDApIHsKLSAgICAgICAgKnN0
YXJ0T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAqZW5kT2Zmc2V0ID0gb2Zmc2V0OwotICAgIH0K
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0KQot
ewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAg
IGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZVNldEZv
ckFjY2Vzc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0IHRl
eHRFeHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgbGVuZ3RoLCBB
dGtDb29yZFR5cGUgY29vcmRzKQotewotICAgIGdjaGFyKiB0ZXh0Q29udGVudCA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQodGV4dCwgc3RhcnRPZmZzZXQsIC0xKTsKLSAgICBnaW50
IHRleHRMZW5ndGggPSBnX3V0Zjhfc3RybGVuKHRleHRDb250ZW50LCAtMSk7Ci0KLSAgICAvLyBU
aGUgZmlyc3QgY2FzZSAoZW5kT2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywgYnV0IHNlZW1zIGJy
b2tlbiBmb3IgYWxsIEd0aysgYXBwcy4KLSAgICBnaW50IHJhbmdlTGVuZ3RoID0gbGVuZ3RoOwot
ICAgIGlmIChyYW5nZUxlbmd0aCA8IDAgfHwgcmFuZ2VMZW5ndGggPiB0ZXh0TGVuZ3RoKQotICAg
ICAgICByYW5nZUxlbmd0aCA9IHRleHRMZW5ndGg7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0KLSAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3JlT2Jq
ZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRPZmZzZXQsIHJhbmdl
TGVuZ3RoKSk7Ci0gICAgc3dpdGNoIChjb29yZHMpIHsKLSAgICBjYXNlIEFUS19YWV9TQ1JFRU46
Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgp
KQotICAgICAgICAgICAgZXh0ZW50cyA9IGRvY3VtZW50LT52aWV3KCktPmNvbnRlbnRzVG9TY3Jl
ZW4oZXh0ZW50cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKLSAg
ICAgICAgLy8gTm8tb3AKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV4dGVu
dHM7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rl
cl9leHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBn
aW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRzKQotewotICAgIElu
dFJlY3QgZXh0ZW50cyA9IHRleHRFeHRlbnRzKHRleHQsIG9mZnNldCwgMSwgY29vcmRzKTsKLSAg
ICAqeCA9IGV4dGVudHMueCgpOwotICAgICp5ID0gZXh0ZW50cy55KCk7Ci0gICAgKndpZHRoID0g
ZXh0ZW50cy53aWR0aCgpOwotICAgICpoZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzKEF0a1Rl
eHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0LCBBdGtDb29yZFR5cGUg
Y29vcmRzLCBBdGtUZXh0UmVjdGFuZ2xlKiByZWN0KQotewotICAgIEludFJlY3QgZXh0ZW50cyA9
IHRleHRFeHRlbnRzKHRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwg
Y29vcmRzKTsKLSAgICByZWN0LT54ID0gZXh0ZW50cy54KCk7Ci0gICAgcmVjdC0+eSA9IGV4dGVu
dHMueSgpOwotICAgIHJlY3QtPndpZHRoID0gZXh0ZW50cy53aWR0aCgpOwotICAgIHJlY3QtPmhl
aWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudChBdGtUZXh0KiB0ZXh0KQotewotICAgIHJldHVy
biBhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmUodGV4dCkpOwotfQotCi1zdGF0aWMgZ2lu
dCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQoQXRrVGV4dCogdGV4
dCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZHMpCi17Ci0gICAgLy8gRklYTUU6
IFVzZSB0aGUgQXRrQ29vcmRUeXBlCi0gICAgLy8gVE9ETzogSXMgaXQgY29ycmVjdCB0byBpZ25v
cmUgcmFuZ2UubGVuZ3RoPwotICAgIEludFBvaW50IHBvcyh4LCB5KTsKLSAgICBQbGFpblRleHRS
YW5nZSByYW5nZSA9IGNvcmUodGV4dCktPmRvQVhSYW5nZUZvclBvc2l0aW9uKHBvcyk7Ci0gICAg
cmV0dXJuIHJhbmdlLnN0YXJ0OwotfQotCi1zdGF0aWMgdm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRz
Rm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgZ2ludCYgc3RhcnRPZmZzZXQsIGdpbnQmIGVuZE9mZnNldCkKLXsKLSAg
ICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBkb2Vzbid0
IGFmZmVjdCB0aGUgc2VsZWN0ZWQgbm9kZS4KLSAgICBpZiAoIXNlbGVjdGlvbkJlbG9uZ3NUb09i
amVjdChjb3JlT2JqZWN0LCBzZWxlY3Rpb24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBX
ZSBuZWVkIHRvIGZpbmQgdGhlIGV4YWN0IHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIGluIHRoZQot
ICAgIC8vIHNlbGVjdGVkIG5vZGUgdGhhdCBpbnRlcnNlY3RzIHRoZSBzZWxlY3Rpb24sIHRvIGxh
dGVyIG9uIGdldAotICAgIC8vIHRoZSByaWdodCB2YWx1ZXMgZm9yIHRoZSBlZmZlY3RpdmUgc3Rh
cnQgYW5kIGVuZCBvZmZzZXRzLgotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBvc2l0
aW9uIG5vZGVSYW5nZVN0YXJ0OwotICAgIFBvc2l0aW9uIG5vZGVSYW5nZUVuZDsKLSAgICBOb2Rl
KiBub2RlID0gY29yZU9iamVjdC0+bm9kZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gc2VsUmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLQotICAgIC8vIElmIHRoZSBzZWxlY3Rp
b24gYWZmZWN0cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGZpcnN0Ci0gICAgLy8gcG9zc2li
bGUgcG9zaXRpb24gaXMgYWxzbyBpbiB0aGUgc2VsZWN0aW9uLCB3ZSBtdXN0IHNldAotICAgIC8v
IG5vZGVSYW5nZVN0YXJ0IHRvIHRoYXQgcG9zaXRpb24sIG90aGVyd2lzZSB0byB0aGUgc2VsZWN0
aW9uJ3MKLSAgICAvLyBzdGFydCBwb3NpdGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2Rl
IGFueXdheSkuCi0gICAgTm9kZSogZmlyc3RMZWFmTm9kZSA9IG5vZGUtPmZpcnN0RGVzY2VuZGFu
dCgpOwotICAgIGlmIChzZWxSYW5nZS0+aXNQb2ludEluUmFuZ2UoZmlyc3RMZWFmTm9kZSwgMCwg
ZWMpKQotICAgICAgICBub2RlUmFuZ2VTdGFydCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShmaXJzdExlYWZOb2RlKTsKLSAgICBlbHNlCi0gICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gc2Vs
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLQotICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0
cyB0aGUgc2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGxhc3QKLSAgICAvLyBwb3NzaWJsZSBwb3NpdGlv
biBpcyBhbHNvIGluIHRoZSBzZWxlY3Rpb24sIHdlIG11c3Qgc2V0Ci0gICAgLy8gbm9kZVJhbmdl
RW5kIHRvIHRoYXQgcG9zaXRpb24sIG90aGVyd2lzZSB0byB0aGUgc2VsZWN0aW9uJ3MKLSAgICAv
LyBlbmQgcG9zaXRpb24gKGl0IHdvdWxkIGJlbG9uZyB0byB0aGUgbm9kZSBhbnl3YXkpLgotICAg
IE5vZGUqIGxhc3RMZWFmTm9kZSA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgaWYgKHNl
bFJhbmdlLT5pc1BvaW50SW5SYW5nZShsYXN0TGVhZk5vZGUsIGxhc3RPZmZzZXRJbk5vZGUobGFz
dExlYWZOb2RlKSwgZWMpKQotICAgICAgICBub2RlUmFuZ2VFbmQgPSBsYXN0UG9zaXRpb25Jbk9y
QWZ0ZXJOb2RlKGxhc3RMZWFmTm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBub2RlUmFuZ2VFbmQg
PSBzZWxSYW5nZS0+ZW5kUG9zaXRpb24oKTsKLQotICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBv
ZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBvYmplY3QuCi0gICAgUG9zaXRpb24gcGFy
ZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlSW5QYXJlbnQgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3Vt
ZW50KCksIHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVSYW5nZVN0YXJ0KTsKLQotICAgIC8vIFNl
dCB2YWx1ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cy4KLSAgICBzdGFydE9mZnNldCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5nZXQoKSwgdHJ1ZSk7Ci0KLSAg
ICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgb2Zmc2V0cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJr
ZXIuCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7
Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAg
U3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4
dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgc3RhcnRPZmZzZXQgKz0gbWFya2VyVGV4dC5sZW5ndGgo
KTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
bm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgZW5k
T2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5n
ZS5nZXQoKSwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X25fc2VsZWN0aW9ucyhBdGtUZXh0KiB0ZXh0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCk7Ci0KLSAgICAvLyBPbmx5IHJhbmdlIHNlbGVj
dGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QKLSAgICBpZiAo
IXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zIGZvciBub3csIHNvIHRoZXJlJ3Mgb25seQot
ICAgIC8vIHR3byBwb3NzaWJpbGl0aWVzCi0gICAgLy8gQWxzbywgd2UgZG9uJ3Qgd2FudCB0byBk
byBhbnl0aGluZyBpZiB0aGUgc2VsZWN0aW9uIGRvZXMgbm90Ci0gICAgLy8gYmVsb25nIHRvIHRo
ZSBjdXJyZW50bHkgc2VsZWN0ZWQgb2JqZWN0LiBXZSBoYXZlIHRvIGNoZWNrIHNpbmNlCi0gICAg
Ly8gdGhlcmUncyBubyB3YXkgdG8gZ2V0IHRoZSBzZWxlY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0
LCBvbmx5Ci0gICAgLy8gdGhlIGdsb2JhbCBvbmUgKHRoZSBBUEkgaXMgYSBiaXQgY29uZnVzaW5n
KQotICAgIHJldHVybiBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoY29yZU9iamVjdCwgc2VsZWN0
aW9uKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X3NlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlvbk51bSwgZ2ludCogc3Rh
cnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICAvLyBEZWZhdWx0IHZhbHVlcywgdW5s
ZXNzIHRoZSBjb250cmFyeSBpcyBwcm92ZWQKLSAgICAqc3RhcnRPZmZzZXQgPSAqZW5kT2Zmc2V0
ID0gMDsKLQotICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rp
b24sIHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KLSAgICBp
ZiAoc2VsZWN0aW9uTnVtKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEdldCB0aGUgb2Zm
c2V0cyBvZiB0aGUgc2VsZWN0aW9uIGZvciB0aGUgc2VsZWN0ZWQgb2JqZWN0Ci0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0gICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKTsKLSAgICBnZXRTZWxlY3Rp
b25PZmZzZXRzRm9yT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGlvbiwgKnN0YXJ0T2Zmc2V0LCAq
ZW5kT2Zmc2V0KTsKLQotICAgIC8vIFJldHVybiAwIGluc3RlYWQgb2YgIiIsIGFzIHRoYXQncyB0
aGUgZXhwZWN0ZWQgcmVzdWx0IGZvcgotICAgIC8vIHRoaXMgQXRrVGV4dCBtZXRob2Qgd2hlbiB0
aGVyZSdzIG5vIHNlbGVjdGlvbgotICAgIGlmICgqc3RhcnRPZmZzZXQgPT0gKmVuZE9mZnNldCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfdGV4dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9hZGRfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQs
IGdpbnQgc3RhcnRfb2Zmc2V0LCBnaW50IGVuZF9vZmZzZXQpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X3NldF9zZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25O
dW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQotewotICAgIC8vIFdlYkNvcmUg
ZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAwIGRv
ZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KLSAgICBpZiAoc2VsZWN0aW9uTnVtKQotICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0g
Y29yZSh0ZXh0KTsKLSAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBDb25zaWRlciAtMSBhbmQg
b3V0LW9mLWJvdW5kIHZhbHVlcyBhbmQgY29ycmVjdCB0aGVtIHRvIGxlbmd0aAotICAgIGdpbnQg
dGV4dENvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KHRl
eHQpOwotICAgIGlmIChzdGFydE9mZnNldCA8IDAgfHwgc3RhcnRPZmZzZXQgPiB0ZXh0Q291bnQp
Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGV4dENvdW50OwotICAgIGlmIChlbmRPZmZzZXQgPCAw
IHx8IGVuZE9mZnNldCA+IHRleHRDb3VudCkKLSAgICAgICAgZW5kT2Zmc2V0ID0gdGV4dENvdW50
OwotCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldHMgZm9yIHRoZSBsaXN0IGl0
ZW0gbWFya2VyLgotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlT2JqZWN0LT5yZW5k
ZXJlcigpOwotICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0g
ICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlciktPm1h
cmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAgIGludCBtYXJrZXJMZW5ndGggPSBtYXJrZXJU
ZXh0Lmxlbmd0aCgpOwotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPCBtYXJrZXJMZW5ndGggfHwg
ZW5kT2Zmc2V0IDwgbWFya2VyTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0g
ICAgICAgIHN0YXJ0T2Zmc2V0IC09IG1hcmtlckxlbmd0aDsKLSAgICAgICAgZW5kT2Zmc2V0IC09
IG1hcmtlckxlbmd0aDsKLSAgICB9Ci0KLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uoc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKLSAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UodGV4
dFJhbmdlKTsKLSAgICBpZiAocmFuZ2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2Up
OwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVt
KQotewotICAgIC8vIFdlYkNvcmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24s
IHNvIGFueXRoaW5nIGJ1dCAwIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KLSAgICBpZiAo
c2VsZWN0aW9uTnVtKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBEbyBub3RoaW5n
IGlmIGN1cnJlbnQgc2VsZWN0aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBvYmplY3QKLSAgICBp
ZiAoIXdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X25fc2VsZWN0aW9ucyh0ZXh0KSkKLSAgICAg
ICAgcmV0dXJuIEZBTFNFOwotCi0gICAgLy8gU2V0IGEgbmV3IDAtc2l6ZWQgc2VsZWN0aW9uIHRv
IHRoZSBjYXJldCBwb3NpdGlvbiwgaW4gb3JkZXIKLSAgICAvLyB0byBzaW11bGF0ZSBzZWxlY3Rp
b24gcmVtb3ZhbCAoR0FJTCBzdHlsZSkKLSAgICBnaW50IGNhcmV0T2Zmc2V0ID0gd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KHRleHQpOwotICAgIHJldHVybiB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X3NldF9zZWxlY3Rpb24odGV4dCwgc2VsZWN0aW9uTnVtLCBjYXJldE9m
ZnNldCwgY2FyZXRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0KQotewot
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotCi0gICAg
aWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIEZBTFNFOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3Qt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkp
IHsKLSAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVy
KS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgaW50IG1hcmtlckxlbmd0aCA9IG1h
cmtlclRleHQubGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBtYXJrZXJMZW5ndGgpCi0g
ICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3Qg
dGhlIG9mZnNldCBmb3IgbGlzdCBpdGVtcy4KLSAgICAgICAgb2Zmc2V0IC09IG1hcmtlckxlbmd0
aDsKLSAgICB9Ci0KLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2Uob2Zmc2V0LCAwKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlv
blJhbmdlRm9yUmFuZ2UodGV4dFJhbmdlKTsKLSAgICBpZiAocmFuZ2UuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBGQUxTRTsKLQotICAgIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBv
c2l0aW9uUmFuZ2UocmFuZ2UpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBh
dGtfdGV4dF9pbnRlcmZhY2VfaW5pdChBdGtUZXh0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNl
LT5nZXRfdGV4dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQ7Ci0gICAgaWZhY2Ut
PmdldF90ZXh0X2FmdGVyX29mZnNldCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHRf
YWZ0ZXJfb2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfdGV4dF9hdF9vZmZzZXQgPSB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF90ZXh0X2F0X29mZnNldDsKLSAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rl
cl9hdF9vZmZzZXQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfYXRfb2Zm
c2V0OwotICAgIGlmYWNlLT5nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0ID0gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfY2FyZXRfb2Zm
c2V0ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0OwotICAgIGlmYWNl
LT5nZXRfcnVuX2F0dHJpYnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9ydW5fYXR0
cmlidXRlczsKLSAgICBpZmFjZS0+Z2V0X2RlZmF1bHRfYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nl
c3NpYmxlX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlczsKLSAgICBpZmFjZS0+Z2V0X2NoYXJh
Y3Rlcl9leHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVu
dHM7Ci0gICAgaWZhY2UtPmdldF9yYW5nZV9leHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4
dF9nZXRfcmFuZ2VfZXh0ZW50czsKLSAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9jb3VudCA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudDsKLSAgICBpZmFjZS0+Z2V0
X29mZnNldF9hdF9wb2ludCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X29mZnNldF9hdF9w
b2ludDsKLSAgICBpZmFjZS0+Z2V0X25fc2VsZWN0aW9ucyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X25fc2VsZWN0aW9uczsKLSAgICBpZmFjZS0+Z2V0X3NlbGVjdGlvbiA9IHdlYmtpdF9h
Y2Nlc3NpYmxlX3RleHRfZ2V0X3NlbGVjdGlvbjsKLQotICAgIC8vIHNldCBtZXRob2RzCi0gICAg
aWZhY2UtPmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2FkZF9zZWxlY3Rp
b247Ci0gICAgaWZhY2UtPnJlbW92ZV9zZWxlY3Rpb24gPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0
X3JlbW92ZV9zZWxlY3Rpb247Ci0gICAgaWZhY2UtPnNldF9zZWxlY3Rpb24gPSB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X3NldF9zZWxlY3Rpb247Ci0gICAgaWZhY2UtPnNldF9jYXJldF9vZmZzZXQg
PSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X3NldF9jYXJldF9vZmZzZXQ7Ci19Ci0KIC8vIFRhYmxl
CiAKIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsKEF0a1RhYmxlKiB0YWJsZSwg
Z3VpbnQgcm93LCBndWludCBjb2x1bW4pCkBAIC0xNzg1LDcgKzk1OSw3IEBAIHN0YXRpYyBjb25z
dCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X2NvbHVtbl9kZXNjcmlwdGlvbihB
dGtUYWJsZSogdGFiCiB7CiAgICAgQXRrT2JqZWN0KiBjb2x1bW5IZWFkZXIgPSBhdGtfdGFibGVf
Z2V0X2NvbHVtbl9oZWFkZXIodGFibGUsIGNvbHVtbik7CiAgICAgaWYgKGNvbHVtbkhlYWRlciAm
JiBBVEtfSVNfVEVYVChjb2x1bW5IZWFkZXIpKQotICAgICAgICByZXR1cm4gd2Via2l0X2FjY2Vz
c2libGVfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChjb2x1bW5IZWFkZXIpLCAwLCAtMSk7CisgICAg
ICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQVRLX1RFWFQoY29sdW1uSGVh
ZGVyKSwgMCwgLTEpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNzk0LDcgKzk2OCw3IEBAIHN0
YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGFibGVfZ2V0X3Jvd19kZXNjcmlw
dGlvbihBdGtUYWJsZSogdGFibGUsCiB7CiAgICAgQXRrT2JqZWN0KiByb3dIZWFkZXIgPSBhdGtf
dGFibGVfZ2V0X3Jvd19oZWFkZXIodGFibGUsIHJvdyk7CiAgICAgaWYgKHJvd0hlYWRlciAmJiBB
VEtfSVNfVEVYVChyb3dIZWFkZXIpKQotICAgICAgICByZXR1cm4gd2Via2l0X2FjY2Vzc2libGVf
dGV4dF9nZXRfdGV4dChBVEtfVEVYVChyb3dIZWFkZXIpLCAwLCAtMSk7CisgICAgICAgIHJldHVy
biB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQVRLX1RFWFQocm93SGVhZGVyKSwgMCwgLTEp
OwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xODIwLDggKzk5NCw3IEBAIHN0YXRpYyBjb25zdCBH
SW50ZXJmYWNlSW5mbyBBdGtJbnRlcmZhY2VzSW5pdEZ1bmN0aW9uc1tdID0gewogICAgIHtyZWlu
dGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4od2Via2l0QWNjZXNzaWJsZUFjdGlvbklu
dGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5p
dEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25JbnRlcmZhY2VJbml0KSwgMCwgMH0sCiAg
ICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJraXRBY2Nlc3NpYmxl
RWRpdGFibGVUZXh0SW50ZXJmYWNlSW5pdCksIDAsIDB9LAotICAgIHsoR0ludGVyZmFjZUluaXRG
dW5jKWF0a190ZXh0X2ludGVyZmFjZV9pbml0LAotICAgICAoR0ludGVyZmFjZUZpbmFsaXplRnVu
YykgMCwgMH0sCisgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPih3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQpLCAwLCAwfSwKICAgICB7cmVpbnRlcnByZXRf
Y2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZh
Y2VJbml0KSwgMCwgMH0sCiAgICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5j
Pih3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VJbnRlcmZhY2VJbml0KSwgMCwgMH0sCiAgICAgeyhHSW50
ZXJmYWNlSW5pdEZ1bmMpYXRrX3RhYmxlX2ludGVyZmFjZV9pbml0LAotLSAKMS43LjcuNQoK
</data>
<flag name="review"
          id="124854"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123777</attachid>
            <date>2012-01-24 11:30:15 -0800</date>
            <delta_ts>2012-01-24 11:34:48 -0800</delta_ts>
            <desc>18. Don&apos;t expose functions for the ATK interfaces in header files</desc>
            <filename>bug-76783-20120124203013.patch</filename>
            <type>text/plain</type>
            <size>64437</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NzYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzAwOTc5N2QyNTkwNjBk
YzljYmU5ZjliZTg5N2M1MTM2OTQ2MjA2NC4uYTRjZGY4MTYxNDY5NzA5YjBiZWY4MGNkNzIyMjAz
OTg2N2NmMzYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNzcsNiArNzcsMTQ3IEBACiAgICAgICAgIFtHVEtd
IFJlZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJlIG1vcmUgbW9kdWxhcgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3ODMKIAor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEb24ndCBleHBv
c2UgZnVuY3Rpb25zIGZvciB0aGUgQVRLIGludGVyZmFjZXMgaW4gaGVhZGVyIGZpbGVzLgorCisg
ICAgICAgIEV4cG9zZSBvbmx5IHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgZWFjaCBp
bnRlcmZhY2UsIGFuZAorICAgICAgICB1c2UgdGhlIGdlbmVyaWMgZnVuY3Rpb25zIGZyb20gQVRL
IGludGVyZmFjZXMgd2hlcmUgbmVlZGVkLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlQWN0aW9uRG9BY3Rpb24pOiBNYWRlIHRoaXMgZnVuY3Rpb24gc3RhdGljLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldE5BY3Rpb25zKTogRGl0dG8uCisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0RGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVBY3Rpb25HZXRLZXliaW5kaW5nKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlQWN0aW9uR2V0TmFtZSk6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZUFjdGlvbkludGVyZmFjZUluaXQpOiBNb3ZlZCB0byB0aGUgYm90dG9tLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaDogUmVt
b3ZlZCBhbGwKKyAgICAgICAgZnVuY3Rpb25zIGJ1dCB0aGUgb25lIGZvciBpbml0aWFsaXppbmcg
dGhlIGludGVyZmFjZSBmcm9tIGhlcmUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmNwcDoKKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVDb21wb25lbnRSZWZBY2Nlc3NpYmxlQXRQb2ludCk6IE1hZGUgdGhpcyBmdW5jdGlv
biBzdGF0aWMuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R2V0RXh0ZW50cyk6
IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyk6IERp
dHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEludGVyZmFjZUluaXQpOiBN
b3ZlZCB0byB0aGUgYm90dG9tLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuaDogUmVtb3ZlZCBhbGwKKyAgICAgICAgZnVuY3Rp
b25zIGJ1dCB0aGUgb25lIGZvciBpbml0aWFsaXppbmcgdGhlIGludGVyZmFjZSBmcm9tIGhlcmUu
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
RG9jdW1lbnQuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0QXR0cmli
dXRlVmFsdWUpOiBNYWRlIHRoaXMgZnVuY3Rpb24gc3RhdGljLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZURvY3VtZW50R2V0QXR0cmlidXRlcyk6IERpdHRvLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZURvY3VtZW50R2V0TG9jYWxlKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlRG9jdW1lbnRJbnRlcmZhY2VJbml0KTogTW92ZWQgdG8gdGhlIGJvdHRvbS4KKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuaDog
UmVtb3ZlZCBhbGwKKyAgICAgICAgZnVuY3Rpb25zIGJ1dCB0aGUgb25lIGZvciBpbml0aWFsaXpp
bmcgdGhlIGludGVyZmFjZSBmcm9tIGhlcmUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0LmNwcDoKKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRTZXRSdW5BdHRyaWJ1dGVzKTogTWFkZSB0aGlzIGZ1
bmN0aW9uIHN0YXRpYy4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRTZXRU
ZXh0Q29udGVudHMpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRl
eHRJbnNlcnRUZXh0KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVU
ZXh0Q29weVRleHQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRl
eHRDdXRUZXh0KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0
RGVsZXRlVGV4dCk6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4
dFBhc3RlVGV4dCk6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4
dEludGVyZmFjZUluaXQpOiBNb3ZlZCB0byB0aGUgYm90dG9tLgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaDogUmVtb3Zl
ZCBhbGwKKyAgICAgICAgZnVuY3Rpb25zIGJ1dCB0aGUgb25lIGZvciBpbml0aWFsaXppbmcgdGhl
IGludGVyZmFjZSBmcm9tIGhlcmUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5jcHA6CisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluayk6IE1hZGUgdGhpcyBmdW5jdGlvbiBz
dGF0aWMuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEludGVyZmFjZUlu
aXQpOiBNb3ZlZCB0byB0aGUgYm90dG9tLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmg6IFJlbW92ZWQgYWxsCisgICAg
ICAgIGZ1bmN0aW9ucyBidXQgdGhlIG9uZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBpbnRlcmZhY2Ug
ZnJvbSBoZXJlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZUh5cGVydGV4dC5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0
ZXh0R2V0TGluayk6IE1hZGUgdGhpcyBmdW5jdGlvbiBzdGF0aWMuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdCk6IE1vdmVkIHRvIHRoZSBib3R0b20uCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4
dC5oOiBSZW1vdmVkIGFsbAorICAgICAgICBmdW5jdGlvbnMgYnV0IHRoZSBvbmUgZm9yIGluaXRp
YWxpemluZyB0aGUgaW50ZXJmYWNlIGZyb20gaGVyZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5jcHA6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZVBvc2l0aW9uKTogTWFkZSB0aGlzIGZ1bmN0aW9uIHN0
YXRpYy4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlRGVzY3JpcHRpb24p
OiBEaXR0by4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlU2l6ZSk6IERp
dHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUltYWdlSW50ZXJmYWNlSW5pdCk6IE1vdmVk
IHRvIHRoZSBib3R0b20uCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZUltYWdlLmg6IFJlbW92ZWQgYWxsCisgICAgICAgIGZ1bmN0aW9ucyBidXQg
dGhlIG9uZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBpbnRlcmZhY2UgZnJvbSBoZXJlLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQWRkU2VsZWN0aW9uKTog
TWFkZSB0aGlzIGZ1bmN0aW9uIHN0YXRpYy4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxl
Y3Rpb25DbGVhclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNl
bGVjdGlvblJlZlNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVNl
bGVjdGlvbkdldFNlbGVjdGlvbkNvdW50KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlU2VsZWN0aW9uSXNDaGlsZFNlbGVjdGVkKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlU2VsZWN0aW9uUmVtb3ZlU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlU2VsZWN0aW9uU2VsZWN0QWxsU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uSW50ZXJmYWNlSW5pdCk6IE1vdmVkIHRvIHRoZSBib3R0
b20uCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVNlbGVjdGlvbi5oOiBSZW1vdmVkIGFsbAorICAgICAgICBmdW5jdGlvbnMgYnV0IHRoZSBvbmUg
Zm9yIGluaXRpYWxpemluZyB0aGUgaW50ZXJmYWNlIGZyb20gaGVyZS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHA6CisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVSZWZBdCk6IE1hZGUgdGhpcyBmdW5jdGlvbiBzdGF0
aWMuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJbmRleEF0KTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5BdEluZGV4KTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dBdEluZGV4KTogRGl0dG8uCisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROQ29sdW1ucyk6IERpdHRvLgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvd3MpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVUYWJsZUdldENvbHVtbkV4dGVudEF0KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVGFibGVHZXRSb3dFeHRlbnRBdCk6IERpdHRvLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVyKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXRSb3dIZWFkZXIpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUdldENhcHRpb24pOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUdldENvbHVtbkRlc2NyaXB0aW9uKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRSb3dEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVRhYmxlSW50ZXJmYWNlSW5pdCk6IE1vdmVkIHRvIHRoZSBib3R0b20uCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmg6IFJlbW92ZWQg
YWxsCisgICAgICAgIGZ1bmN0aW9ucyBidXQgdGhlIG9uZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBp
bnRlcmZhY2UgZnJvbSBoZXJlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAodGV4dEZvclJlbmRlcmVyKTog
TWFkZSB0aGlzIGZ1bmN0aW9uIHN0YXRpYy4KKyAgICAgICAgKHRleHRGb3JPYmplY3QpOiBEaXR0
by4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCk6IERpdHRvLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0ZXJPZmZzZXQpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zmc2V0KTogRGl0dG8uCisgICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQXRPZmZzZXQpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0UnVuQXR0cmlidXRlcyk6IERpdHRvLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXREZWZhdWx0QXR0cmlidXRlcyk6IERpdHRvLgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJFeHRlbnRzKTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50cyk6IERpdHRvLgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJDb3VudCk6IERpdHRvLgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRPZmZzZXRBdFBvaW50KTogRGl0dG8uCisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE5TZWxlY3Rpb25zKTogRGl0dG8uCisgICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVRleHRBZGRTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlVGV4dFJlbW92ZVNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVRleHRTZXRDYXJldE9mZnNldCk6IERpdHRvLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRl
eHRJbnRlcmZhY2VJbml0KTogTW92ZWQgdG8gdGhlIGJvdHRvbS4KKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oOiBSZW1vdmVkIGFsbAor
ICAgICAgICBmdW5jdGlvbnMgYnV0IHRoZSBvbmUgZm9yIGluaXRpYWxpemluZyB0aGUgaW50ZXJm
YWNlIGZyb20gaGVyZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VWYWx1ZS5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVH
ZXRDdXJyZW50VmFsdWUpOiBNYWRlIHRoaXMgZnVuY3Rpb24gc3RhdGljLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVZhbHVlR2V0TWF4aW11bVZhbHVlKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVWYWx1ZVNldEN1cnJlbnRWYWx1ZSk6IERpdHRvLgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11bUluY3JlbWVudCk6IERpdHRvLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdCk6IE1vdmVkIHRvIHRoZSBib3R0b20uCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVl
Lmg6IFJlbW92ZWQgYWxsCisgICAgICAgIGZ1bmN0aW9ucyBidXQgdGhlIG9uZSBmb3IgaW5pdGlh
bGl6aW5nIHRoZSBpbnRlcmZhY2UgZnJvbSBoZXJlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUdldE5hbWUpOiBSZXBsYWNlIGNhbGwgdG8KKyAgICAgICAgd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRUZXh0IHdpdGggYXRrX3RleHRfZ2V0X3RleHQuCisKKzIwMTItMDEtMjQgIE1hcmlv
IFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFJl
ZmFjdG9yIEdUSydzIGFjY2Vzc2liaWxpdGl0eSBjb2RlIHRvIGJlIG1vcmUgbW9kdWxhcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3ODMKKwogICAg
ICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCiAKICAgICAgICAgRml4IGNvZGluZyBz
dHlsZSBpbiB0aGUgQVRLIEFjY2Vzc2liaWxpdHlPYmplY3Qgd3JhcHBlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VBY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAKaW5kZXggNjgwZjcxMzAzZDNjMTcyOTQzNzhlMmJk
Zjk0OTIzZGMxMDZiNzg1My4uMzcwYjRiYmEyNmZjZmY5NjE3Y2JlNDk4N2I4MTg0YTMyOGVjOTdl
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAKQEAgLTQ2LDQyICs0
Niw0MiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtBY3Rpb24qIGFjdGlv
bikKICAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV0VC
S0lUX0FDQ0VTU0lCTEUoYWN0aW9uKSk7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJsZUFjdGlv
bkludGVyZmFjZUluaXQoQXRrQWN0aW9uSWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5kb19h
Y3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uRG9BY3Rpb247Ci0gICAgaWZhY2UtPmdldF9u
X2FjdGlvbnMgPSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0TkFjdGlvbnM7Ci0gICAgaWZhY2Ut
PmdldF9kZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXREZXNjcmlwdGlvbjsK
LSAgICBpZmFjZS0+Z2V0X2tleWJpbmRpbmcgPSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0S2V5
YmluZGluZzsKLSAgICBpZmFjZS0+Z2V0X25hbWUgPSB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0
TmFtZTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUFjdGlvbkRvQWN0aW9uKEF0a0Fj
dGlvbiogYWN0aW9uLCBnaW50IGluZGV4KQorc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2li
bGVBY3Rpb25Eb0FjdGlvbihBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpbmRleCkKIHsKICAgICBn
X3JldHVybl92YWxfaWZfZmFpbCghaW5kZXgsIEZBTFNFKTsKICAgICByZXR1cm4gY29yZShhY3Rp
b24pLT5wZXJmb3JtRGVmYXVsdEFjdGlvbigpOwogfQogCi1naW50IHdlYmtpdEFjY2Vzc2libGVB
Y3Rpb25HZXROQWN0aW9ucyhBdGtBY3Rpb24qKQorc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJs
ZUFjdGlvbkdldE5BY3Rpb25zKEF0a0FjdGlvbiopCiB7CiAgICAgcmV0dXJuIDE7CiB9CiAKLWNv
bnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0RGVzY3JpcHRpb24oQXRrQWN0aW9u
KiwgZ2ludCkKK3N0YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldERl
c2NyaXB0aW9uKEF0a0FjdGlvbiosIGdpbnQpCiB7CiAgICAgLy8gVE9ETzogTmVlZCBhIHdheSB0
byBwcm92aWRlL2xvY2FsaXplIGFjdGlvbiBkZXNjcmlwdGlvbnMuCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gIiI7CiB9CiAKLWNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxl
QWN0aW9uR2V0S2V5YmluZGluZyhBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpbmRleCkKK3N0YXRp
YyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldEtleWJpbmRpbmcoQXRrQWN0
aW9uKiBhY3Rpb24sIGdpbnQgaW5kZXgpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWlu
ZGV4LCAwKTsKICAgICAvLyBGSVhNRTogQ29uc3RydWN0IGEgcHJvcGVyIGtleWJpbmRpbmcgc3Ry
aW5nLgogICAgIHJldHVybiByZXR1cm5TdHJpbmcoY29yZShhY3Rpb24pLT5hY2Nlc3NLZXkoKS5z
dHJpbmcoKSk7CiB9CiAKLWNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0TmFt
ZShBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCBpbmRleCkKK3N0YXRpYyBjb25zdCBnY2hhciogd2Vi
a2l0QWNjZXNzaWJsZUFjdGlvbkdldE5hbWUoQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQgaW5kZXgp
CiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWluZGV4LCAwKTsKICAgICByZXR1cm4gcmV0
dXJuU3RyaW5nKGNvcmUoYWN0aW9uKS0+YWN0aW9uVmVyYigpKTsKIH0KKwordm9pZCB3ZWJraXRB
Y2Nlc3NpYmxlQWN0aW9uSW50ZXJmYWNlSW5pdChBdGtBY3Rpb25JZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPmRvX2FjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25Eb0FjdGlvbjsKKyAg
ICBpZmFjZS0+Z2V0X25fYWN0aW9ucyA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXROQWN0aW9u
czsKKyAgICBpZmFjZS0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdl
dERlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRfa2V5YmluZGluZyA9IHdlYmtpdEFjY2Vzc2li
bGVBY3Rpb25HZXRLZXliaW5kaW5nOworICAgIGlmYWNlLT5nZXRfbmFtZSA9IHdlYmtpdEFjY2Vz
c2libGVBY3Rpb25HZXROYW1lOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5o
CmluZGV4IDczY2E1NzBjNjZhMzU3MTk4ZWYxZGEwMzYwMWIyZDJkMmEwZDM4YWMuLjNiY2JkZjU4
YjlkZWE2ZmU3YzhhMTY2YjY3NDlmYjBkNTNjZjA3OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlQWN0aW9uLmgKQEAgLTI1LDEwICsyNSw1IEBACiAjaW5jbHVkZSA8YXRrL2F0ay5oPgog
CiB2b2lkIHdlYmtpdEFjY2Vzc2libGVBY3Rpb25JbnRlcmZhY2VJbml0KEF0a0FjdGlvbklmYWNl
Kik7Ci1nYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uRG9BY3Rpb24oQXRrQWN0aW9uKiwg
Z2ludCBpbmRleCk7Ci1naW50IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXROQWN0aW9ucyhBdGtB
Y3Rpb24qKTsKLWNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0RGVzY3JpcHRp
b24oQXRrQWN0aW9uKiwgZ2ludCBpbmRleCk7Ci1jb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJs
ZUFjdGlvbkdldEtleWJpbmRpbmcoQXRrQWN0aW9uKiwgZ2ludCBpbmRleCk7Ci1jb25zdCBnY2hh
ciogd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldE5hbWUoQXRrQWN0aW9uKiwgZ2ludCBpbmRleCk7
CiAKICNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VDb21wb25lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHAKaW5kZXggYWMwN2MxYzQ4MTY3MWQ1
YzgxY2UyODQ3YzQ5MTBhODdkZTZhZThiNy4uYTQ5NGZlZWEwNzI3MjU4MDZjNDZmYTEzMGJkNGI1
Nzg3ODMyODc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5j
cHAKQEAgLTY0LDE0ICs2NCw3IEBAIHN0YXRpYyBJbnRQb2ludCBhdGtUb0NvbnRlbnRzKEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a0Nvb3JkVHlwZSBjb29yCiAgICAgcmV0dXJu
IHBvczsKIH0KIAotdm9pZCB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50SW50ZXJmYWNlSW5pdChB
dGtDb21wb25lbnRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPnJlZl9hY2Nlc3NpYmxlX2F0
X3BvaW50ID0gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJlZkFjY2Vzc2libGVBdFBvaW50Owot
ICAgIGlmYWNlLT5nZXRfZXh0ZW50cyA9IHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHZXRFeHRl
bnRzOwotICAgIGlmYWNlLT5ncmFiX2ZvY3VzID0gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdy
YWJGb2N1czsKLX0KLQotQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNj
ZXNzaWJsZUF0UG9pbnQoQXRrQ29tcG9uZW50KiBjb21wb25lbnQsIGdpbnQgeCwgZ2ludCB5LCBB
dGtDb29yZFR5cGUgY29vcmRUeXBlKQorc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJs
ZUNvbXBvbmVudFJlZkFjY2Vzc2libGVBdFBvaW50KEF0a0NvbXBvbmVudCogY29tcG9uZW50LCBn
aW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKIHsKICAgICBJbnRQb2ludCBw
b3MgPSBhdGtUb0NvbnRlbnRzKGNvcmUoY29tcG9uZW50KSwgY29vcmRUeXBlLCB4LCB5KTsKIApA
QCAtODIsMTQgKzc1LDIxIEBAIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJl
ZkFjY2Vzc2libGVBdFBvaW50KEF0a0NvbXBvbmVudCogY29tcG9uZW50CiAgICAgcmV0dXJuIHRh
cmdldC0+d3JhcHBlcigpOwogfQogCi12b2lkIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHZXRF
eHRlbnRzKEF0a0NvbXBvbmVudCogY29tcG9uZW50LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3
aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQorc3RhdGljIHZvaWQg
d2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdldEV4dGVudHMoQXRrQ29tcG9uZW50KiBjb21wb25l
bnQsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3Jk
VHlwZSBjb29yZFR5cGUpCiB7CiAgICAgSW50UmVjdCByZWN0ID0gY29yZShjb21wb25lbnQpLT5l
bGVtZW50UmVjdCgpOwogICAgIGNvbnRlbnRzUmVsYXRpdmVUb0F0a0Nvb3JkaW5hdGVUeXBlKGNv
cmUoY29tcG9uZW50KSwgY29vcmRUeXBlLCByZWN0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IAotZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyhBdGtDb21wb25l
bnQqIGNvbXBvbmVudCkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50
R3JhYkZvY3VzKEF0a0NvbXBvbmVudCogY29tcG9uZW50KQogewogICAgIGNvcmUoY29tcG9uZW50
KS0+c2V0Rm9jdXNlZCh0cnVlKTsKICAgICByZXR1cm4gY29yZShjb21wb25lbnQpLT5pc0ZvY3Vz
ZWQoKTsKIH0KKwordm9pZCB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50SW50ZXJmYWNlSW5pdChB
dGtDb21wb25lbnRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPnJlZl9hY2Nlc3NpYmxlX2F0
X3BvaW50ID0gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFJlZkFjY2Vzc2libGVBdFBvaW50Owor
ICAgIGlmYWNlLT5nZXRfZXh0ZW50cyA9IHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHZXRFeHRl
bnRzOworICAgIGlmYWNlLT5ncmFiX2ZvY3VzID0gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdy
YWJGb2N1czsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuaAppbmRl
eCBhNzk1ZTMwZjRlYWYyODMzNzQ3ZDdiZTRkYjY1NGIyNzZjMmM0MmU2Li4wMTM2MmFiZDI2MDQ2
ODlmMjIwMzUwNDM4NTI3MTg5NzUwZmQ3YjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUNvbXBvbmVudC5oCkBAIC0yNSw4ICsyNSw1IEBACiAjaW5jbHVkZSA8YXRrL2F0ay5oPgog
CiB2b2lkIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0KEF0a0NvbXBvbmVu
dElmYWNlKik7Ci1BdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRSZWZBY2Nlc3Np
YmxlQXRQb2ludChBdGtDb21wb25lbnQqLCBnaW50IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlKTsK
LXZvaWQgd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdldEV4dGVudHMoQXRrQ29tcG9uZW50Kiwg
Z2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBl
KTsKLWdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRHcmFiRm9jdXMoQXRrQ29tcG9u
ZW50Kik7CiAKICNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29tcG9uZW50X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuY3BwCmluZGV4IDA1ZTVhYTA1
MGVlMjYwZjc2ZTZjYTY2M2ViZWU5ZWM1YzVlYmM3MjAuLmE3YmViMTVkMmRlODI2YzgzMDhiZWJk
OTc4OWExZmYzZWRiYzYyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3Vt
ZW50LmNwcApAQCAtNjcsMTkgKzY3LDEyIEBAIHN0YXRpYyBjb25zdCBnY2hhciogZG9jdW1lbnRB
dHRyaWJ1dGVWYWx1ZShBdGtEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IGdjaGFyKiBhCiAgICAg
cmV0dXJuIDA7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJmYWNlSW5p
dChBdGtEb2N1bWVudElmYWNlKiBpZmFjZSkKLXsKLSAgICBpZmFjZS0+Z2V0X2RvY3VtZW50X2F0
dHJpYnV0ZV92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZVZhbHVl
OwotICAgIGlmYWNlLT5nZXRfZG9jdW1lbnRfYXR0cmlidXRlcyA9IHdlYmtpdEFjY2Vzc2libGVE
b2N1bWVudEdldEF0dHJpYnV0ZXM7Ci0gICAgaWZhY2UtPmdldF9kb2N1bWVudF9sb2NhbGUgPSB3
ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRMb2NhbGU7Ci19Ci0KLWNvbnN0IGdjaGFyKiB3ZWJr
aXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVWYWx1ZShBdGtEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IGdjaGFyKiBhdHRyaWJ1dGUpCitzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZVZhbHVlKEF0a0RvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgZ2NoYXIqIGF0dHJpYnV0ZSkKIHsKICAgICByZXR1cm4gZG9jdW1lbnRBdHRyaWJ1dGVW
YWx1ZShkb2N1bWVudCwgYXR0cmlidXRlKTsKIH0KIAotQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRB
Y2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVzKEF0a0RvY3VtZW50KiBkb2N1bWVudCkKK3N0
YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0
ZXMoQXRrRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEF0a0F0dHJpYnV0ZVNldCogYXR0cmli
dXRlU2V0ID0gMDsKICAgICBjb25zdCBnY2hhciogYXR0cmlidXRlc1tdID0geyAiRG9jVHlwZSIs
ICJFbmNvZGluZyIsICJVUkkiIH07CkBAIC05Myw3ICs4Niw3IEBAIEF0a0F0dHJpYnV0ZVNldCog
d2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0QXR0cmlidXRlcyhBdGtEb2N1bWVudCogZG9jdW1l
bnQpCiAgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDsKIH0KIAotY29uc3QgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVEb2N1bWVudEdldExvY2FsZShBdGtEb2N1bWVudCogZG9jdW1lbnQpCitzdGF0aWMg
Y29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldExvY2FsZShBdGtEb2N1bWVu
dCogZG9jdW1lbnQpCiB7CiAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGZhbGwgYmFjayBvbiBsYW5n
IHhtbDpsYW5nIHdoZW4gdGhlIGZvbGxvd2luZyBjb21lcyB1cCBlbXB0eT8KICAgICBTdHJpbmcg
bGFuZ3VhZ2UgPSBjb3JlKGRvY3VtZW50KS0+bGFuZ3VhZ2UoKTsKQEAgLTEwMiwzICs5NSwxMCBA
QCBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0TG9jYWxlKEF0a0RvY3Vt
ZW50KiBkb2N1bWVudCkKIAogICAgIHJldHVybiAwOwogfQorCit2b2lkIHdlYmtpdEFjY2Vzc2li
bGVEb2N1bWVudEludGVyZmFjZUluaXQoQXRrRG9jdW1lbnRJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmdldF9kb2N1bWVudF9hdHRyaWJ1dGVfdmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlRG9j
dW1lbnRHZXRBdHRyaWJ1dGVWYWx1ZTsKKyAgICBpZmFjZS0+Z2V0X2RvY3VtZW50X2F0dHJpYnV0
ZXMgPSB3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVzOworICAgIGlmYWNlLT5n
ZXRfZG9jdW1lbnRfbG9jYWxlID0gd2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0TG9jYWxlOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuaAppbmRleCBlOTQ5YTk1MzQy
YWRhODg2OTg4NTczMjQ5MzdkOWIzY2IxOGNlMzZhLi40YjlmNDBmNWQyZmQzNjMyZDk1M2FiMTlm
N2MxNWM2M2RmYjZlNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQu
aApAQCAtMjUsOCArMjUsNSBAQAogI2luY2x1ZGUgPGF0ay9hdGsuaD4KIAogdm9pZCB3ZWJraXRB
Y2Nlc3NpYmxlRG9jdW1lbnRJbnRlcmZhY2VJbml0KEF0a0RvY3VtZW50SWZhY2UqKTsKLWNvbnN0
IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVWYWx1ZShBdGtEb2N1
bWVudCosIGNvbnN0IGdjaGFyKik7Ci1BdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVE
b2N1bWVudEdldEF0dHJpYnV0ZXMoQXRrRG9jdW1lbnQqKTsKLWNvbnN0IGdjaGFyKiB3ZWJraXRB
Y2Nlc3NpYmxlRG9jdW1lbnRHZXRMb2NhbGUoQXRrRG9jdW1lbnQqKTsKIAogI2VuZGlmIC8vIFdl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwCmluZGV4IGNjMjYyMGQwNmIwODYyMjhiYWM5OTg1
YWY2ZDA4NDI0MDZkNWU3OGEuLjY3NzM0NDBmNDM4NGQ4NmZiOWViZGYyYjU5NjI0ODdhMTZjNDI2
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3Bw
CkBAIC00NywzMCArNDcsMTkgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRr
RWRpdGFibGVUZXh0KiB0ZXh0KQogICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNz
aWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSk7CiB9CiAKLXZvaWQgd2Via2l0
QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEludGVyZmFjZUluaXQoQXRrRWRpdGFibGVUZXh0SWZhY2Uq
IGlmYWNlKQotewotICAgIGlmYWNlLT5zZXRfcnVuX2F0dHJpYnV0ZXMgPSB3ZWJraXRBY2Nlc3Np
YmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRlczsKLSAgICBpZmFjZS0+c2V0X3RleHRfY29u
dGVudHMgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0VGV4dENvbnRlbnRzOwotICAg
IGlmYWNlLT5pbnNlcnRfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRJbnNlcnRU
ZXh0OwotICAgIGlmYWNlLT5jb3B5X3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0
Q29weVRleHQ7Ci0gICAgaWZhY2UtPmN1dF90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxl
VGV4dEN1dFRleHQ7Ci0gICAgaWZhY2UtPmRlbGV0ZV90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZUVk
aXRhYmxlVGV4dERlbGV0ZVRleHQ7Ci0gICAgaWZhY2UtPnBhc3RlX3RleHQgPSB3ZWJraXRBY2Nl
c3NpYmxlRWRpdGFibGVUZXh0UGFzdGVUZXh0OwotfQotCi1nYm9vbGVhbiB3ZWJraXRBY2Nlc3Np
YmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRlcyhBdGtFZGl0YWJsZVRleHQqLCBBdGtBdHRy
aWJ1dGVTZXQqLCBnaW50LCBnaW50KQorc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVF
ZGl0YWJsZVRleHRTZXRSdW5BdHRyaWJ1dGVzKEF0a0VkaXRhYmxlVGV4dCosIEF0a0F0dHJpYnV0
ZVNldCosIGdpbnQsIGdpbnQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4g
RkFMU0U7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFNldFRleHRDb250
ZW50cyhBdGtFZGl0YWJsZVRleHQqIHRleHQsIGNvbnN0IGdjaGFyKiBzdHJpbmcpCitzdGF0aWMg
dm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0VGV4dENvbnRlbnRzKEF0a0VkaXRh
YmxlVGV4dCogdGV4dCwgY29uc3QgZ2NoYXIqIHN0cmluZykKIHsKICAgICAvLyBGSVhNRTogc3Ry
aW5nIG51bGxjaGVjaz8KICAgICBjb3JlKHRleHQpLT5zZXRWYWx1ZShTdHJpbmc6OmZyb21VVEY4
KHN0cmluZykpOwogfQogCi12b2lkIHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRJbnNlcnRU
ZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgY29uc3QgZ2NoYXIqIHN0cmluZywgZ2ludCBsZW5n
dGgsIGdpbnQqIHBvc2l0aW9uKQorc3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxl
VGV4dEluc2VydFRleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBjb25zdCBnY2hhciogc3RyaW5n
LCBnaW50IGxlbmd0aCwgZ2ludCogcG9zaXRpb24pCiB7CiAgICAgLy8gRklYTUU6IHN0cmluZyBu
dWxsY2hlY2s/CiAKQEAgLTkwLDE3ICs3OSwxNyBAQCB2b2lkIHdlYmtpdEFjY2Vzc2libGVFZGl0
YWJsZVRleHRJbnNlcnRUZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgY29uc3QgZ2NoYXIqCiAg
ICAgICAgICpwb3NpdGlvbiArPSBsZW5ndGg7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJsZUVk
aXRhYmxlVGV4dENvcHlUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGdpbnQsIGdpbnQpCitzdGF0aWMg
dm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q29weVRleHQoQXRrRWRpdGFibGVUZXh0
KiwgZ2ludCwgZ2ludCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIHdlYmtp
dEFjY2Vzc2libGVFZGl0YWJsZVRleHRDdXRUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGdpbnQsIGdp
bnQpCitzdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q3V0VGV4dChBdGtF
ZGl0YWJsZVRleHQqLCBnaW50LCBnaW50KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dERlbGV0ZVRleHQoQXRrRWRpdGFibGVU
ZXh0KiB0ZXh0LCBnaW50IHN0YXJ0UG9zLCBnaW50IGVuZFBvcykKK3N0YXRpYyB2b2lkIHdlYmtp
dEFjY2Vzc2libGVFZGl0YWJsZVRleHREZWxldGVUZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4dCwg
Z2ludCBzdGFydFBvcywgZ2ludCBlbmRQb3MpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCA9IGNvcmUodGV4dCk7CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCBp
biBXZWJDb3JlCkBAIC0xMTYsNyArMTA1LDE4IEBAIHZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRh
YmxlVGV4dERlbGV0ZVRleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0UG9zCiAg
ICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT5wZXJmb3JtRGVsZXRlKCk7CiB9CiAKLXZv
aWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFBhc3RlVGV4dChBdGtFZGl0YWJsZVRleHQq
LCBnaW50KQorc3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFBhc3RlVGV4
dChBdGtFZGl0YWJsZVRleHQqLCBnaW50KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisK
K3ZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEludGVyZmFjZUluaXQoQXRrRWRpdGFi
bGVUZXh0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5zZXRfcnVuX2F0dHJpYnV0ZXMgPSB3
ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRlczsKKyAgICBpZmFjZS0+
c2V0X3RleHRfY29udGVudHMgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0VGV4dENv
bnRlbnRzOworICAgIGlmYWNlLT5pbnNlcnRfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVFZGl0YWJs
ZVRleHRJbnNlcnRUZXh0OworICAgIGlmYWNlLT5jb3B5X3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxl
RWRpdGFibGVUZXh0Q29weVRleHQ7CisgICAgaWZhY2UtPmN1dF90ZXh0ID0gd2Via2l0QWNjZXNz
aWJsZUVkaXRhYmxlVGV4dEN1dFRleHQ7CisgICAgaWZhY2UtPmRlbGV0ZV90ZXh0ID0gd2Via2l0
QWNjZXNzaWJsZUVkaXRhYmxlVGV4dERlbGV0ZVRleHQ7CisgICAgaWZhY2UtPnBhc3RlX3RleHQg
PSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0UGFzdGVUZXh0OworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZUVkaXRhYmxlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oCmluZGV4IDk3ZDEyNjU3MGRlZmRhOGM3
MGQ4MjM2ZmExYTc0NzA1OGFmOTQxNWQuLjk5ZjY5NGQ2MDc4MDU4ZTQxNzc3YTMwZjQyNDRkZjJh
MDc5NzNhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0
LmgKQEAgLTI1LDEyICsyNSw1IEBACiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogCiB2b2lkIHdlYmtp
dEFjY2Vzc2libGVFZGl0YWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a0VkaXRhYmxlVGV4dElmYWNl
Kik7Ci1nYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0UnVuQXR0cmlidXRl
cyhBdGtFZGl0YWJsZVRleHQqLCBBdGtBdHRyaWJ1dGVTZXQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBn
aW50IGVuZE9mZnNldCk7Ci12b2lkIHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRTZXRUZXh0
Q29udGVudHMoQXRrRWRpdGFibGVUZXh0KiwgY29uc3QgZ2NoYXIqKTsKLXZvaWQgd2Via2l0QWNj
ZXNzaWJsZUVkaXRhYmxlVGV4dEluc2VydFRleHQoQXRrRWRpdGFibGVUZXh0KiwgY29uc3QgZ2No
YXIqLCBnaW50IGxlbmd0aCwgZ2ludCogcG9zaXRpb24pOwotdm9pZCB3ZWJraXRBY2Nlc3NpYmxl
RWRpdGFibGVUZXh0Q29weVRleHQoQXRrRWRpdGFibGVUZXh0KiwgZ2ludCBzdGFydFBvcywgZ2lu
dCBlbmRQb3MpOwotdm9pZCB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q3V0VGV4dChBdGtF
ZGl0YWJsZVRleHQqLCBnaW50IHN0YXJ0UG9zLCBnaW50IGVuZFBvcyk7Ci12b2lkIHdlYmtpdEFj
Y2Vzc2libGVFZGl0YWJsZVRleHREZWxldGVUZXh0KEF0a0VkaXRhYmxlVGV4dCosIGdpbnQgc3Rh
cnRQb3MsIGdpbnQgZW5kUG9zKTsKLXZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dFBh
c3RlVGV4dChBdGtFZGl0YWJsZVRleHQqLCBnaW50IHBvc2l0aW9uKTsKIAogI2VuZGlmIC8vIFdl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVy
bGlua0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuY3BwCmluZGV4IDQ3MGU3Y2FkMmU0ZDhhMDEx
MzU3YmZkMmI0YTEwYmVjOWRiZTM0NjcuLmViNjBlNGY0NGY4ZmY1MmVhNGYwZDlhYjdjMjE3ZTE1
YTJiOGZiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5r
SW1wbC5jcHAKQEAgLTI2LDEzICsyNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBz
dGF0aWMgR1F1YXJrIGh5cGVybGlua09iamVjdFF1YXJrID0gMDsKIAotdm9pZCB3ZWJraXRBY2Nl
c3NpYmxlSHlwZXJsaW5rSW1wbEludGVyZmFjZUluaXQoQXRrSHlwZXJsaW5rSW1wbElmYWNlKiBp
ZmFjZSkKLXsKLSAgICBpZmFjZS0+Z2V0X2h5cGVybGluayA9IHdlYmtpdEFjY2Vzc2libGVIeXBl
cmxpbmtJbXBsR2V0SHlwZXJsaW5rOwotICAgIGh5cGVybGlua09iamVjdFF1YXJrID0gZ19xdWFy
a19mcm9tX3N0YXRpY19zdHJpbmcoIndlYmtpdC1hY2Nlc3NpYmxlLWh5cGVybGluay1vYmplY3Qi
KTsKLX0KLQotQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5
cGVybGluayhBdGtIeXBlcmxpbmtJbXBsKiBoeXBlcmxpbmspCitzdGF0aWMgQXRrSHlwZXJsaW5r
KiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluayhBdGtIeXBlcmxpbmtJ
bXBsKiBoeXBlcmxpbmspCiB7CiAgICAgQXRrSHlwZXJsaW5rKiBoeXBlcmxpbmtPYmplY3QgPSBB
VEtfSFlQRVJMSU5LKGdfb2JqZWN0X2dldF9xZGF0YShHX09CSkVDVChoeXBlcmxpbmspLCBoeXBl
cmxpbmtPYmplY3RRdWFyaykpOwogICAgIGlmICghaHlwZXJsaW5rT2JqZWN0KSB7CkBAIC00MSwz
ICszNSw5IEBAIEF0a0h5cGVybGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0ltcGxHZXRI
eXBlcmxpbmsoQXRrSHlwZXJsaW5rSW1wbCogaHlwZXJsCiAgICAgfQogICAgIHJldHVybiBoeXBl
cmxpbmtPYmplY3Q7CiB9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0ltcGxJbnRl
cmZhY2VJbml0KEF0a0h5cGVybGlua0ltcGxJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmdl
dF9oeXBlcmxpbmsgPSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluazsK
KyAgICBoeXBlcmxpbmtPYmplY3RRdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJ3
ZWJraXQtYWNjZXNzaWJsZS1oeXBlcmxpbmstb2JqZWN0Iik7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlw
ZXJsaW5rSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuaAppbmRleCA3NmVjOWZiOTM4N2NjNzM1NDRj
MzEzNmQxN2EzNWE0N2EyZGYxZjUwLi5kY2I0MDIyZDExNzViODcxZjk2MDgxNGUzNzk1MmNjOWMy
ZDdlZTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBs
LmgKQEAgLTIzLDYgKzIzLDUgQEAKICNpbmNsdWRlIDxhdGsvYXRrLmg+CiAKIHZvaWQgd2Via2l0
QWNjZXNzaWJsZUh5cGVybGlua0ltcGxJbnRlcmZhY2VJbml0KEF0a0h5cGVybGlua0ltcGxJZmFj
ZSopOwotQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVy
bGluayhBdGtIeXBlcmxpbmtJbXBsKik7CiAKICNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlSHlwZXJsaW5rSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBl
cnRleHQuY3BwCmluZGV4IGZiZTQ0ZDgzYTdlNWM5MzBjMDIzZDU0MDhiMjBkZGYzODM0MWIyM2Iu
LjA4Zjc2NzhhMTE2MzI3YmJkMTRhZDQxNmFmZWY4MDlmMThkNDEzODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VI
eXBlcnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuY3BwCkBAIC0zMywxNCArMzMsNyBAQCBzdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtIeXBlcnRleHQqIGh5cGVydGV4dCkKICAg
ICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoV0VCS0lUX0FD
Q0VTU0lCTEUoaHlwZXJ0ZXh0KSk7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4
dEludGVyZmFjZUluaXQoQXRrSHlwZXJ0ZXh0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5n
ZXRfbGluayA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rOwotICAgIGlmYWNlLT5n
ZXRfbl9saW5rcyA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3M7Ci0gICAgaWZh
Y2UtPmdldF9saW5rX2luZGV4ID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRl
eDsKLX0KLQotQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluayhB
dGtIeXBlcnRleHQqIGh5cGVydGV4dCwgZ2ludCBpbmRleCkKK3N0YXRpYyBBdGtIeXBlcmxpbmsq
IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0
LCBnaW50IGluZGV4KQogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmUoaHlwZXJ0ZXh0KS0+Y2hpbGRyZW4oKTsKICAg
ICBpZiAoaW5kZXggPCAwIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gY2hpbGRy
ZW4uc2l6ZSgpKQpAQCAtNjUsNyArNTgsNyBAQCBBdGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2li
bGVIeXBlcnRleHRHZXRMaW5rKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0LCBnaW50IGluZAogICAg
IHJldHVybiAwOwogfQogCi1naW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3Mo
QXRrSHlwZXJ0ZXh0KiBoeXBlcnRleHQpCitzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlw
ZXJ0ZXh0R2V0TkxpbmtzKEF0a0h5cGVydGV4dCogaHlwZXJ0ZXh0KQogewogICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmUo
aHlwZXJ0ZXh0KS0+Y2hpbGRyZW4oKTsKICAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKQEAgLTg0
LDcgKzc3LDcgQEAgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKEF0a0h5
cGVydGV4dCogaHlwZXJ0ZXh0KQogICAgIHJldHVybiBsaW5rc0ZvdW5kOwogfQogCi1naW50IHdl
YmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rSW5kZXgoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRl
eHQsIGdpbnQgY2hhckluZGV4KQorc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4
dEdldExpbmtJbmRleChBdGtIeXBlcnRleHQqIGh5cGVydGV4dCwgZ2ludCBjaGFySW5kZXgpCiB7
CiAgICAgc2l6ZV90IGxpbmtzQ291bnQgPSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0Tkxp
bmtzKGh5cGVydGV4dCk7CiAgICAgaWYgKCFsaW5rc0NvdW50KQpAQCAtMTAzLDMgKzk2LDEwIEBA
IGdpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRleChBdGtIeXBlcnRleHQq
IGh5cGVydGV4dCwgZ2ludCBjaGFySW5kCiAgICAgLy8gTm90IGZvdW5kIGlmIHJlYWNoZWQKICAg
ICByZXR1cm4gLTE7CiB9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEludGVyZmFj
ZUluaXQoQXRrSHlwZXJ0ZXh0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5nZXRfbGluayA9
IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rOworICAgIGlmYWNlLT5nZXRfbl9saW5r
cyA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3M7CisgICAgaWZhY2UtPmdldF9s
aW5rX2luZGV4ID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRleDsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VIeXBlcnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuaAppbmRleCBhMmMyMWQ4ZmYxOGU5
ODkzYTcxZTdmMDY0NWI2M2NjNzZmODIwYTJjLi4yYWIyMzYwYzUzNzc5ODE5NDYxZDE0YTYyZTA5
NzI1YjNmNzUyNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5o
CkBAIC0yMyw4ICsyMyw1IEBACiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogCiB2b2lkIHdlYmtpdEFj
Y2Vzc2libGVIeXBlcnRleHRJbnRlcmZhY2VJbml0KEF0a0h5cGVydGV4dElmYWNlKik7Ci1BdGtI
eXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rKEF0a0h5cGVydGV4dCos
IGdpbnQgaW5kZXgpOwotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKEF0
a0h5cGVydGV4dCopOwotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGlua0luZGV4
KEF0a0h5cGVydGV4dCosIGdpbnQgY2hhckluZGV4KTsKIAogI2VuZGlmIC8vIFdlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VIeXBlcnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VJbWFn
ZS5jcHAKaW5kZXggNTg0ZDI0NDYzZWVlOTE0OTA5N2U2MTgwMjQxOTRhMzRiNDUxYzU0MS4uNGRl
YjEzN2ZlN2EwOTc2NmNhOWFhYWY2ZmY2ODMwY2MyNGQwMGEwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSW1hZ2UuY3BwCkBAIC00NiwyNSArNDYsMTggQEAgc3RhdGljIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmUoQXRrSW1hZ2UqIGltYWdlKQogICAgIHJldHVybiB3ZWJraXRBY2Nl
c3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShpbWFnZSkpOwog
fQogCi12b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUludGVyZmFjZUluaXQoQXRrSW1hZ2VJZmFj
ZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF9pbWFnZV9wb3NpdGlvbiA9IHdlYmtpdEFjY2Vz
c2libGVJbWFnZUdldEltYWdlUG9zaXRpb247Ci0gICAgaWZhY2UtPmdldF9pbWFnZV9kZXNjcmlw
dGlvbiA9IHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlRGVzY3JpcHRpb247Ci0gICAgaWZh
Y2UtPmdldF9pbWFnZV9zaXplID0gd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VTaXplOwot
fQotCi12b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlUG9zaXRpb24oQXRrSW1hZ2Uq
IGltYWdlLCBnaW50KiB4LCBnaW50KiB5LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQorc3RhdGlj
IHZvaWQgd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VQb3NpdGlvbihBdGtJbWFnZSogaW1h
Z2UsIGdpbnQqIHgsIGdpbnQqIHksIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUpCiB7CiAgICAgSW50
UmVjdCByZWN0ID0gY29yZShpbWFnZSktPmVsZW1lbnRSZWN0KCk7CiAgICAgY29udGVudHNSZWxh
dGl2ZVRvQXRrQ29vcmRpbmF0ZVR5cGUoY29yZShpbWFnZSksIGNvb3JkVHlwZSwgcmVjdCwgeCwg
eSk7CiB9CiAKLWNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZURlc2Ny
aXB0aW9uKEF0a0ltYWdlKiBpbWFnZSkKK3N0YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNz
aWJsZUltYWdlR2V0SW1hZ2VEZXNjcmlwdGlvbihBdGtJbWFnZSogaW1hZ2UpCiB7CiAgICAgcmV0
dXJuIHJldHVyblN0cmluZyhjb3JlKGltYWdlKS0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkp
OwogfQogCi12b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlU2l6ZShBdGtJbWFnZSog
aW1hZ2UsIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQpCitzdGF0aWMgdm9pZCB3ZWJraXRBY2Nl
c3NpYmxlSW1hZ2VHZXRJbWFnZVNpemUoQXRrSW1hZ2UqIGltYWdlLCBnaW50KiB3aWR0aCwgZ2lu
dCogaGVpZ2h0KQogewogICAgIEludFNpemUgc2l6ZSA9IGNvcmUoaW1hZ2UpLT5zaXplKCk7CiAK
QEAgLTczLDMgKzY2LDEwIEBAIHZvaWQgd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VTaXpl
KEF0a0ltYWdlKiBpbWFnZSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdoCiAgICAgaWYgKGhlaWdo
dCkKICAgICAgICAgKmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CiB9CisKK3ZvaWQgd2Via2l0QWNj
ZXNzaWJsZUltYWdlSW50ZXJmYWNlSW5pdChBdGtJbWFnZUlmYWNlKiBpZmFjZSkKK3sKKyAgICBp
ZmFjZS0+Z2V0X2ltYWdlX3Bvc2l0aW9uID0gd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VQ
b3NpdGlvbjsKKyAgICBpZmFjZS0+Z2V0X2ltYWdlX2Rlc2NyaXB0aW9uID0gd2Via2l0QWNjZXNz
aWJsZUltYWdlR2V0SW1hZ2VEZXNjcmlwdGlvbjsKKyAgICBpZmFjZS0+Z2V0X2ltYWdlX3NpemUg
PSB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZVNpemU7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1h
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VJbWFnZS5oCmluZGV4IGM4Zjc3MjZmNTBlZWFkNDBmNTRmOGE1YTc4NzhmMWZjNjQ5
ZDJlZGQuLmQyYThjNGExOTlhMGM3M2JmMzJjNzYyZjU0OTlkOTViNmU1ZTI5NWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VJbWFnZS5oCkBAIC0yNSw4ICsyNSw1IEBACiAjaW5jbHVkZSA8
YXRrL2F0ay5oPgogCiB2b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUludGVyZmFjZUluaXQoQXRr
SW1hZ2VJZmFjZSopOwotdm9pZCB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZVBvc2l0aW9u
KEF0a0ltYWdlKiwgZ2ludCogeCwgZ2ludCogeSwgQXRrQ29vcmRUeXBlKTsKLWNvbnN0IGdjaGFy
KiB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZURlc2NyaXB0aW9uKEF0a0ltYWdlKik7Ci12
b2lkIHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlU2l6ZShBdGtJbWFnZSosIGdpbnQqIHdp
ZHRoLCBnaW50KiBoZWlnaHQpOwogCiAjZW5kaWYgLy8gV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZUltYWdlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKaW5k
ZXggMjg0YTEwYzg1YzEyODY3NjliNjcyY2M0NWZlOGQ4MTIwNDE5Y2M2YS4uMjMyNTNlZDI0OGEx
OTQyMmVjYjA2MjUwYmMyMzhiMjFiYzc5NzlkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVNlbGVjdGlvbi5jcHAKQEAgLTEyMywxOCArMTIzLDcgQEAgc3RhdGljIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9wdGlvbkZyb21TZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24s
IGdpbnQgaW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0
aW9uSW50ZXJmYWNlSW5pdChBdGtTZWxlY3Rpb25JZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2Ut
PmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQWRkU2VsZWN0aW9uOwot
ICAgIGlmYWNlLT5jbGVhcl9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQ2xl
YXJTZWxlY3Rpb247Ci0gICAgaWZhY2UtPnJlZl9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxl
U2VsZWN0aW9uUmVmU2VsZWN0aW9uOwotICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uX2NvdW50ID0g
d2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkdldFNlbGVjdGlvbkNvdW50OwotICAgIGlmYWNlLT5p
c19jaGlsZF9zZWxlY3RlZCA9IHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25Jc0NoaWxkU2VsZWN0
ZWQ7Ci0gICAgaWZhY2UtPnJlbW92ZV9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0
aW9uUmVtb3ZlU2VsZWN0aW9uOwotICAgIGlmYWNlLT5zZWxlY3RfYWxsX3NlbGVjdGlvbiA9IHdl
YmtpdEFjY2Vzc2libGVTZWxlY3Rpb25TZWxlY3RBbGxTZWxlY3Rpb247Ci19Ci0KLWdib29sZWFu
IHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25BZGRTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxl
Y3Rpb24sIGdpbnQgaW5kZXgpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVj
dGlvbkFkZFNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbmRleCkKIHsK
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24p
OwogICAgIGlmICghY29yZVNlbGVjdGlvbikKQEAgLTE0OSw3ICsxMzgsNyBAQCBnYm9vbGVhbiB3
ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQWRkU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0
aW9uLCBnaW50IGluZAogICAgIHJldHVybiBGQUxTRTsKIH0KIAotZ2Jvb2xlYW4gd2Via2l0QWNj
ZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQor
c3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25DbGVhclNlbGVjdGlvbihB
dGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3Jl
U2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwogICAgIGlmICghY29yZVNlbGVjdGlvbikKQEAg
LTE2Niw3ICsxNTUsNyBAQCBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uQ2xlYXJT
ZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCiAgICAgcmV0dXJuIEZBTFNFOwogfQog
Ci1BdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25SZWZTZWxlY3Rpb24oQXRrU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgpCitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRB
Y2Nlc3NpYmxlU2VsZWN0aW9uUmVmU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBn
aW50IGluZGV4KQogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZy
b21TZWxlY3Rpb24oc2VsZWN0aW9uLCBpbmRleCk7CiAgICAgaWYgKG9wdGlvbikgewpAQCAtMTc4
LDcgKzE2Nyw3IEBAIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlZlNlbGVj
dGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpCiAgICAgcmV0dXJuIDA7CiB9CiAK
LWdpbnQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkdldFNlbGVjdGlvbkNvdW50KEF0a1NlbGVj
dGlvbiogc2VsZWN0aW9uKQorc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkdl
dFNlbGVjdGlvbkNvdW50KEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQogewogICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7CiAgICAgaWYgKCFj
b3JlU2VsZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoKSkKQEAgLTIwMiw3ICsxOTEsNyBAQCBnaW50IHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25H
ZXRTZWxlY3Rpb25Db3VudChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKICAgICByZXR1cm4gMDsK
IH0KIAotZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbklzQ2hpbGRTZWxlY3RlZChB
dGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbmRleCkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRBY2Nlc3NpYmxlU2VsZWN0aW9uSXNDaGlsZFNlbGVjdGVkKEF0a1NlbGVjdGlvbiogc2VsZWN0
aW9uLCBnaW50IGluZGV4KQogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rp
b24gPSBjb3JlKHNlbGVjdGlvbik7CiAgICAgaWYgKCFjb3JlU2VsZWN0aW9uKQpAQCAtMjE1LDcg
KzIwNCw3IEBAIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25Jc0NoaWxkU2VsZWN0
ZWQoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQKICAgICByZXR1cm4gRkFMU0U7CiB9CiAK
LWdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25SZW1vdmVTZWxlY3Rpb24oQXRrU2Vs
ZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNj
ZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwg
Z2ludCBpbmRleCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0g
Y29yZShzZWxlY3Rpb24pOwogICAgIGlmICghY29yZVNlbGVjdGlvbikKQEAgLTIzMSw3ICsyMjAs
NyBAQCBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uUmVtb3ZlU2VsZWN0aW9uKEF0
a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi1nYm9v
bGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uU2VsZWN0QWxsU2VsZWN0aW9uKEF0a1NlbGVj
dGlvbiogc2VsZWN0aW9uKQorc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rp
b25TZWxlY3RBbGxTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCiB7CiAgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKICAgICBp
ZiAoIWNvcmVTZWxlY3Rpb24gfHwgIWNvcmVTZWxlY3Rpb24tPmlzTXVsdGlTZWxlY3RhYmxlKCkp
CkBAIC0yNDgsMyArMjM3LDE0IEBAIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25T
ZWxlY3RBbGxTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCiAKICAgICByZXR1cm4g
RkFMU0U7CiB9CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUluaXQo
QXRrU2VsZWN0aW9uSWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5hZGRfc2VsZWN0aW9uID0g
d2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkFkZFNlbGVjdGlvbjsKKyAgICBpZmFjZS0+Y2xlYXJf
c2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uOworICAg
IGlmYWNlLT5yZWZfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlZlNlbGVj
dGlvbjsKKyAgICBpZmFjZS0+Z2V0X3NlbGVjdGlvbl9jb3VudCA9IHdlYmtpdEFjY2Vzc2libGVT
ZWxlY3Rpb25HZXRTZWxlY3Rpb25Db3VudDsKKyAgICBpZmFjZS0+aXNfY2hpbGRfc2VsZWN0ZWQg
PSB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uSXNDaGlsZFNlbGVjdGVkOworICAgIGlmYWNlLT5y
ZW1vdmVfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVjdGlv
bjsKKyAgICBpZmFjZS0+c2VsZWN0X2FsbF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlU2Vs
ZWN0aW9uU2VsZWN0QWxsU2VsZWN0aW9uOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVNlbGVjdGlvbi5oCmluZGV4IDFhZDE0MjhjMjlhNDBiZjdmYmEyYzk0OGJiYmQ3NGE3NzQ1OTJm
NDcuLjFjZWFmY2U4YjQxODliN2QyN2ZlNzk1OWZjYTJmOTFhZDJiZDFhNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlU2VsZWN0aW9uLmgKQEAgLTI1LDEyICsyNSw1IEBACiAjaW5j
bHVkZSA8YXRrL2F0ay5oPgogCiB2b2lkIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25JbnRlcmZh
Y2VJbml0KEF0a1NlbGVjdGlvbklmYWNlKik7Ci1nYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2Vs
ZWN0aW9uQWRkU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiosIGdpbnQgaW5kZXgpOwotZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiopOwot
QXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uUmVmU2VsZWN0aW9uKEF0a1NlbGVj
dGlvbiosIGdpbnQgaW5kZXgpOwotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uR2V0U2Vs
ZWN0aW9uQ291bnQoQXRrU2VsZWN0aW9uKik7Ci1nYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlU2Vs
ZWN0aW9uSXNDaGlsZFNlbGVjdGVkKEF0a1NlbGVjdGlvbiosIGdpbnQgaW5kZXgpOwotZ2Jvb2xl
YW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVjdGlvbihBdGtTZWxlY3Rpb24q
LCBnaW50IGluZGV4KTsKLWdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25TZWxlY3RB
bGxTZWxlY3Rpb24oQXRrU2VsZWN0aW9uKik7CiAKICNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlU2VsZWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3Bw
CmluZGV4IGViMTYyNjA3MWI3ZmEzZGVlMmJjMWM0YWEyNTJmMGQ0YTlhNTUxZTMuLjE5OTFjNDk3
ZTVkN2NiNTZiNDJlODE4OWJjNjM1NjE0OTlkMWUyYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRhYmxlLmNwcApAQCAtODcsMjQgKzg3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwqIGNlbGxBdEluZGV4KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKICAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVJbnRlcmZhY2VJbml0KEF0
a1RhYmxlSWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5yZWZfYXQgPSB3ZWJraXRBY2Nlc3Np
YmxlVGFibGVSZWZBdDsKLSAgICBpZmFjZS0+Z2V0X2luZGV4X2F0ID0gd2Via2l0QWNjZXNzaWJs
ZVRhYmxlR2V0SW5kZXhBdDsKLSAgICBpZmFjZS0+Z2V0X2NvbHVtbl9hdF9pbmRleCA9IHdlYmtp
dEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkF0SW5kZXg7Ci0gICAgaWZhY2UtPmdldF9yb3dfYXRf
aW5kZXggPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dBdEluZGV4OwotICAgIGlmYWNlLT5n
ZXRfbl9jb2x1bW5zID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnM7Ci0gICAgaWZh
Y2UtPmdldF9uX3Jvd3MgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROUm93czsKLSAgICBpZmFj
ZS0+Z2V0X2NvbHVtbl9leHRlbnRfYXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5F
eHRlbnRBdDsKLSAgICBpZmFjZS0+Z2V0X3Jvd19leHRlbnRfYXQgPSB3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRSb3dFeHRlbnRBdDsKLSAgICBpZmFjZS0+Z2V0X2NvbHVtbl9oZWFkZXIgPSB3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5IZWFkZXI7Ci0gICAgaWZhY2UtPmdldF9yb3dfaGVh
ZGVyID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyOwotICAgIGlmYWNlLT5nZXRf
Y2FwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENhcHRpb247Ci0gICAgaWZhY2UtPmdl
dF9jb2x1bW5fZGVzY3JpcHRpb24gPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5EZXNj
cmlwdGlvbjsKLSAgICBpZmFjZS0+Z2V0X3Jvd19kZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUdldFJvd0Rlc2NyaXB0aW9uOwotfQotCi1BdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2li
bGVUYWJsZVJlZkF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQorc3Rh
dGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlUmVmQXQoQXRrVGFibGUqIHRhYmxl
LCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCiB7CiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCog
YXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4pOwogICAgIGlmICghYXhDZWxsKQpAQCAt
MTEyLDE0ICs5NSwxNCBAQCBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZVJlZkF0KEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQogICAgIHJldHVybiBheENlbGwt
PndyYXBwZXIoKTsKIH0KIAotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJbmRleEF0KEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQorc3RhdGljIGdpbnQgd2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0SW5kZXhBdChBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93LCBnaW50
IGNvbHVtbikKIHsKICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBheENlbGwgPSBjZWxsKHRh
YmxlLCByb3csIGNvbHVtbik7CiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBheFRhYmxlID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4oY29yZSh0YWJsZSkpOwogICAgIHJldHVybiBj
ZWxsSW5kZXgoYXhDZWxsLCBheFRhYmxlKTsKIH0KIAotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVHZXRDb2x1bW5BdEluZGV4KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKK3N0YXRpYyBn
aW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkF0SW5kZXgoQXRrVGFibGUqIHRhYmxl
LCBnaW50IGluZGV4KQogewogICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIGF4Q2VsbCA9IGNl
bGxBdEluZGV4KHRhYmxlLCBpbmRleCk7CiAgICAgaWYgKGF4Q2VsbCkgewpAQCAtMTMwLDcgKzEx
Myw3IEBAIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uQXRJbmRleChBdGtUYWJs
ZSogdGFibGUsIGdpbnQgaW5kZXgpCiAgICAgcmV0dXJuIC0xOwogfQogCi1naW50IHdlYmtpdEFj
Y2Vzc2libGVUYWJsZUdldFJvd0F0SW5kZXgoQXRrVGFibGUqIHRhYmxlLCBnaW50IGluZGV4KQor
c3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93QXRJbmRleChBdGtUYWJsZSog
dGFibGUsIGdpbnQgaW5kZXgpCiB7CiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxs
ID0gY2VsbEF0SW5kZXgodGFibGUsIGluZGV4KTsKICAgICBpZiAoYXhDZWxsKSB7CkBAIC0xNDEs
NyArMTI0LDcgQEAgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dBdEluZGV4KEF0a1Rh
YmxlKiB0YWJsZSwgZ2ludCBpbmRleCkKICAgICByZXR1cm4gLTE7CiB9CiAKLWdpbnQgd2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnMoQXRrVGFibGUqIHRhYmxlKQorc3RhdGljIGdpbnQg
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnMoQXRrVGFibGUqIHRhYmxlKQogewogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CiAgICAgaWYgKGFj
Y1RhYmxlLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKQEAgLTE0OSw3ICsxMzIsNyBA
QCBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2x1bW5zKEF0a1RhYmxlKiB0YWJsZSkK
ICAgICByZXR1cm4gMDsKIH0KIAotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROUm93cyhB
dGtUYWJsZSogdGFibGUpCitzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROUm93
cyhBdGtUYWJsZSogdGFibGUpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUg
PSBjb3JlKHRhYmxlKTsKICAgICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpKQpAQCAtMTU3LDcgKzE0MCw3IEBAIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0
TlJvd3MoQXRrVGFibGUqIHRhYmxlKQogICAgIHJldHVybiAwOwogfQogCi1naW50IHdlYmtpdEFj
Y2Vzc2libGVUYWJsZUdldENvbHVtbkV4dGVudEF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3cs
IGdpbnQgY29sdW1uKQorc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1u
RXh0ZW50QXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCiB7CiAgICAg
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogYXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4p
OwogICAgIGlmIChheENlbGwpIHsKQEAgLTE2OCw3ICsxNTEsNyBAQCBnaW50IHdlYmtpdEFjY2Vz
c2libGVUYWJsZUdldENvbHVtbkV4dGVudEF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdp
bnQgY29sdQogICAgIHJldHVybiAwOwogfQogCi1naW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdl
dFJvd0V4dGVudEF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQorc3Rh
dGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93RXh0ZW50QXQoQXRrVGFibGUqIHRh
YmxlLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCiB7CiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bCogYXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4pOwogICAgIGlmIChheENlbGwpIHsK
QEAgLTE3OSw3ICsxNjIsNyBAQCBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0V4dGVu
dEF0KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQogICAgIHJldHVybiAw
OwogfQogCi1BdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRlcihB
dGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQorc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNj
ZXNzaWJsZVRhYmxlR2V0Q29sdW1uSGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBjb2x1bW4p
CiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKICAg
ICBpZiAoYWNjVGFibGUtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CkBAIC0xOTcs
NyArMTgwLDcgQEAgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5IZWFk
ZXIoQXRrVGFibGUqIHRhYmxlLCBnaW50IGNvbHVtbikKICAgICByZXR1cm4gMDsKIH0KIAotQXRr
T2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXIoQXRrVGFibGUqIHRhYmxl
LCBnaW50IHJvdykKK3N0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJv
d0hlYWRlcihBdGtUYWJsZSogdGFibGUsIGdpbnQgcm93KQogewogICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7CiAgICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewpAQCAtMjE1LDcgKzE5OCw3IEBAIEF0a09iamVjdCog
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93SGVhZGVyKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCBy
b3cpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxl
R2V0Q2FwdGlvbihBdGtUYWJsZSogdGFibGUpCitzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0a1RhYmxlKiB0YWJsZSkKIHsKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwogICAgIGlmIChhY2NUYWJsZS0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKQEAgLTIyOSwyMCArMjEyLDM3IEBAIEF0a09i
amVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q2FwdGlvbihBdGtUYWJsZSogdGFibGUpCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRD
b2x1bW5EZXNjcmlwdGlvbihBdGtUYWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQorc3RhdGljIGNv
bnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5EZXNjcmlwdGlvbihBdGtU
YWJsZSogdGFibGUsIGdpbnQgY29sdW1uKQogewogICAgIEF0a09iamVjdCogY29sdW1uSGVhZGVy
ID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKHRhYmxlLCBjb2x1bW4pOwogICAgIGlmIChj
b2x1bW5IZWFkZXIgJiYgQVRLX0lTX1RFWFQoY29sdW1uSGVhZGVyKSkKLSAgICAgICAgcmV0dXJu
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dChBVEtfVEVYVChjb2x1bW5IZWFkZXIpLCAwLCAt
MSk7CisgICAgICAgIHJldHVybiBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChjb2x1bW5IZWFk
ZXIpLCAwLCAtMSk7CiAKICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgZ2NoYXIqIHdlYmtpdEFj
Y2Vzc2libGVUYWJsZUdldFJvd0Rlc2NyaXB0aW9uKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3cp
CitzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0Rlc2NyaXB0
aW9uKEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3cpCiB7CiAgICAgQXRrT2JqZWN0KiByb3dIZWFk
ZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIodGFibGUsIHJvdyk7CiAgICAgaWYgKHJvd0hl
YWRlciAmJiBBVEtfSVNfVEVYVChyb3dIZWFkZXIpKQotICAgICAgICByZXR1cm4gd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRUZXh0KEFUS19URVhUKHJvd0hlYWRlciksIDAsIC0xKTsKKyAgICAgICAg
cmV0dXJuIGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHJvd0hlYWRlciksIDAsIC0xKTsKIAog
ICAgIHJldHVybiAwOwogfQorCit2b2lkIHdlYmtpdEFjY2Vzc2libGVUYWJsZUludGVyZmFjZUlu
aXQoQXRrVGFibGVJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPnJlZl9hdCA9IHdlYmtpdEFj
Y2Vzc2libGVUYWJsZVJlZkF0OworICAgIGlmYWNlLT5nZXRfaW5kZXhfYXQgPSB3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXRJbmRleEF0OworICAgIGlmYWNlLT5nZXRfY29sdW1uX2F0X2luZGV4ID0g
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uQXRJbmRleDsKKyAgICBpZmFjZS0+Z2V0X3Jv
d19hdF9pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0F0SW5kZXg7CisgICAgaWZh
Y2UtPmdldF9uX2NvbHVtbnMgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROQ29sdW1uczsKKyAg
ICBpZmFjZS0+Z2V0X25fcm93cyA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Sb3dzOworICAg
IGlmYWNlLT5nZXRfY29sdW1uX2V4dGVudF9hdCA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENv
bHVtbkV4dGVudEF0OworICAgIGlmYWNlLT5nZXRfcm93X2V4dGVudF9hdCA9IHdlYmtpdEFjY2Vz
c2libGVUYWJsZUdldFJvd0V4dGVudEF0OworICAgIGlmYWNlLT5nZXRfY29sdW1uX2hlYWRlciA9
IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRlcjsKKyAgICBpZmFjZS0+Z2V0X3Jv
d19oZWFkZXIgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXI7CisgICAgaWZhY2Ut
PmdldF9jYXB0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q2FwdGlvbjsKKyAgICBpZmFj
ZS0+Z2V0X2NvbHVtbl9kZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVt
bkRlc2NyaXB0aW9uOworICAgIGlmYWNlLT5nZXRfcm93X2Rlc2NyaXB0aW9uID0gd2Via2l0QWNj
ZXNzaWJsZVRhYmxlR2V0Um93RGVzY3JpcHRpb247Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VUYWJsZS5oCmluZGV4IDM0Yzk2M2Y2NWY0NDAwM2NkOTc1NjEzNDU3ZWM5ZDg0YmI4NGExMjMu
LjRhYWYzYTg1N2E5ZDUzNzBjM2Y1ZmFjMWE5MGI3NzY3M2Q3MjIwYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
YWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUYWJsZS5oCkBAIC0yNSwxOCArMjUsNSBAQAogI2luY2x1ZGUgPGF0ay9h
dGsuaD4KIAogdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVJbnRlcmZhY2VJbml0KEF0a1RhYmxl
SWZhY2UqKTsKLUF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlUmVmQXQoQXRrVGFibGUq
LCBnaW50IHJvdywgZ2ludCBjb2x1bW4pOwotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJ
bmRleEF0KEF0a1RhYmxlKiwgZ2ludCByb3csIGdpbnQgY29sdW1uKTsKLWdpbnQgd2Via2l0QWNj
ZXNzaWJsZVRhYmxlR2V0Q29sdW1uQXRJbmRleChBdGtUYWJsZSosIGdpbnQgaW5kZXgpOwotZ2lu
dCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dBdEluZGV4KEF0a1RhYmxlKiwgZ2ludCBpbmRl
eCk7Ci1naW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2x1bW5zKEF0a1RhYmxlKik7Ci1n
aW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Sb3dzKEF0a1RhYmxlKik7Ci1naW50IHdlYmtp
dEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkV4dGVudEF0KEF0a1RhYmxlKiwgZ2ludCByb3csIGdp
bnQgY29sdW1uKTsKLWdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93RXh0ZW50QXQoQXRr
VGFibGUqLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pOwotQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3Np
YmxlVGFibGVHZXRDb2x1bW5IZWFkZXIoQXRrVGFibGUqLCBnaW50IGNvbHVtbik7Ci1BdGtPYmpl
Y3QqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0hlYWRlcihBdGtUYWJsZSosIGdpbnQgcm93
KTsKLUF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q2FwdGlvbihBdGtUYWJsZSop
OwotY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkRlc2NyaXB0aW9u
KEF0a1RhYmxlKiwgZ2ludCBjb2x1bW4pOwotY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVU
YWJsZUdldFJvd0Rlc2NyaXB0aW9uKEF0a1RhYmxlKiwgZ2ludCByb3cpOwogCiAjZW5kaWYgLy8g
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VUZXh0LmNwcAppbmRleCBjNDQ0MWU1MDhjYTJmZDJkZTJiOWE0NjU2Yjk3NGU2OGMzMDc1NTQ4
Li5kYTY0ODllMTkzNWY5MmUzZTczYmU3ZTJmYWMzNTVkNzU5ZGJlYWI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlKEF0a1RleHQqIHRleHQpCiAgICAgcmV0dXJuIHdlYmtpdEFjY2Vz
c2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKHRleHQpKTsKIH0K
IAotZ2NoYXIqIHRleHRGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGlj
IGdjaGFyKiB0ZXh0Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBH
U3RyaW5nKiByZXN1bHRUZXh0ID0gZ19zdHJpbmdfbmV3KDApOwogCkBAIC0xMTgsNyArMTE4LDcg
QEAgZ2NoYXIqIHRleHRGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJl
dHVybiBnX3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNFKTsKIH0KIAotZ2NoYXIqIHRleHRG
b3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKK3N0YXRpYyBnY2hhciog
dGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQogewogICAgIEdT
dHJpbmcqIHN0ciA9IGdfc3RyaW5nX25ldygwKTsKIApAQCAtMTQ0LDYgKzE0NCw4IEBAIGdjaGFy
KiB0ZXh0Rm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgcmV0
dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7CiB9CiAKK3N0YXRpYyBnY2hhciogd2Via2l0
QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVu
ZE9mZnNldCk7CisKIHN0YXRpYyBHYWlsVGV4dFV0aWwqIGdldEdhaWxUZXh0VXRpbEZvckF0ayhB
dGtUZXh0KiB0ZXh0T2JqZWN0KQogewogICAgIEdhaWxUZXh0VXRpbCogZ2FpbFRleHRVdGlsID0g
Z2FpbF90ZXh0X3V0aWxfbmV3KCk7CkBAIC01MDQsMjkgKzUwNiw3IEBAIHN0YXRpYyB2b2lkIGdl
dFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCwgVmlzaWJsCiAgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKG5vZGVSYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNz
aWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2Ut
PmdldF90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0OwotICAgIGlmYWNlLT5nZXRf
dGV4dF9hZnRlcl9vZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRlck9mZnNl
dDsKLSAgICBpZmFjZS0+Z2V0X3RleHRfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRUZXh0QXRPZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF90ZXh0X2JlZm9yZV9vZmZzZXQgPSB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF9jaGFy
YWN0ZXJfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNl
dDsKLSAgICBpZmFjZS0+Z2V0X2NhcmV0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2FyZXRPZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0UnVuQXR0cmlidXRlczsKLSAgICBpZmFjZS0+Z2V0X2RlZmF1bHRfYXR0cmli
dXRlcyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXM7Ci0gICAgaWZh
Y2UtPmdldF9jaGFyYWN0ZXJfZXh0ZW50cyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFj
dGVyRXh0ZW50czsKLSAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFJhbmdlRXh0ZW50czsKLSAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9jb3VudCA9
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQ7Ci0gICAgaWZhY2UtPmdldF9v
ZmZzZXRfYXRfcG9pbnQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQ7Ci0g
ICAgaWZhY2UtPmdldF9uX3NlbGVjdGlvbnMgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE5TZWxl
Y3Rpb25zOwotICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRTZWxlY3Rpb247Ci0gICAgaWZhY2UtPmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEFkZFNlbGVjdGlvbjsKLSAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdlYmtpdEFj
Y2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uOwotICAgIGlmYWNlLT5zZXRfc2VsZWN0aW9uID0g
d2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb247Ci0gICAgaWZhY2UtPnNldF9jYXJldF9v
ZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0OwotfQotCi1nY2hhciog
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZz
ZXQsIGdpbnQgZW5kT2Zmc2V0KQorc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dFRleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpCiB7
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CiAKQEAg
LTU2OCwyOCArNTQ4LDI4IEBAIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRr
VGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzCiAgICAgcmV0dXJuIGdf
c3RyZHVwKHJldC51dGY4KCkuZGF0YSgpKTsKIH0KIAotZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0VGV4dEFmdGVyT2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0
Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0
KQorc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRlck9mZnNldChB
dGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwg
Z2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKIHsKICAgICByZXR1cm4gZ2FpbF90
ZXh0X3V0aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xh
eW91dEZvckF0ayh0ZXh0KSwgR0FJTF9BRlRFUl9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0
LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAotZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0VGV4dEF0T2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91
bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQor
c3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBdE9mZnNldChBdGtUZXh0
KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgZ2ludCog
c3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKIHsKICAgICByZXR1cm4gZ2FpbF90ZXh0X3V0
aWxfZ2V0X3RleHQoZ2V0R2FpbFRleHRVdGlsRm9yQXRrKHRleHQpLCBnZXRQYW5nb0xheW91dEZv
ckF0ayh0ZXh0KSwgR0FJTF9BVF9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAotZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4
dEJlZm9yZU9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5
IGJvdW5kYXJ5VHlwZSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3N0YXRp
YyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0KEF0a1RleHQq
IHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBz
dGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQogewogICAgIHJldHVybiBnYWlsX3RleHRfdXRp
bF9nZXRfdGV4dChnZXRHYWlsVGV4dFV0aWxGb3JBdGsodGV4dCksIGdldFBhbmdvTGF5b3V0Rm9y
QXRrKHRleHQpLCBHQUlMX0JFRk9SRV9PRkZTRVQsIGJvdW5kYXJ5VHlwZSwgb2Zmc2V0LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAotZ3VuaWNoYXIgd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRDaGFyYWN0ZXJBdE9mZnNldChBdGtUZXh0KiwgZ2ludCkKK3N0YXRpYyBndW5pY2hhciB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckF0T2Zmc2V0KEF0a1RleHQqLCBnaW50KQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWdpbnQgd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRDYXJldE9mZnNldChBdGtUZXh0KiB0ZXh0KQorc3RhdGljIGdpbnQgd2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRDYXJldE9mZnNldChBdGtUZXh0KiB0ZXh0KQogewogICAgIC8v
IGNvcmVPYmplY3QgaXMgdGhlIHVuaWdub3JlZCBvYmplY3Qgd2hvc2Ugb2Zmc2V0IHRoZSBjYWxs
ZXIgaXMgcmVxdWVzdGluZy4KICAgICAvLyBmb2N1c2VkT2JqZWN0IGlzIHRoZSBvYmplY3Qgd2l0
aCB0aGUgY2FyZXQuIEl0IGlzIGxpa2VseSBpZ25vcmVkIC0tIHVubGVzcyBpdCdzIGEgbGluay4K
QEAgLTYxOSw3ICs1OTksNyBAQCBnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZz
ZXQoQXRrVGV4dCogdGV4dCkKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi1BdGtBdHRyaWJ1dGVT
ZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0UnVuQXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0LCBn
aW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKK3N0YXRpYyBB
dGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0UnVuQXR0cmlidXRlcyhBdGtU
ZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNl
dCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsK
ICAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdDsKQEAgLTY0Myw3ICs2MjMsNyBAQCBBdGtBdHRy
aWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0UnVuQXR0cmlidXRlcyhBdGtUZXh0KiB0
ZXh0LCBnaW50IG9mZnNldAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUF0a0F0dHJpYnV0ZVNl
dCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXREZWZhdWx0QXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0
KQorc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZVRleHRHZXREZWZhdWx0
QXR0cmlidXRlcyhBdGtUZXh0KiB0ZXh0KQogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QgPSBjb3JlKHRleHQpOwogICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVj
dC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCkBAIC02NTIsNyArNjMyLDcgQEAgQXRr
QXR0cmlidXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldERlZmF1bHRBdHRyaWJ1dGVzKEF0
a1RleHQqIHRleHQpCiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlP
YmplY3QoY29yZU9iamVjdCk7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFy
YWN0ZXJFeHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5
LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRzKQorc3RhdGlj
IHZvaWQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJFeHRlbnRzKEF0a1RleHQqIHRl
eHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVp
Z2h0LCBBdGtDb29yZFR5cGUgY29vcmRzKQogewogICAgIEludFJlY3QgZXh0ZW50cyA9IHRleHRF
eHRlbnRzKHRleHQsIG9mZnNldCwgMSwgY29vcmRzKTsKICAgICAqeCA9IGV4dGVudHMueCgpOwpA
QCAtNjYxLDcgKzY0MSw3IEBAIHZvaWQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJF
eHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4CiAgICAgKmhlaWdodCA9
IGV4dGVudHMuaGVpZ2h0KCk7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSYW5n
ZUV4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQs
IEF0a0Nvb3JkVHlwZSBjb29yZHMsIEF0a1RleHRSZWN0YW5nbGUqIHJlY3QpCitzdGF0aWMgdm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50
IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCwgQXRrQ29vcmRUeXBlIGNvb3JkcywgQXRrVGV4
dFJlY3RhbmdsZSogcmVjdCkKIHsKICAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0
ZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIGNvb3Jkcyk7CiAgICAg
cmVjdC0+eCA9IGV4dGVudHMueCgpOwpAQCAtNjcwLDEyICs2NTAsMTIgQEAgdm9pZCB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zm
c2V0LCBnaW50IGUKICAgICByZWN0LT5oZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOwogfQogCi1n
aW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQoQXRrVGV4dCogdGV4dCkK
K3N0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQoQXRrVGV4
dCogdGV4dCkKIHsKICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlKHRl
eHQpKTsKIH0KIAotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQoQXRr
VGV4dCogdGV4dCwgZ2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZHMpCitzdGF0aWMg
Z2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQoQXRrVGV4dCogdGV4dCwg
Z2ludCB4LCBnaW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZHMpCiB7CiAgICAgLy8gRklYTUU6IFVz
ZSB0aGUgQXRrQ29vcmRUeXBlCiAgICAgLy8gVE9ETzogSXMgaXQgY29ycmVjdCB0byBpZ25vcmUg
cmFuZ2UubGVuZ3RoPwpAQCAtNjg0LDcgKzY2NCw3IEBAIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRl
eHRHZXRPZmZzZXRBdFBvaW50KEF0a1RleHQqIHRleHQsIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29y
CiAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogfQogCi1naW50IHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0TlNlbGVjdGlvbnMoQXRrVGV4dCogdGV4dCkKK3N0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0TlNlbGVjdGlvbnMoQXRrVGV4dCogdGV4dCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbiA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOwpAQCAtNzAyLDcgKzY4Miw3IEBAIGdp
bnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyhBdGtUZXh0KiB0ZXh0KQogICAg
IHJldHVybiBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uKSA/
IDEgOiAwOwogfQogCi1nY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRTZWxlY3Rpb24oQXRr
VGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBl
bmRPZmZzZXQpCitzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9u
KEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2lu
dCogZW5kT2Zmc2V0KQogewogICAgIC8vIERlZmF1bHQgdmFsdWVzLCB1bmxlc3MgdGhlIGNvbnRy
YXJ5IGlzIHByb3ZlZAogICAgICpzdGFydE9mZnNldCA9ICplbmRPZmZzZXQgPSAwOwpAQCAtNzI0
LDI5ICs3MDQsMTMgQEAgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKEF0
a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KgogICAgIHJldHVybiB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKIH0K
IAotZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRBZGRTZWxlY3Rpb24oQXRrVGV4dCosIGdp
bnQsIGdpbnQpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRBZGRTZWxlY3Rp
b24oQXRrVGV4dCosIGdpbnQsIGdpbnQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gRkFMU0U7CiB9CiAKLWdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2Vs
ZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9uTnVtKQotewotICAgIC8vIFdlYkNv
cmUgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb24sIHNvIGFueXRoaW5nIGJ1dCAw
IGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIG5vdy4KLSAgICBpZiAoc2VsZWN0aW9uTnVtKQotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBEbyBub3RoaW5nIGlmIGN1cnJlbnQgc2VsZWN0
aW9uIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBvYmplY3QKLSAgICBpZiAoIXdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0TlNlbGVjdGlvbnModGV4dCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAg
IC8vIFNldCBhIG5ldyAwLXNpemVkIHNlbGVjdGlvbiB0byB0aGUgY2FyZXQgcG9zaXRpb24sIGlu
IG9yZGVyCi0gICAgLy8gdG8gc2ltdWxhdGUgc2VsZWN0aW9uIHJlbW92YWwgKEdBSUwgc3R5bGUp
Ci0gICAgZ2ludCBjYXJldE9mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZz
ZXQodGV4dCk7Ci0gICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKHRl
eHQsIHNlbGVjdGlvbk51bSwgY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0KTsKLX0KLQotZ2Jvb2xl
YW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBz
ZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQorc3RhdGljIGdi
b29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdp
bnQgc2VsZWN0aW9uTnVtLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCkKIHsKICAg
ICAvLyBXZWJDb3JlIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9uLCBzbyBhbnl0
aGluZyBidXQgMCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBub3cuCiAgICAgaWYgKHNlbGVjdGlv
bk51bSkKQEAgLTc4NCw3ICs3NDgsMjMgQEAgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRT
ZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQKICAgICBy
ZXR1cm4gVFJVRTsKIH0KIAotZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRDYXJldE9m
ZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRB
Y2Nlc3NpYmxlVGV4dFJlbW92ZVNlbGVjdGlvbihBdGtUZXh0KiB0ZXh0LCBnaW50IHNlbGVjdGlv
bk51bSkKK3sKKyAgICAvLyBXZWJDb3JlIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0
aW9uLCBzbyBhbnl0aGluZyBidXQgMCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBub3cuCisgICAg
aWYgKHNlbGVjdGlvbk51bSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gRG8gbm90
aGluZyBpZiBjdXJyZW50IHNlbGVjdGlvbiBkb2Vzbid0IGJlbG9uZyB0byB0aGUgb2JqZWN0Cisg
ICAgaWYgKCF3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE5TZWxlY3Rpb25zKHRleHQpKQorICAgICAg
ICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBTZXQgYSBuZXcgMC1zaXplZCBzZWxlY3Rpb24gdG8g
dGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBvcmRlcgorICAgIC8vIHRvIHNpbXVsYXRlIHNlbGVjdGlv
biByZW1vdmFsIChHQUlMIHN0eWxlKQorICAgIGdpbnQgY2FyZXRPZmZzZXQgPSB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KHRleHQpOworICAgIHJldHVybiB3ZWJraXRBY2Nlc3Np
YmxlVGV4dFNldFNlbGVjdGlvbih0ZXh0LCBzZWxlY3Rpb25OdW0sIGNhcmV0T2Zmc2V0LCBjYXJl
dE9mZnNldCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENh
cmV0T2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0KQogewogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwogCkBAIC04MTAsMyArNzkwLDI1IEBA
IGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0Q2FyZXRPZmZzZXQoQXRrVGV4dCogdGV4
dCwgZ2ludCBvZmZzZXQpCiAgICAgY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRp
b25SYW5nZShyYW5nZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CisKK3ZvaWQgd2Via2l0QWNjZXNz
aWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a1RleHRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2Ut
PmdldF90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0OworICAgIGlmYWNlLT5nZXRf
dGV4dF9hZnRlcl9vZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRBZnRlck9mZnNl
dDsKKyAgICBpZmFjZS0+Z2V0X3RleHRfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRUZXh0QXRPZmZzZXQ7CisgICAgaWZhY2UtPmdldF90ZXh0X2JlZm9yZV9vZmZzZXQgPSB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQ7CisgICAgaWZhY2UtPmdldF9jaGFy
YWN0ZXJfYXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9mZnNl
dDsKKyAgICBpZmFjZS0+Z2V0X2NhcmV0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
Q2FyZXRPZmZzZXQ7CisgICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0UnVuQXR0cmlidXRlczsKKyAgICBpZmFjZS0+Z2V0X2RlZmF1bHRfYXR0cmli
dXRlcyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXM7CisgICAgaWZh
Y2UtPmdldF9jaGFyYWN0ZXJfZXh0ZW50cyA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFj
dGVyRXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFJhbmdlRXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9jb3VudCA9
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQ7CisgICAgaWZhY2UtPmdldF9v
ZmZzZXRfYXRfcG9pbnQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQ7Cisg
ICAgaWZhY2UtPmdldF9uX3NlbGVjdGlvbnMgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE5TZWxl
Y3Rpb25zOworICAgIGlmYWNlLT5nZXRfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRTZWxlY3Rpb247CisgICAgaWZhY2UtPmFkZF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEFkZFNlbGVjdGlvbjsKKyAgICBpZmFjZS0+cmVtb3ZlX3NlbGVjdGlvbiA9IHdlYmtpdEFj
Y2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uOworICAgIGlmYWNlLT5zZXRfc2VsZWN0aW9uID0g
d2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb247CisgICAgaWZhY2UtPnNldF9jYXJldF9v
ZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0OworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUZXh0LmgKaW5kZXggNzEyOTY3Yjg2MjQzNTI1YzUzZTA3NzAzNzMwYWFm
ZWViMmM1MjBhNC4uOGViYmEwNTg5NGJhZmFlNjM3YmUyMjNkZDg5ZTVmYjhhNmU1OTkxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oCkBAIC0yNSwyMyArMjUsNSBAQAogI2luY2x1
ZGUgPGF0ay9hdGsuaD4KIAogdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEludGVyZmFjZUluaXQo
QXRrVGV4dElmYWNlKik7Ci1nY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1Rl
eHQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCk7Ci1nY2hhciogd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRUZXh0QWZ0ZXJPZmZzZXQoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBBdGtU
ZXh0Qm91bmRhcnksIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpOwotZ2NoYXIq
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zmc2V0KEF0a1RleHQqLCBnaW50IG9mZnNl
dCwgQXRrVGV4dEJvdW5kYXJ5LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KTsK
LWdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHRCZWZvcmVPZmZzZXQoQXRrVGV4dCos
IGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnksIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBl
bmRPZmZzZXQpOwotZ3VuaWNoYXIgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJBdE9m
ZnNldChBdGtUZXh0KiwgZ2ludCBvZmZzZXQpOwotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdl
dENhcmV0T2Zmc2V0KEF0a1RleHQqKTsKLUF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRSdW5BdHRyaWJ1dGVzKEF0a1RleHQqLCBnaW50IG9mZnNldCwgZ2ludCogc3RhcnRP
ZmZzZXQsIGdpbnQqIGVuZE9mZnNldCk7Ci1BdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXMoQXRrVGV4dCopOwotdm9pZCB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldENoYXJhY3RlckV4dGVudHMoQXRrVGV4dCosIGdpbnQgb2Zmc2V0LCBnaW50KiB4
LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUpOwotdm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJhbmdlRXh0ZW50cyhBdGtUZXh0KiwgZ2ludCBzdGFy
dE9mZnNldCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nvb3JkVHlwZSwgQXRrVGV4dFJlY3RhbmdsZSop
OwotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckNvdW50KEF0a1RleHQqKTsK
LWdpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRPZmZzZXRBdFBvaW50KEF0a1RleHQqLCBnaW50
IHgsIGdpbnQgeSwgQXRrQ29vcmRUeXBlKTsKLWdpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRO
U2VsZWN0aW9ucyhBdGtUZXh0Kik7Ci1nY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRTZWxl
Y3Rpb24oQXRrVGV4dCosIGdpbnQgc2VsZWN0aW9uTnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2lu
dCogZW5kT2Zmc2V0KTsKLWdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0QWRkU2VsZWN0aW9u
KEF0a1RleHQqLCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVuZE9mZnNldCk7Ci1nYm9vbGVhbiB3
ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbihBdGtUZXh0KiwgZ2ludCBzZWxlY3Rpb25O
dW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KTsKLWdib29sZWFuIHdlYmtpdEFj
Y2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uKEF0a1RleHQqLCBnaW50IHNlbGVjdGlvbk51bSk7
Ci1nYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KEF0a1RleHQqLCBn
aW50IG9mZnNldCk7CiAKICNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcAppbmRleCA2OGU5OTE2ZGQ1MzNl
ZmZkN2MzOTMzMGZhMDcwOGM5ODU0MGM4YmE5Li5jMjEyZjA1MDBiOTIyYTc0YjNhNjM5ZTk5MjNk
YmI3NTZjMWVmMzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5jcHAKQEAg
LTMzLDM3ICszMywyOCBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtWYWx1
ZSogdmFsdWUpCiAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KFdFQktJVF9BQ0NFU1NJQkxFKHZhbHVlKSk7CiB9CiAKLXZvaWQgd2Via2l0QWNjZXNzaWJs
ZVZhbHVlSW50ZXJmYWNlSW5pdChBdGtWYWx1ZUlmYWNlKiBpZmFjZSkKLXsKLSAgICBpZmFjZS0+
Z2V0X2N1cnJlbnRfdmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJyZW50VmFsdWU7
Ci0gICAgaWZhY2UtPmdldF9tYXhpbXVtX3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0
TWF4aW11bVZhbHVlOwotICAgIGlmYWNlLT5nZXRfbWluaW11bV92YWx1ZSA9IHdlYmtpdEFjY2Vz
c2libGVWYWx1ZUdldE1pbmltdW1WYWx1ZTsKLSAgICBpZmFjZS0+c2V0X2N1cnJlbnRfdmFsdWUg
PSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVTZXRDdXJyZW50VmFsdWU7Ci0gICAgaWZhY2UtPmdldF9t
aW5pbXVtX2luY3JlbWVudCA9IHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1l
bnQ7Ci19Ci0KLXZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKEF0a1Zh
bHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCitzdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxl
VmFsdWVHZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKIHsK
ICAgICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOwogICAgIGdfdmFsdWVfaW5p
dChnVmFsdWUsIEdfVFlQRV9ET1VCTEUpOwogICAgIGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUs
IGNvcmUodmFsdWUpLT52YWx1ZUZvclJhbmdlKCkpOwogfQogCi12b2lkIHdlYmtpdEFjY2Vzc2li
bGVWYWx1ZUdldE1heGltdW1WYWx1ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQor
c3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWF4aW11bVZhbHVlKEF0a1ZhbHVl
KiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCiB7CiAgICAgbWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVv
ZihHVmFsdWUpKTsKICAgICBnX3ZhbHVlX2luaXQoZ1ZhbHVlLCBHX1RZUEVfRE9VQkxFKTsKICAg
ICBnX3ZhbHVlX3NldF9kb3VibGUoZ1ZhbHVlLCBjb3JlKHZhbHVlKS0+bWF4VmFsdWVGb3JSYW5n
ZSgpKTsKIH0KIAotdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWUoQXRr
VmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKK3N0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2li
bGVWYWx1ZUdldE1pbmltdW1WYWx1ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQog
ewogICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVlKSk7CiAgICAgZ192YWx1ZV9p
bml0KGdWYWx1ZSwgR19UWVBFX0RPVUJMRSk7CiAgICAgZ192YWx1ZV9zZXRfZG91YmxlKGdWYWx1
ZSwgY29yZSh2YWx1ZSktPm1pblZhbHVlRm9yUmFuZ2UoKSk7CiB9CiAKLWdib29sZWFuIHdlYmtp
dEFjY2Vzc2libGVWYWx1ZVNldEN1cnJlbnRWYWx1ZShBdGtWYWx1ZSogdmFsdWUsIGNvbnN0IEdW
YWx1ZSogZ1ZhbHVlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVWYWx1ZVNldEN1
cnJlbnRWYWx1ZShBdGtWYWx1ZSogdmFsdWUsIGNvbnN0IEdWYWx1ZSogZ1ZhbHVlKQogewogICAg
IGlmICghR19WQUxVRV9IT0xEU19ET1VCTEUoZ1ZhbHVlKSAmJiAhR19WQUxVRV9IT0xEU19JTlQo
Z1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtODAsNyArNzEsNyBAQCBnYm9vbGVh
biB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVTZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBj
b25zdCBHVmFsdWUqIGdWYQogICAgIHJldHVybiBUUlVFOwogfQogCi12b2lkIHdlYmtpdEFjY2Vz
c2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1lbnQoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdW
YWx1ZSkKK3N0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1l
bnQoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKIHsKICAgICBtZW1zZXQoZ1ZhbHVl
LCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOwogICAgIGdfdmFsdWVfaW5pdChnVmFsdWUsIEdfVFlQRV9E
T1VCTEUpOwpAQCAtODgsMyArNzksMTIgQEAgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRN
aW5pbXVtSW5jcmVtZW50KEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFsdWUpCiAgICAgLy8g
VGhlcmUncyBub3Qgc3VjaCBhIHRoaW5nIGluIHRoZSBXQUktQVJJQSBzcGVjaWZpY2F0aW9uLCB0
aHVzIHJldHVybiB6ZXJvLgogICAgIGdfdmFsdWVfc2V0X2RvdWJsZShnVmFsdWUsIDAuMCk7CiB9
CisKK3ZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdChBdGtWYWx1ZUlmYWNl
KiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+Z2V0X2N1cnJlbnRfdmFsdWUgPSB3ZWJraXRBY2Nlc3Np
YmxlVmFsdWVHZXRDdXJyZW50VmFsdWU7CisgICAgaWZhY2UtPmdldF9tYXhpbXVtX3ZhbHVlID0g
d2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWF4aW11bVZhbHVlOworICAgIGlmYWNlLT5nZXRfbWlu
aW11bV92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1WYWx1ZTsKKyAgICBp
ZmFjZS0+c2V0X2N1cnJlbnRfdmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVTZXRDdXJyZW50
VmFsdWU7CisgICAgaWZhY2UtPmdldF9taW5pbXVtX2luY3JlbWVudCA9IHdlYmtpdEFjY2Vzc2li
bGVWYWx1ZUdldE1pbmltdW1JbmNyZW1lbnQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VW
YWx1ZS5oCmluZGV4IDIyNmM1YmRhZTRlYzcxMDc5M2MzZWUzYjI1ZDM1ZDM2MjlhODUyMjQuLjM0
MmE0MjgzNTc4YjcwNTI1ZGNiNWRjYzlkNjFjODk2MGVlYTRlZDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VWYWx1ZS5oCkBAIC0yMywxMCArMjMsNSBAQAogI2luY2x1ZGUgPGF0ay9hdGsu
aD4KIAogdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVJbnRlcmZhY2VJbml0KEF0a1ZhbHVlSWZh
Y2UqKTsKLXZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVl
KiwgR1ZhbHVlKik7Ci12b2lkIHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1heGltdW1WYWx1ZShB
dGtWYWx1ZSosIEdWYWx1ZSopOwotdm9pZCB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVt
VmFsdWUoQXRrVmFsdWUqLCBHVmFsdWUqKTsKLWdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVWYWx1
ZVNldEN1cnJlbnRWYWx1ZShBdGtWYWx1ZSosIGNvbnN0IEdWYWx1ZSopOwotdm9pZCB3ZWJraXRB
Y2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtSW5jcmVtZW50KEF0a1ZhbHVlKiwgR1ZhbHVlKik7CiAK
ICNlbmRpZiAvLyBXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvV2ViS2l0QWNjZXNzaWJs
ZVdyYXBwZXJBdGsuY3BwCmluZGV4IGI5MzZkYzZkNmE5MjcwYmFjMjA1ODA4OWZiN2U0YTQyMjNl
YWQ2YjIuLjBiNjIwMGZkNTI1NTEzOGExZTdhMjlhNmY0OWY0NjRkMzljZWE2NGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVXcmFw
cGVyQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRB
Y2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCBzdGF0aWMgY29uc3Qg
Z2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXROYW1lKEF0a09iamVjdCogb2JqZWN0KQogICAgICAg
ICBpZiAobGFiZWwpIHsKICAgICAgICAgICAgIEF0a09iamVjdCogYXRrT2JqZWN0ID0gbGFiZWwt
PndyYXBwZXIoKTsKICAgICAgICAgICAgIGlmIChBVEtfSVNfVEVYVChhdGtPYmplY3QpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQVRLX1RFWFQo
YXRrT2JqZWN0KSwgMCwgLTEpOworICAgICAgICAgICAgICAgIHJldHVybiBhdGtfdGV4dF9nZXRf
dGV4dChBVEtfVEVYVChhdGtPYmplY3QpLCAwLCAtMSk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBUcnkgdGV4dCB1bmRlciB0aGUgbm9kZS4K
</data>
<flag name="review"
          id="124891"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>